libftdi Archives

Subject: Re: Writing EEPROM on FT232R / FT245R

From: Jim Paris <jim@xxxxxxxx>
To: libftdi@xxxxxxxxxxxxxxxxxxxxxxx
Date: Thu, 12 Mar 2009 18:37:39 -0400
Hi,

Marius Kintel wrote:
> o Corrected writing to EEPROM (only tested on FT232R)

I can verify that this works on FT232R here.

I found a document that describes the FT232R programming:
  
http://www.ftdichip.com/Documents/AppNotes/AN_105_FTDI_Device_Programming_Using_Vinculum_VNC1L(FT_000078).pdf

In section 4.3.3 "Writing to the EEPROM of an FTxxxR chip" it says
three things of interest:

- The latency timer must be set to 77ms for programming to work
  (this is what you and I both determined by tracing MProg)

- Erasing an internal EEPROM is not supported (as you noted)

- The EEPROM is programmed in 32-bit words, so you need to write
  two 16-bit values before an actual write is triggered.
  This would affect us if we tried to write a single location,
  but since we write the whole thing, it's not a problem.
  (as they say, "Writing data to the EEPROM starting at the first
  location and finishing at the last location, the conditions for
  writing two words at a time in order are met")

Some comments:

> From c4d60f651ac565d2a155185a8672cca6e3a18423 Mon Sep 17 00:00:00 2001
> From: Marius Kintel <kintel@xxxxxx>
> Date: Mon, 2 Mar 2009 17:36:14 +0100
> Subject: [PATCH 4/6] Correct writing of EEPROM
> 
> -    unsigned short usb_val;
> +    unsigned short usb_val, status;
>      int i;
>  
> +    /* These commands were traced while running MProg */
> +    ftdi_usb_reset(ftdi);
> +    ftdi_poll_modem_status(ftdi, &status);
> +    ftdi_set_latency_timer(ftdi, 0x77);

ftdi_usb_reset and ftdi_poll_modem_status are unnecessary here


> From b8329ee90ab2018e71322f941284965691ac3161 Mon Sep 17 00:00:00 2001
> From: Marius Kintel <kintel@xxxxxx>
> Date: Mon, 2 Mar 2009 18:37:36 +0100
> Subject: [PATCH 6/6] Cleanup of decode function
...
> +/**
> +   Decode binary EEPROM image into an ftdi_eeprom structure.
> +
> +   \param eeprom Pointer to ftdi_eeprom which will be filled in.
> +   \param output Buffer of \a size bytes of raw eeprom data
> +   \param size size size of eeprom data in bytes
> +
> +   \retval 0: all fine
> +   \retval -1: something went wrong
> +
> +   FIXME: How to pass size? How to handle size field in ftdi_eeprom?
> +   FIXME: Strings are malloc'ed here and should be freed somewhere
> +*/
> +void ftdi_eeprom_decode(struct ftdi_eeprom *eeprom, unsigned char *buf, int 
> size)

you return values but the function is void


-jim

--
libftdi - see http://www.intra2net.com/en/developer/libftdi for details.
To unsubscribe send a mail to libftdi+unsubscribe@xxxxxxxxxxxxxxxxxxxxxxx   

Current Thread