libftdi-bitbang/

Ранее в этом блоге многократно упоминались чипы производства компании FTDI, такие, как FT232RL и FT2232HL — смотри заметки раз , два и далее по ссылкам. В частности, было сказано, что этими чипами можно управлять с компьютера, что позволяет использовать их, например, в качестве программатора. При этом чипы FTDI поддерживают несколько режимов работы. Далее будет рассмотрен, пожалуй, самый простой режим под названием bitbang.

Подозреваю, что для многих читателей сего блога наличие режима bitbang в чипах FTDI не является большой новостью. Но мне подумалось, что для кого-то приведенная информация все же может быть интересной.

Не будем тянуть кота за хвост, и сразу перейдем к коду:

/* vim: set ai et ts=4 sw=4: */

#include <stdio.h>
#include <stdint.h>
#include <ftdi.h>

// see /usr/include/ftdi.h

#define VENDOR_ID   0x0403
#define PRODUCT_ID  0x6001

#define PIN_TX      0x01
#define PIN_RX      0x02
#define PIN_RTS     0x04
#define PIN_CTS     0x08
#define PIN_DTR     0x10
#define PIN_DSR     0x20
#define PIN_DCD     0x40
#define PIN_RI      0x80

int main ( ) {
uint8_t ctr = 0 ;
struct ftdi_context ftdi ;
ftdi_init ( & ftdi ) ;

if ( ftdi_usb_open ( & ftdi , VENDOR_ID , PRODUCT_ID ) < 0 ) {
printf ( «Can’t open device n » ) ;
return 1 ;
}

ftdi_set_bitmode ( & ftdi , 0xFF , BITMODE_BITBANG ) ;

for ( ;; ) {
uint8_t data = 0 ;
ctr ++;
if ( ctr & ( 1 << 0 ) ) {
data |= PIN_TX ;
}

if ( ctr & ( 1 << 1 ) ) {
data |= PIN_RX ;
}
ftdi_write_data ( & ftdi , & data , 1 ) ;
sleep ( 1 ) ;
}

ftdi_disable_bitbang ( & ftdi ) ;
ftdi_usb_close ( & ftdi ) ;
}

Компилируется программа так:

gcc -lftdi bitbang-ft232rl.c -o bitbang-ft232rl

Как видите, здесь используется библиотека libftdi, при помощи которой мы и отдаем команды чипу. Интерфейс библиотеки незамысловат, поэтому я не буду подробно на нем останавливаться.

В режиме bitbang мы можем управлять восемью пинами чипа, подавая на них либо высокое, либо низкое напряжение. В приведенном примере меняется напряжения на пинах 13 (ADBUS0) и 14 (ADBUS1). На USB-донглах они обычно подписаны, как TX и RX соответственно. Существенное ограничение режима bitbang заключается в том, что мы можем только передавать данные, но не принимать. Однако и этого может быть достаточно для многих практических задач. К примеру, можно вывести что-то на HD44780-совместимый ЖК-индикатор , а воспользовавшись сдвиговыми регистрами и декодерами можно управлять светодиодными матрицами .

Удобство по сравнению с использованием МК заключается в том, что не нужно писать код, отвечающий за передачу данных с компьютера и их декодирование на стороне МК. А раз кода меньше, то меньше и багов. Плюс к этому, если мы хотим обновить приложение, обновление требуется установить только на компьютере. На железной стороне никакой прошивки нет, а значит нечего обновлять.

Из прочих режимов работы чипов FTDI особый интерес представляет режим MPSSE. С его помощью можно реализовывать последовательные интерфейсы, такие, как SPI или I2C, и передавать по ним данные со скоростями до 30 мбит/сек. Однако этот режим реализован не во всех чипах FTDI. В частности, FT232RL его не поддерживает. Увы, рассмотрение этого режима выходит за рамки данного поста.

EnglishRussianUkrainian