Bounty for a Bus Blaster v2 self-test app

Posted on Wednesday, June 8th, 2011 in Bus Blaster, manufacturing by Ian

Bus Blaster v2 is a pain to test at the factory. That is likely holding up the supply.

A simple Windows test application would help things along. It’s a very basic app if you’re already setup to work with FTDI chips, but we’re not.

To speed things along, we’re offering a bounty for a test application. As a thank you for chipping in, the first developer with an app can take any project from our current catalog and a free PCB code.

A general outline and program requirements are listed below.

Basic overview:

  1. Attach to FT2232
  2. Configure for IO mode, upper 8bits of MPSSE 1 are output, the lower 8bits are input
  3. Write 0x55 to upper 8bits, compare to lower 8bits
  4. Write 0xAA to upper 8bits, compare to lower 8bits
  5. If 3 & 4 match, success
  6. Close FT2232, go back to 1 for next test

A command line app is preferable. The testers do require Windows.

This entry was posted on Wednesday, June 8th, 2011 at 2:24 pm and is filed under Bus Blaster, manufacturing. You can follow any responses to this entry through the RSS 2.0 feed. You can skip to the end and leave a response. Pinging is currently not allowed.

4 Responses to “Bounty for a Bus Blaster v2 self-test app”

  1. broeggle says:

    Not sure if this works, since I don’t own a bus blaster.

    Based on libftdi’s example bitbang_ft2232.c
    Uses libfti which is available on linux/windows/mac.

    Since MSPPE is 16 bit wide I tried using two ports.

    Maybe it’s atleast a starting point

    /* bitbang_ft2232-busblaster.c

    based on FTDI’s bitbang_ft2232.c

    Thanks to for fixing and extending
    the example for the second channel.

    This program is distributed under the GPL, version 2

    Peter Huewe

    #ifdef __WIN32__
    #define sleep(x) _sleep(x)
    #define CHANNEL1 0xFF
    #define CHANNEL2 0x00

    int main(int argc, char **argv)
    struct ftdi_context ftdic, ftdic2;
    char buf,value;
    int f,i;

    char patterns[]={0xAA, 0x55};

    // Init 1. channel
    if (ftdi_init(&ftdic) < 0)
    fprintf(stderr, "ftdi_init failed\n");
    return EXIT_FAILURE;

    ftdi_set_interface(&ftdic, INTERFACE_A);
    f = ftdi_usb_open(&ftdic, 0x0403, 0x6001);
    if (f < 0 && f != -5)
    fprintf(stderr, "unable to open ftdi device: %d (%s)\n", f, ftdi_get_error_string(&ftdic));
    printf("ftdi open succeeded(channel 1): %d\n",f);

    printf("enabling bitbang mode(channel 1)\n");
    ftdi_set_bitmode(&ftdic, CHANNEL1, BITMODE_MPSSE);

    // Init 2. channel
    if (ftdi_init(&ftdic2) < 0)
    fprintf(stderr, "ftdi_init failed\n");
    return EXIT_FAILURE;
    ftdi_set_interface(&ftdic2, INTERFACE_B);
    f = ftdi_usb_open(&ftdic2, 0x0403, 0x6001);
    if (f < 0 && f != -5)
    fprintf(stderr, "unable to open ftdi device: %d (%s)\n", f, ftdi_get_error_string(&ftdic2));
    printf("ftdi open succeeded(channel 2): %d\n",f);

    printf("enabling bitbang mode (channel 2)\n");
    ftdi_set_bitmode(&ftdic2, CHANNEL2, BITMODE_MPSSE);

    // Write data

    for (i = 0; i < sizeof (patterns)/sizeof(patterns[0]); i++) {
    buf = patterns[i];
    f = ftdi_write_data(&ftdic, &buf, 1);
    if (f < 0)
    fprintf(stderr,"write failed on channel 1 for 0x%x, error %d (%s)\n", buf, f, ftdi_get_error_string(&ftdic));

    f= ftdi_read_pins(&ftdic2, &val);
    if (f < 0)
    fprintf(stderr,"read failed on channel 2 for 0x%x, error %d (%s)\n", val, f, ftdi_get_error_string(&ftdic2));
    if (val != patterns[i]) {
    fprintf(stderr, "read value %d, expected %d\n", val, patterns[i]);
    return -1;

    printf("disabling bitbang mode(channel 1)\n");

    printf("disabling bitbang mode(channel 2)\n");

  2. Ronan says:

    I just sent you (by e-mail) a Qt app for testing.

  3. Peter H. says:

    Any updates on this one?

  4. Ronan says:

    Yes, for more info, you should follow the forum thread:

Leave a Reply

Notify me of followup comments via e-mail. You can also subscribe without commenting.

Recent Comments

  • Max: A thing I wish I knew getting into Arduino-controlled servos is that the typical "180 degrees" servos DO NOT move 180 degrees for the standard...
  • Max: I have certainly noticed certain suppliers (like Adafruit, Pololu) being... "western-facing" - which is another way to say their prices definitely aren't Eastern Europe compatible,...
  • Shawn: Hello
  • jmarc78: Hello
  • JB: Hey.