1 /* LIBFTDI EEPROM access example
3 This program is distributed under the GPL, version 2
14 int main(int argc, char **argv)
16 struct ftdi_context *ftdi;
21 if ((ftdi = ftdi_new()) == 0)
23 fprintf(stderr, "Failed to allocate ftdi structure :%s \n",
24 ftdi_get_error_string(ftdi));
28 while ((i = getopt(argc, argv, "brw")) != -1)
43 fprintf(stderr, "usage: %s [options]\n", *argv);
44 fprintf(stderr, "\t-b do synchronous read and write\n");
45 fprintf(stderr, "\t-r do synchronous read\n");
46 fprintf(stderr, "\t-w do synchronous write\n");
52 // Select first interface
53 ftdi_set_interface(ftdi, INTERFACE_ANY);
55 struct ftdi_device_list *devlist;
57 if ((res = ftdi_usb_find_all(ftdi, &devlist, 0, 0)) < 0)
59 fprintf(stderr, "No FTDI with default VID/PID found\n");
60 retval = EXIT_FAILURE;
66 f = ftdi_usb_open_dev(ftdi, devlist[0].dev);
69 fprintf(stderr, "Unable to open device %d: (%s)",
70 i, ftdi_get_error_string(ftdi));
77 fprintf(stderr, "No devices found\n");
81 ftdi_list_free(&devlist);
82 int err = ftdi_usb_purge_buffers(ftdi);
84 fprintf(stderr, "ftdi_usb_purge_buffer: %d: %s\n",
85 err, ftdi_get_error_string(ftdi));
89 /* Reset MPSSE controller. */
90 err = ftdi_set_bitmode(ftdi, 0, BITMODE_RESET);
92 fprintf(stderr, "ftdi_set_bitmode: %d: %s\n",
93 err, ftdi_get_error_string(ftdi));
97 /* Enable MPSSE controller. Pin directions are set later.*/
98 err = ftdi_set_bitmode(ftdi, 0, BITMODE_MPSSE);
100 fprintf(stderr, "ftdi_set_bitmode: %d: %s\n",
101 err, ftdi_get_error_string(ftdi));
104 uint8_t ftdi_init[15] = {TCK_DIVISOR, 0x00, 0x00,
105 SET_BITS_HIGH, 0, 0xff,
107 SET_BITS_HIGH, 0x55, 0xff,
109 SET_BITS_HIGH, 0xaa, 0xff,
111 struct ftdi_transfer_control *tc_read;
112 struct ftdi_transfer_control *tc_write;
115 tc_read = ftdi_read_data_submit(ftdi, data, 3);
118 tc_write = ftdi_write_data_submit(ftdi, ftdi_init, 15);
119 int transfer = ftdi_transfer_data_done(tc_write);
120 printf("Async write %d\n", transfer);
122 int written = ftdi_write_data(ftdi, ftdi_init, 15);
124 printf("Sync write failed\n");
128 int transfer = ftdi_transfer_data_done(tc_read);
129 printf("Async Read %d\n", transfer);
133 int res = ftdi_read_data(ftdi, data + index, 3 - index);
135 printf("Async read failure at %d\n", index);
141 printf("Read %02x %02x %02x\n", data[0], data[1], data[2]);
143 ftdi_usb_close(ftdi);