annotate doc/FTDI-EEPROM-tools @ 51:311c800268b8

doc/FTDI-EEPROM-tools: added note about bigger EEPROMs not providing any more room for strings
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 22 Apr 2019 23:28:27 +0000
parents b2e9a6f3c833
children 0514e3520be3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
45
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 Mother Mychaela has developed a set of Linux command line tools for manipulating
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 configuration EEPROMs that are attached to FT2232x devices and accessed in-band
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 via USB. This document describes these tools.
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5 Supported FTDI chips and EEPROMs
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6 ================================
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 The present tools work with 93C46, 93C56 and 93C66 EEPROMs attached behind
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9 FT2232x dual-channel UART/FIFO/MPSSE/etc chips, both FT2232C/D and FT2232H.
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 We can read these EEPROMs for examination or backup, and we can program them
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 with new bits, either restoring a previously saved backup or creating a new
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 from-scratch configuration. These EEPROM configurations (which we can save,
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13 restore or create from scratch) set the USB VID:PID and the textual strings
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 naming the manufacturer, the product model and an optional serial number,
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15 select whether each FT2232x channel will come up in the default UART mode or
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16 one of the other EEPROM-configurable modes (245 FIFO, CPU-style FIFO or fast
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17 opto-isolated serial), and allow a few other obscure chip settings to be
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18 tweaked.
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20 Some work has also been done toward the goal of being able to program the
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21 internal EEPROM in FT232R chips (a very popular single-channel USB to UART
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22 converter needing no external components), but this work has not been finished
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23 yet, and the present tools should NOT be used to attempt an EEPROM write on
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24 that chip - the risking of bricking the chip is too high.
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26 More generally, our fteeprom-read tool should be able to read out the EEPROM
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27 content from just about any FTDI chip including FT232R, whereas our
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28 fteeprom-prog tool should be able to program a user-supplied set of bits into
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29 any FTDI+EEPROM combo where the EEPROM is a separate chip - but it is NOT safe
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30 to use on FTDI chips like FT232R or FT-X that have their EEPROM built in.
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 Furthermore, if the goal is to generate a new EEPROM config from scratch, as
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32 opposed to restoring a saved backup, we currently have generators only for
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33 FT2232C/D and for FT2232H. (We also have a generator program for FT232R, but
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34 it is of no use for as long as fteeprom-prog is not safe to use on FT232R
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35 chips.)
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
36
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37 libftdi dependency
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38 ==================
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40 We use libftdi (which is in turn layered on libusb) to issue the special USB
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41 control pipe commands to FTDI chips which are needed to read and write their
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42 EEPROMs. We use old-style libftdi-0.x (-lftdi on the link line) as opposed to
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43 libftdi1 (-lftdi1) because the new versions took away the ability to write to
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
44 the EEPROM directly with ftdi_write_eeprom_location() calls, forcing users to
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45 go through libftdi1's own EEPROM smarts, which we don't want to do - our tools
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46 are all about more direct user empowerment at the lowest level.
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
47
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48 Selecting the device to operate on
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
49 ==================================
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
50
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
51 Our fteeprom-read, fteeprom-prog and fteeprom-erase tools take a device selector
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
52 argument, selecting the device to operate on. This required argument is the
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
53 string to be passed to the ftdi_usb_open_string() function in libftdi, allowing
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
54 the device to be operated on to be selected in one of several ways. Copying
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
55 from libftdi documentation, the available formats are:
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
56
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
57 d:<devicenode> - path of bus and device-node (e.g. "003/001") within usb device
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
58 tree (usually at /proc/bus/usb/)
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
59
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
60 i:<vendor>:<product> - first device with given vendor and product id, ids can
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
61 be decimal, octal (preceded by "0") or hex (preceded by "0x")
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
62
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
63 i:<vendor>:<product>:<index> - as above with index being the number of the
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
64 device (starting with 0) if there are more than one
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
65
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
66 s:<vendor>:<product>:<serial> - first device with given vendor id, product id
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
67 and serial string
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
68
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
69 If you have only one FTDI device connected to your PC or laptop at the time of
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
70 your EEPROM manipulation session (generally a good idea to avoid hitting the
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
71 wrong device by mistake) and if that FTDI device has some sensible starting
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
72 USB VID:PID (either from the previous EEPROM config or the chip's sans-EEPROM
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
73 default) that doesn't clash with anything else, then the i: form will probably
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
74 be the most convenient, e.g.:
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
75
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
76 i:0x0403:0x6001 for single-channel FT232x devices running with the default ID
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
77 i:0x0403:0x6010 for dual-channel FT2232x devices running with the default ID
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
78 i:0x0403:0xPPPP for custom PIDs assigned out of FTDI's VID range
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
79 i:0xVVVV:0xPPPP for totally custom USB IDs
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
80
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
81 Or if the current device config is totally hosed (the EEPROM has a passing
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
82 checksum, but sets some completely bogus USB ID), then the d: form will
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
83 probably be required for recovery.
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
84
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
85 Reading the EEPROM
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
86 ==================
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
87
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
88 The basic EEPROM read command is as follows:
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
89
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
90 fteeprom-read <device-selector>
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
91
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
92 See the previous section for the device selector argument. In this default
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
93 form the tool will read the first 64 EEPROM words, which is appropriate for
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
94 93C46 external EEPROMs or for the internal 1024-bit EEPROM in the FT232R chip.
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
95 However, if you are working with an FT2232x board with an external EEPROM and
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
96 that EEPROM is of a larger variety (93C56 or 93C66), this basic form with give
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
97 you an incomplete (truncated) read, and you will need one of the following
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
98 extended forms to read the complete EEPROM:
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
99
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
100 fteeprom-read -b <device-selector> -- read 128 EEPROM words (93C56)
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
101 fteeprom-read -B <device-selector> -- read 256 EEPROM words (93C66)
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
102
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
103 (If you use one of the extended forms on a smaller EEPROM, you will get 2 or 4
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
104 copies of the same bits.)
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
105
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
106 The output of fteeprom-read is in the same format as the input to fteeprom-prog,
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
107 thus you can redirect the output to a file and get a restorable backup copy of
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
108 your EEPROM.
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
109
49
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
110 It also needs to be noted that if the FTDI device has the kernel's ftdi_sio
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
111 driver attached to it (ttyUSB device present) when you run fteeprom-read (same
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
112 for fteeprom-prog and fteeprom-erase), the act of running any of our EEPROM
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
113 tools will cause it to unbind, i.e., the ttyUSB device will disappear. If the
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
114 device being operated on is a dual-channel FT2232x, then only the ttyUSB device
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
115 corresponding to Channel A will disappear, while the Channel B ttyUSB device
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
116 will stay.
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
117
45
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
118 Programming the EEPROM
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
119 ======================
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
120
49
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
121 In terms of the primitives provided over USB, writing to EEPROMs sitting behind
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
122 FTDI chips is accomplished by writing one 16-bit word at a time: the
45
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
123 SIO_WRITE_EEPROM_REQUEST command writes a user-supplied word at a user-supplied
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
124 EEPROM address. However, our fteeprom-prog tool currently supports only writing
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
125 complete EEPROMs (64 or 128 or 256 16-bit words starting at address 0) and we
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
126 do not currently provide any kind of "random access write" utility; the primary
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
127 reason for this design decision is practical usefulness: FTDI's EEPROM structure
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
128 includes a checksum over the first 64 words for 1024-bit EEPROMs or over the
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
129 first 128 words for larger ones, and if this checksum fails to match, the entire
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
130 structure is deemed to be invalid - hence there is no practical use case for
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
131 selectively rewriting individual words. The only exception may be with 93C66
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
132 EEPROMs: on these giants only the first half would be subject to the checksum,
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
133 and the second half could be used arbitrarily. However, we have not yet
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
134 encountered any boards out in the wild with such big EEPROMs, and we have no
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
135 plans to use such in any of our own hardware designs either, hence there is no
1f3a4115375f doc/FTDI-EEPROM-tools: article started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
136 business case at the present moment to develop tooling support for them.
49
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
137
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
138 There are two primary modes of usage for our fteeprom-prog tool: restoring a
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
139 saved EEPROM backup or writing a new EEPROM config which you generate yourself.
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
140 To restore a saved EEPROM backup, run the tool as follows:
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
141
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
142 fteeprom-prog <device-selector> <eeprom-image-file>
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
143
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
144 To program a new EEPROM config of your own, run a pipeline of this form:
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
145
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
146 <generator-tool> | fteeprom-prog <device-selector>
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
147
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
148 fteeprom-prog reads the EEPROM image from stdin if no image file is named on
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
149 the command line; the image format is the same in both cases, and the length of
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
150 this EEPROM image tells the tool how many words need to be programmed - there
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
151 are no -b or -B options to fteeprom-prog.
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
152
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
153 Generator tools
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
154 ===============
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
155
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
156 Unfortunately FTDI never documented the format of their EEPROM configuration
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
157 structure - apparently they consider it a proprietary trade secret just like
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
158 the wire protocol spoken over USB between their chips and their closed-source
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
159 proprietary drivers. All FOSS community support for these chips is based on
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
160 reverse engineering, and that includes the EEPROM format.
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
161
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
162 The present suite of tools includes ftee-gen2232c and ftee-gen2232h EEPROM image
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
163 generators, meant for use with FT2232C/D and FT2232H chips, respectively. These
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
164 tools are based on the knowledge extracted from other (pre-existing) community
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
165 tools, primarily the EEPROM config code built into various libftdi versions -
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
166 we haven't done any FTDI RE of our own, instead the goal of this project has
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
167 been to create a set of tools that are better fit for production use.
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
168
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
169 Our ftee-gen2232c and ftee-gen2232h tools are invoked as follows:
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
170
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
171 ftee-gen2232[ch] [-b|-B] <config-file> [serial-num]
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
172
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
173 The output of these generator tools is meant to be piped directly into
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
174 fteeprom-prog.
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
175
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
176 The philosophy of which settings are given in the config file vs. which ones
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
177 are given on the command line reflects configuration management and factory
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
178 production line operations. In the envisioned usage there would be a config
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
179 file for each product, giving the USB VID:PID, textual manufacturer and product
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
180 ID strings and possibly other config settings which need to be changed from the
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
181 defaults, but the optional serial number string is given on the command line
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
182 because it would be different for each individual unit being programmed.
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
183
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
184 The EEPROM size selection is also made on the command line, so that the same
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
185 config can be programmed into a smaller EEPROM or a bigger one. By default our
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
186 tools generate an image suitable for a 93C46 EEPROM: the generated image is 64
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
187 words long, with a checksum in word 63, and the EEPROM type byte in FTDI's
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
188 structure is set to 0x46. Running with -b produces an image for a 93C56 EEPROM:
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
189 the EEPROM type byte is set to 0x56, and the checksum-covered image length is
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
190 extended to 128 words. Finally, -B sets things up for a 93C66 EEPROM: the
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
191 EEPROM type byte is set to 0x66, but the generated checksum-covered image is
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
192 still 128 words long just like with -b, as that is what FT2232x chips apparently
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
193 expect. I said "apparently" because I don't have any FT2232x hardware with
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
194 93C66 EEPROMs and I don't plan on acquiring or building any, hence this minimal
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
195 93C66 support is completely untested - use at your own risk.
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
196
51
311c800268b8 doc/FTDI-EEPROM-tools: added note about bigger EEPROMs
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
197 It also needs to be noted that with our current RE-based understanding of FTDI's
311c800268b8 doc/FTDI-EEPROM-tools: added note about bigger EEPROMs
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
198 undocumented EEPROM structure, using a bigger EEPROM does NOT provide more room
311c800268b8 doc/FTDI-EEPROM-tools: added note about bigger EEPROMs
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
199 for strings: all that happens with -b and -B options is that a gap of 64 unused
311c800268b8 doc/FTDI-EEPROM-tools: added note about bigger EEPROMs
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
200 EEPROM words is inserted between the end of the fixed structure and the
311c800268b8 doc/FTDI-EEPROM-tools: added note about bigger EEPROMs
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
201 beginning of strings. The exact same arrangement has been observed in all 93C56
311c800268b8 doc/FTDI-EEPROM-tools: added note about bigger EEPROMs
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
202 EEPROM images found in the wild, presumably produced with FTDI's official tools,
311c800268b8 doc/FTDI-EEPROM-tools: added note about bigger EEPROMs
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
203 including FTDI's own USB-COM232-PLUS2 board - thus it is not clear at all if
311c800268b8 doc/FTDI-EEPROM-tools: added note about bigger EEPROMs
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
204 FT2232x chips actually support longer strings with bigger EEPROMs, and if not,
311c800268b8 doc/FTDI-EEPROM-tools: added note about bigger EEPROMs
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
205 what does one need a bigger EEPROM for...
311c800268b8 doc/FTDI-EEPROM-tools: added note about bigger EEPROMs
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
206
49
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
207 For the format of config files read by our ftee-gen2232[ch] tools and what
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
208 settings can be tweaked, read the source code.
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
209
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
210 Erasing the EEPROM (making it blank)
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
211 ====================================
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
212
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
213 If you are playing with a "generic" FT2232x breakout board that is made for
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
214 tinkering, as opposed to a more finished product, such boards are typically
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
215 shipped with their EEPROMs completely blank. In that case restoring the EEPROM
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
216 to its "pristine" state after playing around would mean erasing it, i.e.,
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
217 bringing it into a blank (all ones) state. FT2232x chips provide two ways to
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
218 do so: one can explicitly write 0xFFFF into each individual EEPROM word with
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
219 SIO_WRITE_EEPROM_REQUEST, or one can send a SIO_ERASE_EEPROM_REQUEST command to
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
220 the chip, and the chip then erases the entire EEPROM. But we don't know how
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
221 the latter SIO_ERASE_EEPROM_REQUEST operation is implemented by FT2232x chips:
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
222 does the FT2232x chip go through and erase each word individually, or does it
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
223 issue an "erase full chip" opcode to the serial EEPROM? If the latter, then
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
224 according to some EEPROM datasheets that operation may not work if the EEPROM
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
225 is powered from a 3.3V rail rather than the full USB 5V - may be an issue in
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
226 FT2232H-based designs.
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
227
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
228 In any case our tools provide both ways. To perform the "automatic full chip
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
229 erase" operation, run the following command:
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
230
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
231 fteeprom-erase <device-selector>
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
232
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
233 To blank the EEPROM by writing 0xFFFF into each word, run one of the following
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
234 pipelines:
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
235
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
236 ftee-mkblank | fteeprom-prog <device-selector> -- blank a 93C46 EEPROM
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
237 ftee-mkblank -b | fteeprom-prog <device-selector> -- blank a 93C56 EEPROM
b2e9a6f3c833 doc/FTDI-EEPROM-tools: document finished
Mychaela Falconia <falcon@freecalypso.org>
parents: 45
diff changeset
238 ftee-mkblank -B | fteeprom-prog <device-selector> -- blank a 93C66 EEPROM