Yet Another C++ Developer
Blog de Marcos Desenvolvimento de Sistemas
Main chip: Lattice iCE40 - HX1K VQ100
Programmer: Atmel AT90USB162-16MU (Digilent ADEPT firmware)
Capacity: 1Mbit SPI Flash (M25P10A)
Oscilator: LTC1799 (Min. 333KHz, Max. 33.3MHz)
The LTC1799 specification shows that the max. freq. of 33MHz is achievable only when using 5V input and it incurs in 2.5% of variance. For 3V, the max. freq. is 20MHz. Using an oscilloscope was possible to see the generated clock signal is highly smoothed.
This does not appear to affect the demo application included in the firmware; however, on my board, I made some changes to have it operate at 10 MHz—the maximum recommended frequency for 3V, with a maximum variation of 2% when above 25°C.
The manual says the M25P10A (on the back of the board) is suffice to hold 2 programs, making it possible to use the WarnBoot feature of the iCE40.
The demo application (Windows only) for the board can be found in the Adept 2 from Digilent, also both the programmer driver and the SDK. The version 2 works with the board.
This board isn't very popular in the FOSS community because of the reliance on the proprietary closed ADEPT firmware in the AT90.
There are many popular open source programmers for iCE40 boards using FTDI chips, you can use the JJP1 and J11 header for external firmware writing.
There are two open source programmers, iceBurn and iceDude, that do not use ADEPT library but reverse engineered the USB messages.
[ToDo] I'm toying with the ADEPT2 SDK and was able to enumerate the ice40 board and its peripherals. In my tests I was able to read, clean and write to the Flash, now I need to implement the ice40 firmware protocol. The firmware in the ice40Blink exposes:
GPIO port, with some bits for the power/reset (output) and CDONE (input)
SPI port, for the Flash
Parallel Port, used by the demo