Микросхемы FT232R и FT245R, кроме обычной работы в качестве виртуального последовательного порта USB (USB virtual COM-port), могут также работать и в специальном режиме BitBang. Этот режим позволяет управлять ножками микросхем через USB, и предназначен для создания FPGA-программаторов (а также и других программаторов, например микроконтроллеров AVR). Здесь и далее приведен перевод апноута FTDI (Application Note AN_232R-01). Этот документ описывает 3 режима Bit Bang, которые доступны для микросхем FT232R и FT245R, а также дает примеры, как использовать эти 3 режима. Микросхема FT245R обладает урезанными возможностями для режимов Bit Bang по сравнению с микросхемой FT232R.
[1. Введение]
Режим Bit Bang является специальным режимом для микросхем FT232R и FT245R, который превращает 8 линий ввода/вывода (IO lines) в 8-битную двунаправленную шину данных. Поэтому этой шиной данных можно произвольно управлять с компьютера и читать с этих выводов данные. Этот режим поддерживается драйвером D2XX [3] и библиотекой функций FTD2XX.DLL. Примеры программ [4] доступны для многих популярных языков программирования (C++ Builder, C#, Delphi, LabVIEW, Visual Basic, Visual C++ и других).
Имеется 3 типа режима Bit Bang для FT232R:
- Режим асинхронного Bit Bang (Asynchronous Bit Bang Mode), который аналогичен режиму Bit Bang для микросхем FTDI серий BM и C (например FT232BM, FT245BM), с добавлением стробов чтения и записи (Read, Write strobes) в случае FT232R. - Режим синхронного Bit Bang (Synchronous Bit Bang Mode), где данные читаются из устройства только тогда, когда данные в него записываются. Этот режим аналогичен режиму Synchronous Bit Bang микросхем FT2232 [2]. - Режим CBUS Bit Bang, новая 4-битная версия режима Bit Bang, доступная на ножках CBUS микросхемы FT232R.
Режимы Asynchronous и Synchronous Bit Bang разрешаются командами драйвера, в то время как режим CBUS Bit Bang должен быть предварительно настроен через EEPROM устройства, и затем разрешен командой драйвера. Для FT232R память EEPROM встроена в саму микросхему FT232R. Для FT245R память EEPROM отсутствует, поэтому некоторые возможности и режимы для FT245R недоступны.
[2. Режим Asynchronous Bit Bang]
Асинхронный режим Bang (Asynchronous Bit Bang mode) работает точно так же, как соответствующий режим Bit Bang микросхем FTDI серии BM. Любые данные, записываемые в устройство обычным образом, будут самостоятельно выводиться на ножки данных микросхемы, которые сконфигурированы как выходы. Каждая ножка может быть независимо от других настроена как вход или как выход. Скорость выдачи данных на выход определяется генератором скорости (Baud rate generator). Чтобы данные (на выходе) изменились, должны быть записаны новые данные и должен произойти тик генератора скорости. Если в устройство не записываются новые данные, то ножки микросхемы останутся в последнем записанном в них состоянии.
Когда разрешен режим Asynchronous Bit Bang, ножки IO конфигурируются следующим образом:
Номер ножки FT232RL/FT245RL |
Номер ножки FT232RQ/FT245RQ |
Сигнал |
Тип |
Описание |
1 |
30 |
D0 |
Input/Output |
Бит 0 шины данных Bit Bang |
5 |
2 |
D1 |
Input/Output |
Бит 1 шины данных Bit Bang |
3 |
32 |
D2 |
Input/Output |
Бит 2 шины данных Bit Bang |
11 |
8 |
D3 |
Input/Output |
Бит 3 шины данных Bit Bang |
2 |
31 |
D4 |
Input/Output |
Бит 4 шины данных Bit Bang |
9 |
6 |
D5 |
Input/Output |
Бит 5 шины данных Bit Bang |
10 |
7 |
D6 |
Input/Output |
Бит 6 шины данных Bit Bang |
6 |
3 |
D7 |
Input/Output |
Бит 7 шины данных Bit Bang |
Таблица 2.1. Конфигурации IO режима Asynchronous Bit Bang.
Рис. 2.1. Ножки D7..D7 на плате FT232R-Breakout [1].
В случае микросхемы FT232R любая из ножек CBUS0, CBUS1, CBUS2 или CBUS3 может быть сконфигурирована для вывода внутренних стробов RD# или WR#, когда FT232R находится в режиме Asynchronous Bit Bang. Это работает так же, как и в расширенном режиме асинхронного Bit Bang (Enhanced Asynchronous Bit Bang) микросхем FT2232 [2]. Альтернативно выводы CBUS могут использоваться для предоставления тактовых сигналов путем соответствующей настройки значений в EEPROM. Ножки CBUS должны быть сконфигурированы в FT232R EEPROM. Эта возможность недоступна для FT245R.
Номер ножки FT232RL/FT245RL |
Номер ножки FT232RQ/FT245RQ |
Сигнал |
Тип |
Описание |
23 |
22 |
C0 |
Input/Output |
Конфигурируемая функция |
22 |
21 |
C1 |
13 |
10 |
C2 |
14 |
11 |
C3 |
12 |
9 |
C4 |
Таблица 2.2. Настройки ножек CBUS.
Рис. 2.2. Ножки CBUS (C0..C3) платы FT232R-Breakout [1].
Нужно выполнить несколько команд драйвера D2XX [3], чтобы можно было использовать режим Asynchronous Bit Bang. Эти команды перечислены в таблице:
Функция D2XX |
Описание |
FT_SetBitMode |
Режим асинхронного Bit Bang разрешается для работы с использованием команды FT_SetBitMode. Значение параметра 0x01 разрешает режим, и значение 0x00 сбрасывает режим устройства (см. примечание). |
FT_SetBaudRate |
Скорость передачи данных может управляться с использованием команды FT_SetBaudRate. Максимум для Baud rate составляет 3 мегабода, однако с учетом времени установки данных и времени удержания возле строба WR# значение Baud rate должно быть меньше 1 мегабода. Действительная тактовая частота в 16 раз превышает значение Baud rate. Так что, к примеру, значение 9600 Baud будет передавать данные со скоростью 9600*16 = 153600 байт в секунду, или 1 байт каждые 6.5 мкс. |
FT_Write |
Данные могут быть записаны в устройство в режиме Asynchronous Bit Bang с использованием команды FT_Write. Если записывается несколько байт в устройство, то значения на ножках микросхемы будут меняться со скоростью, заданной командой FT_SetBaudRate. |
FT_GetBitMode |
Команда FT_GetBitMode возвращает действительное текущее состояние выводов микросхемы. В одном байте будет возвращено текущее состояние ножек, не зависимо от того, настроены они или как входы, или как выходы. |
FT_Read |
Команда FT_Read возвратит буфер значений, которые прочитаны из ножек со скоростью, которая была установлена через FT_SetBaudRate. Если буферы чтения переполнены, то данные будут потеряны. Каждый возвращенный байт содержит значения ножек независимо от того, как они были настроены - как входы или как выходы. |
Таблица 2.3. Команды D2XX
Примечание к таблице 2.3: команда FT_SetBitMode может использоваться только один раз для установки какого-либо одного режима.
Полное описание этих функций можно найти в руководстве программиста D2XX [3]. Примеры кода на многих языках программирования можно найти по ссылке [4].
[3. Режим Synchronous Bit Bang]
Синхронный режим Bit Bang (Synchronous Bit Bang mode) аналогичен соответствующему режиму Synchronous Bit Bang микросхемы FT2232 [2]. В режиме синхронного Bit Bang данные выдаются наружу только если в устройстве есть место для данных, которые будут прочитаны из ножек. В этом синхронном режиме сначала будут прочитаны ножки шины данных, перед тем как будет отправлен наружу байт при передаче. Поэтому для вывода 1 байта на выход и чтения входов для байта, который был только что послан, нужно послать также другой байт. Пример:
- Сначала выводы находятся в состоянии 0xFF. - Отправляется 0x55, затем 0xAA. - Выводы перейдут в состояние 0x55 и затем в состояние 0xAA. - Чтение данных вернет 0xFF, 0x55.
- Сначала выводы находятся в состоянии 0xFF. - Отправляется 0x55, затем 0xAA, и затем 0xAA (0xAA посылается дважды). - Выводы перейдут в состояние 0x55 и затем в состояние 0xAA. - Чтение данных вернет 0xFF, 0x55, 0xAA.
Интервалы времени для режима Synchronous Bit Bang показаны на рисунке и пояснены в таблице:
Рис. 3.1. Временные диаграммы Synchronous Bit Bang
Время |
Описание |
t1 |
Читается текущее состояние ножки. |
t2 |
Сигнал RD# переходит в неактивное состояние. |
t3 |
Сигнал RD# снова входит в активное состояние, и выходы всех ножек переходят в состояние, соответствующее новым данным. |
t4 |
Состояние тактов для установки данных. |
t5 |
Сигнал WR# становится активным. |
t6 |
Сигнал WR# становится неактивным. |
Таблица 3.1. Временные диаграммы Synchronous Bit Bang
Для того, чтобы данные были изменены, нужно записать новые данные и должен произойти тик генератора скорости. Если в устройство не записываются новые данные, то ножки микросхемы останутся в последнем записанном в них состоянии.
Когда разрешен режим Synchronous Bit Bang, ножки IO конфигурируются следующим образом:
Номер ножки FT232RL/FT245RL |
Номер ножки FT232RQ/FT245RQ |
Сигнал |
Тип |
Описание |
1 |
30 |
D0 |
Input/Output |
Бит 0 шины данных Bit Bang |
5 |
2 |
D1 |
Input/Output |
Бит 1 шины данных Bit Bang |
3 |
32 |
D2 |
Input/Output |
Бит 2 шины данных Bit Bang |
11 |
8 |
D3 |
Input/Output |
Бит 3 шины данных Bit Bang |
2 |
31 |
D4 |
Input/Output |
Бит 4 шины данных Bit Bang |
9 |
6 |
D5 |
Input/Output |
Бит 5 шины данных Bit Bang |
10 |
7 |
D6 |
Input/Output |
Бит 6 шины данных Bit Bang |
6 |
3 |
D7 |
Input/Output |
Бит 7 шины данных Bit Bang |
Таблица 3.2. Конфигурации IO режима Synchronous Bit Bang
Как Вы можете заметить, таблица 3.2 полностью совпадает с таблицей 2.1 (режима Asynchronous Bit Bang).
Рис. 3.2. Ножки D7..D7 на плате FT232R-Breakout [1].
Точно так же, как и в асинхронном режиме, в случае микросхемы FT232R, работающей в синхронном режиме, любая из ножек CBUS0, CBUS1, CBUS2 или CBUS3 может быть сконфигурирована для вывода внутренних стробов RD# или WR#. Это работает так же, как и в расширенном режиме синхронного Bit Bang (Enhanced Synchronous Bit Bang) микросхем FT2232. Альтернативно выводы CBUS могут использоваться для предоставления тактовых сигналов путем соответствующей настройки значений в EEPROM. Ножки CBUS должны быть сконфигурированы в FT232R EEPROM. Эта возможность недоступна для FT245R.
Номер ножки FT232RL/FT245RL |
Номер ножки FT232RQ/FT245RQ |
Сигнал |
Тип |
Описание |
23 |
22 |
C0 |
Input/Output |
Конфигурируемая функция |
22 |
21 |
C1 |
13 |
10 |
C2 |
14 |
11 |
C3 |
12 |
9 |
C4 |
Таблица 3.3. Настройки ножек CBUS.
Как Вы можете заметить, таблица 3.3 полностью совпадает с таблицей 2.2 (режима Asynchronous Bit Bang).
[Настройки ножек CBUS платы FT232R-Breakout [1]]
Нужно выполнить несколько команд драйвера D2XX [3], чтобы можно было использовать режим Asynchronous Bit Bang. Эти команды перечислены в таблице:
Функция D2XX |
Описание |
FT_SetBitMode |
Режим синхронного Bit Bang разрешается для работы с использованием команды FT_SetBitMode. Значение параметра 0x04 разрешает режим, и значение 0x00 сбрасывает режим устройства (см. примечание к таблице 2.3). |
FT_SetBaudRate |
Скорость передачи данных может управляться с использованием команды FT_SetBaudRate. Максимум для Baud rate составляет 3 мегабода, однако с учетом времени установки данных и времени удержания возле строба WR# значение Baud rate должно быть меньше 1 мегабода. Действительная тактовая частота в 16 раз превышает значение Baud rate. Так что, к примеру, значение 9600 Baud будет передавать данные со скоростью 9600*16 = 153600 байт в секунду, или 1 байт каждые 6.5 мкс. |
FT_Write |
Данные могут быть записаны в устройство в режиме Synchronous Bit Bang с использованием команды FT_Write. Если записывается несколько байт в устройство, то значения на ножках микросхемы будут меняться со скоростью, заданной командой FT_SetBaudRate. |
FT_GetBitMode |
Команда FT_GetBitMode возвращает действительное текущее состояние выводов микросхемы. В одном байте будет возвращено текущее состояние ножек, не зависимо от того, настроены они или как входы, или как выходы. |
FT_Read |
Команда FT_Read возвратит буфер значений, которые прочитаны из ножек со скоростью, которая была установлена через FT_SetBaudRate. Если буферы чтения переполнены, то данные будут потеряны. Каждый возвращенный байт содержит значения ножек независимо от того, как они были настроены - как входы или как выходы. |
Таблица 3.4. Команды D2XX
Можно заметить, что команды синхронного режима почти полностью повторяют команды асинхронного режима (таблица 2.3). Отличие только в значении, передаваемой командой установки режима FT_SetBitMode. Полное описание этих функций можно найти в руководстве программиста D2XX [3]. Примеры кода на многих языках программирования можно найти по ссылке [4].
[4. Режим CBUS Bit Bang]
Микросхема FT232R поддерживает новый тип режима Bit Bang для ножек CBUS. Чтобы режим CBUS Bit Bang мог начать работу, он должен быть предварительно сконфигурирован в FT232R EEPROM, и затем разрешен командой FT_SetBitMode. Режим CBUS Bit Bang недоступен для FT245R.
Когда разрешен режим CBUS Bit Bang, ножки CBUS микросхемы FT232R конфигурируются следующим образом:
Номер ножки FT232RL/FT245RL |
Номер ножки FT232RQ/FT245RQ |
Сигнал |
Тип |
Описание |
23 |
22 |
C0 |
Input/Output |
Конфигурируемая функция бита 0 |
22 |
21 |
C1 |
Конфигурируемая функция бита 1 |
13 |
10 |
C2 |
Конфигурируемая функция бита 2 |
14 |
11 |
C3 |
Конфигурируемая функция бита 3 |
12 |
9 |
C4 |
Конфигурируемая функция бита 4 |
Таблица 4.1. Настройки выводов режима CBUS Bit Bang.
Рис. 4.1. Ножки CBUS (C0..C3) платы FT232R-Breakout [1].
Для обмена данными в режиме CBUS Bit Bang требуются D2XX-команды FT_SetBitMode и FT_GetBitMode. Поскольку эти функции позволяют передать или принять только 1 байт, то эта версия Bit Bang намного медленнее, чем асинхронные и синхронные типы Bit Bang, когда используется для передачи больших буферов данных командами FT_Write и FT_Read. Однако режим CBUS Bit Bang предоставляет 4 дополнительные линии IO для FT232R. Скорость обмена данными ограничена скоростью выдачи фреймов USB (обычно 1000 раз в секунду).
Команды D2XX, которые нужны для использования режима CBUS Bit Bang, перечислены в таблице:
Функция D2XX |
Описание |
FT_SetBitMode |
Режим асинхронного Bit Bang разрешается для работы с использованием команды FT_SetBitMode. Значение параметра 0x01 разрешает режим, и значение 0x00 сбрасывает режим устройства (см. примечание к таблице 2.3). |
FT_GetBitMode |
Команда FT_GetBitMode возвращает действительное текущее состояние выводов микросхемы. В одном байте будет возвращено текущее состояние ножек, не зависимо от того, настроены они или как входы, или как выходы. |
Таблица 4.2. Команды D2XX
Примеры использования:
- Настройка всех ножек как выходов с битом 0 в состоянии лог. 1: FT_SetBitMode(Handle, 0xF1, 0x20). - Настройка битов 0 и 1 как входов, битов 2 и 3 как выходов, и установить биты 2 и 3 в состояние лог. 1: FT_SetBitMode(Handle, 0xCC, 0x20). - Чтение ножек: FT_GetBitMode(Handle, Data), где младший ниббл получается путем операции (Data AND 0x0F).
Полное описание этих функций можно найти в руководстве программиста D2XX [3]. Примеры кода на многих языках программирования можно найти по ссылке [4].
[Ссылки]
1. Плата FT232R-Breakout. 2. FT2232H Board - макетная плата на высокоскоростном чипе моста USB фирмы FTDI. 3. 130329FT232-doc.ZIP - драйверы VCP, D2XX компании FTDI, руководство D2XX Programmer's Guide и другая документация. 4. Примеры кода программирования режимов Bit Bang. 5. Доступ к устройствам FTDI из C#. |