The branch, master has been updated
via f45f42373318c5504e7d42168991808fb017ca0c (commit)
via e659737ab6228e2da955057637d567c64822825e (commit)
via 519bbce162c907e93cef6fd372f3224387828034 (commit)
via 6ae693b23c410578d6179dec7e61bd36b932c851 (commit)
from 16257d60fb84f09b0d66ad881fe47e7b6faa84ef (commit)
- Log -----------------------------------------------------------------
commit f45f42373318c5504e7d42168991808fb017ca0c
Author: Uwe Bonnes <bon@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
Date: Thu Apr 24 20:38:22 2014 +0200
ft230x: Fix more eeprom decode pathes.
commit e659737ab6228e2da955057637d567c64822825e
Author: Uwe Bonnes <bon@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
Date: Thu Apr 24 19:25:27 2014 +0200
ft230x: Use factory values for drive strength.
commit 519bbce162c907e93cef6fd372f3224387828034
Author: Uwe Bonnes <bon@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
Date: Thu Apr 24 19:14:32 2014 +0200
ft230x: Include Factory Configuration Data when building new eeprom data.
commit 6ae693b23c410578d6179dec7e61bd36b932c851
Author: Uwe Bonnes <bon@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
Date: Thu Apr 24 16:35:52 2014 +0200
FT230X is a USB FS device, so maximum packet size is only 64 bytes.
No Baudrate > 3 MBaud neither.
-----------------------------------------------------------------------
Summary of changes:
src/ftdi.c | 34 +++++++++++++++++++++++-----------
1 files changed, 23 insertions(+), 11 deletions(-)
diff --git a/src/ftdi.c b/src/ftdi.c
index ff26166..03a10be 100644
--- a/src/ftdi.c
+++ b/src/ftdi.c
@@ -470,7 +470,7 @@ static unsigned int _ftdi_determine_max_packet_size(struct
ftdi_context *ftdi, l
// Determine maximum packet size. Init with default value.
// New hi-speed devices from FTDI use a packet size of 512 bytes
// but could be connected to a normal speed USB hub -> 64 bytes packet
size.
- if (ftdi->type == TYPE_2232H || ftdi->type == TYPE_4232H || ftdi->type ==
TYPE_232H || ftdi->type == TYPE_230X)
+ if (ftdi->type == TYPE_2232H || ftdi->type == TYPE_4232H || ftdi->type ==
TYPE_232H)
packet_size = 512;
else
packet_size = 64;
@@ -1175,7 +1175,7 @@ static int ftdi_convert_baudrate(int baudrate, struct
ftdi_context *ftdi,
#define H_CLK 120000000
#define C_CLK 48000000
- if ((ftdi->type == TYPE_2232H) || (ftdi->type == TYPE_4232H) ||
(ftdi->type == TYPE_232H) || (ftdi->type == TYPE_230X))
+ if ((ftdi->type == TYPE_2232H) || (ftdi->type == TYPE_4232H) ||
(ftdi->type == TYPE_232H))
{
if(baudrate*10 > H_CLK /0x3fff)
{
@@ -1200,7 +1200,7 @@ static int ftdi_convert_baudrate(int baudrate, struct
ftdi_context *ftdi,
}
// Split into "value" and "index" values
*value = (unsigned short)(encoded_divisor & 0xFFFF);
- if (ftdi->type == TYPE_2232H || ftdi->type == TYPE_4232H || ftdi->type ==
TYPE_232H || ftdi->type == TYPE_230X)
+ if (ftdi->type == TYPE_2232H || ftdi->type == TYPE_4232H || ftdi->type ==
TYPE_232H)
{
*index = (unsigned short)(encoded_divisor >> 8);
*index &= 0xFF00;
@@ -3059,7 +3059,8 @@ int ftdi_eeprom_build(struct ftdi_context *ftdi)
case TYPE_230X:
output[0x00] = 0x80; /* Actually, leave the default value */
output[0x0a] = 0x08; /* Enable USB Serial Number */
- output[0x0c] = (0x01) | (0x3 << 4); /* DBUS drive 4mA, CBUS drive
16mA */
+ /*FIXME: Make DBUS & CBUS Control configurable*/
+ output[0x0c] = 0; /* DBUS drive 4mA, CBUS drive 4 mA like
factory default */
for (j = 0; j <= 6; j++)
{
output[0x1a + j] = eeprom->cbus_function[j];
@@ -3077,9 +3078,18 @@ int ftdi_eeprom_build(struct ftdi_context *ftdi)
/* FT230X has a user section in the MTP which is not part of the
checksum */
i = 0x40;
}
- value = output[i*2];
- value += output[(i*2)+1] << 8;
-
+ if ((ftdi->type == TYPE_230X) && (i >= 0x40) && (i < 0x50)) {
+ uint16_t data;
+ if (ftdi_read_eeprom_location(ftdi, i, &data)) {
+ fprintf(stderr, "Reading Factory Configuration Data failed\n");
+ i = 0x50;
+ }
+ value = data;
+ }
+ else {
+ value = output[i*2];
+ value += output[(i*2)+1] << 8;
+ }
checksum = value^checksum;
checksum = (checksum << 1) | (checksum >> 15);
}
@@ -3113,6 +3123,8 @@ static unsigned char bit2type(unsigned char bits)
/**
Decode binary EEPROM image into an ftdi_eeprom structure.
+ For FT-X devices use AN_201 FT-X MTP memory Configuration to decode.
+
\param ftdi pointer to ftdi_context
\param verbose Decode EEPROM on stdout
@@ -3421,14 +3433,14 @@ int ftdi_eeprom_decode(struct ftdi_context *ftdi, int
verbose)
channel_mode[eeprom->channel_a_type],
(eeprom->channel_a_driver)?" VCP":"",
(eeprom->high_current_a)?" High Current IO":"");
- if (ftdi->type >= TYPE_232H)
+ if (ftdi->type == TYPE_232H)
{
fprintf(stdout,"FT1284 Mode Clock is idle %s, %s first, %sFlow
Control\n",
(eeprom->clock_polarity)?"HIGH":"LOW",
(eeprom->data_order)?"LSB":"MSB",
(eeprom->flow_control)?"":"No ");
}
- if ((ftdi->type >= TYPE_2232C) && (ftdi->type != TYPE_R) &&
(ftdi->type != TYPE_232H))
+ if ((ftdi->type == TYPE_2232H) || (ftdi->type == TYPE_4232H))
fprintf(stdout,"Channel B has Mode %s%s%s\n",
channel_mode[eeprom->channel_b_type],
(eeprom->channel_b_driver)?" VCP":"",
@@ -3491,7 +3503,7 @@ int ftdi_eeprom_decode(struct ftdi_context *ftdi, int
verbose)
"I2C_TXE#", "I2C_RXF#", "VBUS_SENSE",
"BB_WR#",
"BBRD#", "TIME_STAMP", "AWAKE#",
};
- fprintf(stdout,"IOBUS has %d mA drive%s%s\n",
+ fprintf(stdout,"DBUS has %d mA drive%s%s\n",
(eeprom->group0_drive+1) *4,
(eeprom->group0_schmitt)?" Schmitt Input":"",
(eeprom->group0_slew)?" Slow Slew":"");
@@ -4217,7 +4229,7 @@ int ftdi_erase_eeprom(struct ftdi_context *ftdi)
if (ftdi == NULL || ftdi->usb_dev == NULL)
ftdi_error_return(-2, "USB device unavailable");
- if (ftdi->type == TYPE_R)
+ if ((ftdi->type == TYPE_R) || (ftdi->type == TYPE_230X))
{
ftdi->eeprom->chip = 0;
return 0;
hooks/post-receive
--
A library to talk to FTDI chips
--
libftdi-git - see http://www.intra2net.com/en/developer/libftdi for details.
To unsubscribe send a mail to libftdi-git+unsubscribe@xxxxxxxxxxxxxxxxxxxxxxx
|