Hello Uwe,
consider this code:
int ftdi_eeprom_build(struct ftdi_context *ftdi)
{
...
// Dynamic content
// Strings start at 0x94 (TYPE_AM, TYPE_BM)
// 0x96 (TYPE_2232C), 0x98 (TYPE_R) and 0x9a (TYPE_x232H)
i = 0;
switch(ftdi->type)
{
case TYPE_2232H:
case TYPE_4232H:
i += 2;
case TYPE_R:
i += 2;
case TYPE_2232C:
i += 2;
case TYPE_AM:
case TYPE_BM:
i += 0x94;
}
/* Wrap around 0x80 for 128 byte EEPROMS (Internale and 93x46) */
k = eeprom->size -1;
// Addr 0E: Offset of the manufacturer string + 0x80, calculated later
// Addr 0F: Length of manufacturer string
// Output manufacturer
output[0x0E] = i; // calculate offset
output[i++ & k] = manufacturer_size*2 + 2;
...
}
For a FT245BM type chip, the eeprom->size will be 0x80.
This results in
i = 0x94;
k = 127;
"i++ & k" will result in 0x14. The length of the manufacturer string
is stored in 0x0f, so this is wrong for the BM type chips. Luckily
it will be overwritten later on.
Can you enlighten me why the offset for the "length of the manufacturer
string descriptor" is calculated dynamically? Atleast for the FT245BM and
the FT2232C, it's always at 0x0F. Cut'n'paste typo?
Cheers,
Thomas
--
libftdi - see http://www.intra2net.com/en/developer/libftdi for details.
To unsubscribe send a mail to libftdi+unsubscribe@xxxxxxxxxxxxxxxxxxxxxxx
|