#include #include #include #include /* ftdi_open_results[0] = "all fine"; ftdi_open_results[1] = "usb_find_busses() failed"; ftdi_open_results[2] = "usb_find_devices() failed"; ftdi_open_results[3] = "usb device not found"; ftdi_open_results[4] = "unable to open device"; ftdi_open_results[5] = "unable to claim device"; ftdi_open_results[6] = "reset failed"; ftdi_open_results[7] = "set baudrate failed"; */ int put(struct ftdi_context *ftdic,unsigned char *buf){ int f; //printf("Put %02x\n",buf[0]); f = ftdi_write_data(ftdic, buf, 1); if(f < 0) { fprintf(stderr,"write failed for 0x%x, error %d\n",buf[0],f); return 1; } } #define CLK 0 #define RST 1 #define DELAY 1 #define ROMSIZE 0x10 void dump_packet(unsigned int addr,unsigned int len,unsigned char *packet){ int i,j; int sum =0; for (i=0;i=33 && packet[i+j]<=126 ) printf("%c", packet[i+j]); else printf("."); } printf("|\n"); } } int counter_init(struct ftdi_context *ftdic){ unsigned char buf[1]; printf("Init\n"); buf[0] = 0; /* clk hi */ buf[0] = 1 << CLK; put(ftdic,buf); usleep(DELAY); buf[0] = 1 << CLK | 1 << RST ; put(ftdic,buf); usleep(DELAY); buf[0] = 1 << CLK; put(ftdic,buf); usleep(DELAY); } int counter_clock(struct ftdi_context *ftdic){ unsigned char buf[1]; //printf("Start clock\n"); buf[0] = 0; put(ftdic,buf); usleep(DELAY); buf[0] = 1 << CLK ; put(ftdic,buf); //printf("End clock\n"); //usleep(DELAY); return 0; } unsigned char data_read(struct ftdi_context *ftdic){ int f; unsigned char buf; f = ftdi_read_pins(ftdic,&buf); if(f < 0) { fprintf(stderr,"read failed, error %d\n",f); return 0; } return buf; } int main(int argc, char **argv) { struct ftdi_context ftdica,ftdicb; int f,i,r; ftdi_init(&ftdica); ftdi_init(&ftdicb); // Open A r = ftdi_set_interface(&ftdica, INTERFACE_A); printf("A: set interface A: %d\n",r); f = ftdi_usb_open(&ftdica, 0x0403, 0x6010); if(f < 0 && f != -5) { fprintf(stderr, "A: unable to open ftdi device: %d\n",f); exit(-1); } printf("A: ftdi open succeeded: %d\n",f); r= ftdi_enable_bitbang(&ftdica, 0xFF); printf("A: enabling bitbang mode: %d\n",r); // Open B r = ftdi_set_interface(&ftdicb, INTERFACE_B); printf("B: set interface B: %d\n",r); f = ftdi_usb_open(&ftdicb, 0x0403, 0x6010); if(f < 0 && f != -5) { fprintf(stderr, "B: unable to open ftdi device: %d\n",f); exit(-1); } printf("B: ftdi open succeeded: %d\n",f); r= ftdi_enable_bitbang(&ftdicb, 0xFF); printf("B: enabling bitbang mode: %d\n",r); /* for ( addr = 0; addr<=0xfffff; addr+=1){ counter_clock(&ftdicb); //byte = data_read(&ftdica); if (addr%0xff==0) printf("0x%08x:\n",addr); } exit(0); */ counter_init(&ftdicb); unsigned int addr = 0; unsigned char byte; unsigned char *buffer; unsigned char dummy[10]; buffer = (unsigned char*)malloc(ROMSIZE); if (NULL == buffer){ fprintf(stderr, "Malloc failed",f); exit(-1); } for ( addr = 0; addr