Even with a 93xx66 EEPROM, at maximum 256 Bytes are used
All important things happen in the first
-0x14(FT232/245), 0x16(FT2232CD), 0x18(FT232/245R) or 0x1a (FT2232H/4432H)
-bytes
+0x14(FT232/245), 0x16(FT2232CD), 0x18(FT232/245R) or 0x1a (FT2232H/4432H) bytes
-Type | Use Extra EEPROM Space
+Type | Use extra EEPROM space
FT2XXB | No
Byte.BIT| TYPE_AM TYPE_BM TYPE_2232C TYPE_R TYPE_2232H TYPE_4232H
-00.0 | 0 0 channel_a_type channel_a_type channel_a_type
-00.1 | 0 0 channel_a_type channel_a_type channel_a_type
-00.2 | 0 0 channel_a_type high_current channel_a_type channel_a_type
+00.0 | 0 0 channel_a_type 232R/245R channel_a_type 0
+00.1 | 0 0 channel_a_type channel_a_type 0
+00.2 | 0 0 channel_a_type high_current channel_a_type 0
00.3 | 0 0 channel_a_driver channel_a_driver channel_a_driver channel_a_driver
-00.4 | 0 0 high_current_a 0 0 0
+00.4 | 0 0 high_current_a 0 0 0
00.5 | 0 0 0 0 0 0
00.6 | 0 0 0 0 0 0
-00.7 | 0 0 0 0 SUSPEND_DBUS7 0
+00.7 | 0 0 0 0 SUSPEND_DBUS7 channel_c_driver
-On TYPE_R 00.3 set mean D2XX, on other devices VCP
+On TYPE_R 00.0 is set for the FT245R and cleared for the FT232R
+On TYPE_R 00.3 set means D2XX, on other devices VCP
-01.0 | 0 0 channel_b_type channel_b_type channel_b_type
-01.1 | 0 0 channel_b_type channel_b_type channel_b_type
-01.2 | 0 0 channel_b_type 0 channel_b_type channel_b_type
+01.0 | 0 0 channel_b_type channel_b_type 0
+01.1 | 0 0 channel_b_type channel_b_type 0
+01.2 | 0 0 channel_b_type 0 channel_b_type 0
01.3 | 0 0 channel_b_driver 0 channel_b_driver channel_b_driver
-01.4 | 0 0 high_current_b 0 0 0
+01.4 | 0 0 high_current_b 0 0 0
01.5 | 0 0 0 0 0 0
-01.6 | 0 0 0 0 0
-01.7 | 0 0 0 0 0 0
+01.6 | 0 0 0 0 0
+01.7 | 0 0 0 0 0 channel_d_driver
-Fixme: Missing 4232H validation and channel_c_driver, channel_d_driver, channel_a|b|c|d_rs484enable
+Fixme: Missing 4232H validation
-02 | VID-LSB(all)
-03 | VID-MSB(all)
-04 | PID-LSB(all)
-05 | PID-MSB(all)
-06 | REL-LSB (not tested on TYPE_AM, TYPE_BM and TYPE_4232H)
-07 | REL-MSB (not tested on TYPE_AM, TYPE_BM and TYPE_4232H)
+02 | Vendor ID (VID) LSB (all)
+03 | Vendor ID (VID) MSB (all)
+04 | Product ID (PID) LSB (all)
+05 | Product ID (PID) MSB (all)
+06 | Device release number LSB (not tested on TYPE_4232H)
+07 | Device release number MSB (not tested on TYPE_4232H)
|
-08.4 | Self-Wakeup
-08.5 | Remote-Wakeup
-08.6 | Self-Powered
+08.4 | Battery powered
+08.5 | Remote wakeup
+08.6 | Self powered: 1, bus powered: 0
08.7 | Always 1
|
-09 | MaxPower(maA/2)
+09 | Max power (mA/2)
|
-Byte.BIT| TYPE_AM TYPE_BM TYPE_2232C TYPE_R TYPE_2232H TYPE_4232H
-0a.0 | 0 IsoIn
-0a.1 | 0 IsoOut
-0a.2 | 0 suspend_pull_down suspend_pull_down suspend_pull_down
-0a.3 | 0 use_serial use_serial
-0a.4 | 0 change_usb_version change_usb_version
- |
-0b | TYPE_R Bitmask Invert, 0 else
+Byte.BIT| TYPE_AM TYPE_BM TYPE_2232C TYPE_R TYPE_2232H TYPE_4232H
+0a.0 | 0 IsoIn IsoIn part A 0 0 0
+0a.1 | 0 IsoOut IsoOut part A 0 0 0
+0a.2 | 0 suspend_pull_down suspend_pull_down suspend_pull_down suspend_pull_down
+0a.3 | 0 use_serial use_serial use_serial
+0a.4 | 0 change_usb_version change_usb_version
+0a.5 | 0 0 IsoIn part B 0 0 0
+0a.6 | 0 0 IsoOut part B 0 0 0
+0a.7 | 0 - reserved
+
+0b | TYPE_R Bitmask Invert, 0 else
+Byte.BIT| TYPE_4232H
+0b.4 | channel_a_rs485enable
+0b.5 | channel_b_rs485enable
+0b.6 | channel_c_rs485enable
+0b.7 | channel_d_rs485enable
Byte | TYPE_AM TYPE_BM TYPE_2232C TYPE_R TYPE_2232H TYPE_4232H
-0c | ? USB-VER-LSB USB-VER-LSB 0 ? ?
-0d | ? USB-VER-MSB USB-VER-MSB 0 ? ?
-On several FT2232H different values were observed
-
+0c | 0 USB-VER-LSB USB-VER-LSB 0 ? ?
+0d | 0 USB-VER-MSB USB-VER-MSB 0 ? ?
+(On several FT2232H different values were observed -> The value is unused
+ if change USB version is not set, so it might contain garbage)
0e | OFFSET Vendor
0f | Len VENDOR
13 | Length Serial
Byte.BIT| TYPE_AM TYPE_BM TYPE_2232C TYPE_R TYPE_2232H TYPE_4232H
-14.3:0 | UA UA CHIP CBUS[0] AL A
-14.7:0 | UA UA CHIP CBUS[1] AH B
-15.3:0 | UA UA 0 CBUS[2] BL C
-15.7:0 | UA UA 0 CBUS[3] BH D
-16.3:0 | UA UA UA CBUS[4] 0 0
-16.7:0 | UA UA UA 0 0 0
-
+14.3:0 | UA UA CHIP CBUS[0] AL A
+14.7:0 | UA UA CHIP CBUS[1] AH B
+15.3:0 | UA UA 0 CBUS[2] BL C
+15.7:0 | UA UA 0 CBUS[3] BH D
+16.3:0 | UA UA UA CBUS[4] 0 0
+16.7:0 | UA UA UA 0 0 0
+
+CHIP values:
+0x46: EEPROM is a 93xx46
+0x56: EEPROM is a 93xx56
+0x66: EEPROM is a 93xx66
+
17 UA UA UA 0 0 0
-18 UA UA UA VENDOR CHIP CHIP
-19 UA UA UA VENDOR 0 0
+18 UA UA UA VENDOR CHIP CHIP
+19 UA UA UA VENDOR 0 0
+
+1a UA (all)
+
-1a UA(all)
+Additional fields after the serial string:
+0x00, 0x00 - reserved for "legacy port name prefix"
+0x00, 0x00 - reserved for plug and play options
+(Observed values with PnP == 0:
+0x02 0x03 0x01 0x00)
-Mprog doesn's seem to write this:
-After last string
-0x02 0x03 0x01 with PnP == 0
\ No newline at end of file
+Note: The additional fields after the serial number string
+collide with the official FTDI formula from AN_121 regarding
+the start of the user area:
+"Start Address = the address following the last byte of SerialNumber string."