view eeproms/icestick @ 68:5cbde3c80c24

fteeprom-{erase,prog}: detach logic: change to detach by default As it turns out, detaching all ttyUSB interfaces of a multichannel device does not require outside knowledge of how many channels there are, as in our previous -d option design that is being removed here - instead we can read the bNumInterfaces constant from the USB device's config descriptor and thus know how many interfaces there are in total. Based on this discovery, change the design of fteeprom-{erase,prog} as follows: * remove -d option; * flip the default to where we detach all interfaces by default; * add -n option to NOT detach any interfaces.
author Mychaela Falconia <falcon@freecalypso.org>
date Wed, 13 Sep 2023 06:37:03 +0000
parents 434806360d91
children d46ea7a3fa0c
line wrap: on
line source

# Lattice iCEstick FPGA board features an FT2232H chip, with Channel A wired
# for MPSSE mode (access to SPI flash and FPGA configuration controls) and
# Channel B wired as a UART for user logic implemented in the FPGA.  This
# FT2232H subsystem includes a 93C56 EEPROM, but boards are shipped with it
# blank, causing the FT2232H chip to take its default VID:PID.
#
# Having this default VID:PID causes undesirable behavior under Linux: a pair
# of ttyUSB devices is created upon plug-in, but the first of these two then
# disappears when the developer runs iceprog to manipulate FPGA programming,
# creating a gap in ttyUSB device numbers.  And even if you are working with a
# stable logic design and not running iceprog, the first of the two created
# ttyUSB devices is still bogus, as that hardware channel is wired for MPSSE
# and not UART.
#
# In Falconian queendom, the solution to this problem is to program the EEPROM
# behind the FT2232H chip with our own image and set the USB ID to a code that
# tells the Linux kernel to create a ttyUSB device only for Channel B - the
# so-called "JTAG quirk".  Falconia Partners LLC got a block of 8 PIDs
# officially allocated to us by FTDI, and since 2020-09 the mainline Linux
# kernel recognizes two of them as JTAG quirks.  Use one of those two PIDs.

vid 0x0403	# FTDI
pid 0x7150	# Allocated by FTDI to Falconia, JTAG quirk in Linux

manuf Lattice
product ICE40HX1K-STICK-EVN