FreeCalypso > hg > fc-usbser-tools
view doc/Icestick-instructions @ 39:b9ecfa54fe2b
fc-duart28-conf: replace find and check-eeprom with single show command
The original design with separate find and check-eeprom commands
was driven by the assumption that we had to bump off the ftdi_sio driver
in order to read the EEPROM, while a USB device tree check could be done
non-invasively. However, now that we know that we can read the EEPROM
non-invasively too, we can simplify the tool with a single show command.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 10 Sep 2023 19:21:20 +0000 |
parents | 6bf063ade588 |
children |
line wrap: on
line source
If you have a Lattice iCEstick FPGA board (ICE40HX1K-STICK-EVN) and you wish to program its FT2232H subsystem EEPROM with a sensible configuration that results in the Linux kernel ftdi_sio driver leaving Channel A untouched and creating a single ttyUSB device for Channel B, follow these instructions: 1) Plug your iCEstick board into your PC/laptop or other Linux host, and run lsusb. There should be one particular line in lsusb output that reads like this: Bus 001 Device 014: ID 0403:6010 Future Technology Devices International, Ltd FT2232C/D/H Dual UART/FIFO IC or perhaps like this on older systems: Bus 001 Device 014: ID 0403:6010 Future Technology Devices International, Ltd FT2232C Dual USB-UART/FIFO IC Bus and device numbers will be different on your system, but the important part is ID 0403:6010 - it is the default USB ID of FT2232x chips that appears when no custom ID has been assigned via the EEPROM. 2) Ensure that you don't have any other USB devices with ID 0403:6010 - given that it is the chip's default, lots of devices use it! Make sure that there is only one line in lsusb output that reads ID 0403:6010. Unplug your iCEstick and make sure that this line disappears. Plug it back in and make sure the line reappears. 3) Once you are sure that you won't hit some other USB device using the same popular ID code, execute this programming command pipeline: ftee-gen2232h -b icestick | fteeprom-prog i:0x0403:0x6010 This shell pipeline is a little long and looks complicated, but it must be issued exactly as listed above. The first part of the pipeline generates an image for an FT2232H chip (ftee-gen2232h) with 93C56 EEPROM (-b option) based on standard (shipped with fc-usbser-tools) configuration named "icestick"; the second part of the pipeline sends physical EEPROM write commands (USB control endpoint requests, FTDI-specific) to the USB device matching the given ID. 4) Unplug and replug the iCEstick for the EEPROM change to take effect. Run lsusb again and note that the USB ID is now 0403:7150 instead of 0403:6010 - still within FTDI's vendor ID, but with a specific, non-default product ID code. With the new ID the Linux kernel ftdi_sio driver should create a ttyUSB device only for FT2232H Channel B, which is the UART channel for talking to user logic inside the FPGA. I (Mother Mychaela) also recommend that you create an iceprog-7150 wrapper around the standard iceprog utility from IceStorm toolkit, in the form of a shell script like this: #!/bin/sh exec /usr/local/bin/iceprog -d i:0x0403:0x7150 "$@" It looks like Claire (the author of IceStorm) was not as bothered as I am by the bogosity of a ttyUSB device for the MPSSE channel that appears on plug-in but then disappears once you run a userspace program that exercises MPSSE via libftdi: she coded iceprog to look for 0403:6010 in the absence of a -d option giving a custom device selector string, rather than doing something similar to what I did. With standard iceprog being as it is, we need to run it with this -d option when we have programmed the FT2232H EEPROM to use a more sensible USB ID, and in my opinion the most sane way to supply this needed option is via a wrapper as recommended above.