ftdi_eeprom_build(): Fix inverted handling of VCP driver field for TYPE_R chips
[libftdi] / doc / EEPROM-structure
index 731c559..4a590b6 100644 (file)
@@ -3,63 +3,71 @@ Here we try to document what we know about the EEPROM Structure.
 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
@@ -71,19 +79,32 @@ On several FT2232H different values were observed
 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."