libftdi Archives

Subject: FT2232D, Interface B... how do I bitbang?

From: John Oyler <john.oyler@xxxxxxxxxxxxxx>
To: libftdi@xxxxxxxxxxxxxxxxxxxxxxx
Date: Sun, 29 Aug 2010 12:43:41 -0500
Here's what I have so far, and it's correct near as I can tell (runs without segfault, error, or exiting... and I know what most of it is at this point):

int ft2232_bb_init(void) {
        int f;
        struct ftdi_context *ftdic = &ftdic_context;
        unsigned char buf[512];
        enum ftdi_interface ft2232_interface = INTERFACE_B;
        if (ftdi_init(ftdic) < 0) {
                printf("ftdi_init failed\n");
                return EXIT_FAILURE; // TODO

        f = ftdi_usb_open(ftdic, FTDI_VID, FTDI_PID);
        if (f < 0 && f != -5) {
                printf("Unable to open FTDI device: %d (%s)\n", f, ftdi_get_error_string(ftdic));
                exit(-1); // TODO
        if (ftdi_set_interface(ftdic, ft2232_interface) < 0) {
                printf("Unable to select interface: %s\n", ftdic->error_str);

        if (ftdi_usb_reset(ftdic) < 0) {
                printf("Unable to reset FTDI device\n");
        if (ftdi_set_latency_timer(ftdic, 2) < 0) {
                printf("Unable to set latency timer\n");

        if (ftdi_write_data_set_chunksize(ftdic, 512)) {
                printf("Unable to set chunk size\n");

        if (ftdi_set_bitmode(ftdic, 0xc0, BITMODE_BITBANG_NORMAL) < 0) {  // BITMODE_BITBANG_NORMAL = 1
                printf("Unable to set bitmode to bitbangin'\n");

        return 0;

As long as you've not also run ftdi_usb_open(), this works fine. I'm having trouble figuring out what to do next though. Do I just send a 0x80 (set data bits lowbyte) ?

I'd like to blink some leds on BDBUS6 and 7, and I'd like to read two interrupts on BDBUS0 and 1. But it's not clicking for me what it is that I need to do.

John O.

libftdi - see for details.
To unsubscribe send a mail to libftdi+unsubscribe@xxxxxxxxxxxxxxxxxxxxxxx

Current Thread
  • FT2232D, Interface B... how do I bitbang?, John Oyler <=