Hi Steffen,

The ftdi_eeprom utility and ftdi eeprom related functions are not working well with new FTDI chips. I haven't tried to program any of FT2232H series, but I broke my FT232R chip. I didn't have much time to work on that, so I still don't know exactly which part of the EEPROM building code is broken.

I was able to fix it with a Linux box and a raw EEPROM backup I made from a different chip. If you have another FT2232H chip, please make a dump of the EEPROM and then restore it.

I have attached a simple utility I made for that purpise, but you will probably need to modify it, as in my case the VID and PID were still correct.

Good Luck!
Piotr

On 10-02-08 00:01, Steffen Mauch wrote:
Hi,

I tried to change the manufactor and product string of FT2232h.
I used ftdi_eeprom to do it and something went wrong.

Now the FT2232h doesn't enumerate. I disabled the eeprom and now it is working again.
How could I fix the wrong eeprom?

I thought that if I boot the FT2232h without eeprom and enable it after enumeration then I should be able to program it again. I tried FT-Prog, but I got an error, vendor id or product id are not allowed to be zero.
But I tried to erase the device.

ftdi_eeprom says that it could write. But I have he feeling that something goes wrong during programming the eeprom.
If I read back the eeprom, it looks as the attached eeprom.new.


Has anyone programmed an FT2232H device with ftdi_eeprom?
So does it really work?

How could I repair my wrong eeprom?

Thanks.


Mit freundlichen Grüßen
Steffen Mauch

-------------------------
cand. B.Sc. Steffen Mauch

Digital Communications & Signal Processing Lab
Fakultät Computer & Electrical Engineering

Hochschule Furtwangen University
Robert-Gerwig-Platz 1
78120 Furtwangen

Tel    +49 (0)7723 920 2342
Fax    +49 (0)7723 920 2802
Cell   +49 (0)1511 235 2355

[email protected]
www.DCSP.HS-Furtwangen.de


--
libftdi - see http://www.intra2net.com/en/developer/libftdi for details.
To unsubscribe send a mail to [email protected]



--
libftdi - see http://www.intra2net.com/en/developer/libftdi for details.
To unsubscribe send a mail to [email protected]   
#include <stdio.h>
#include "ftdi.h"

int main (int argc, const char * argv[])
{
        unsigned char eeprom_buf[128];
        int size_check;
        int res = 0;
        
    struct ftdi_context ftdi;
    struct ftdi_eeprom eeprom;
    FILE* fp = NULL;

    if( argc != 2 || !(fp = fopen(argv[1], "rb")) ) {
       return -1;
    }
    
    res = fread(eeprom_buf, 1, 128, fp);
    fclose(fp);
    if( res != 128 ) {
        printf("Read only %d bytes, 128 required!\n", res);
        return -1;
    }
        puts("Opening device...");
        
        ftdi_init(&ftdi);
        res = ftdi_usb_open(&ftdi, 0x0403, 0x6001);
        if( res < 0 ) {
                printf("Error opening device: %d\n", res);
                return -1;
        }
        
        printf("erase: %d\n", ftdi_erase_eeprom(&ftdi));
        
        printf("write: %d\n", ftdi_write_eeprom(&ftdi, eeprom_buf));
        
        ftdi_usb_close(&ftdi);
        ftdi_deinit(&ftdi);
        
    // insert code here...
    printf("OK\n");
    return 0;
}

Reply via email to