FTDI: командный процессор MPSSE и режимы эмуляции шины хоста
Добавил(а) microsin
В чипах FT2232D, FT232H, FT2232H и FT4232H компании FTDI встроен процессор команд (Command Processor), который называется Multi-Protocol Synchronous Serial Engine (MPSSE). Назначение командного процессора MPSSE - эффективным образом (с аппаратной поддержкой) реализовать настраиваемый обмен с внешними устройствами с использованием синхронных протоколов (таких как JTAG или SPI). Режим эмуляции шины хоста чипов FT2232x (FT2232x MCU Host Bus Emulation mode) также использует технологию MPSSE для того, чтобы чип эмулировал стандартные шины хоста 8048/8051 MCU.
Примечание: в этой статье приведен перевод апноута AN_108 [1].
Блок процессора MPSSE управляется командой SETUP. Разные команды используются для того, чтобы выдвигать данные из чипа и вдвигать данные в чип, а также управления другими выводами I/O. Если запрещенный MPSSE удерживается в состоянии сброса, то он не будет оказывать никакого влияния на остальную часть чипа. Когда MPSSE, он принимает команды и данные из канала данных OUT, когда они записаны хостом USB в конечную точку OUT чипа. Это просто осуществляется нормальной командой WRITE, как если бы данные записывались в COM-порт. Любые прочитанные данные отправляются обратно через нормальный канал IN. Это делается нормальной командой READ, как если бы данные считывались из COM-порта.
Примечание: чтобы гарантировать, что драйвер устройства не будет выдавать IN-запросы, если буфер не может принять данные, добавьте вызов FT_SetFlowControl перед входом в MPSSE или режимы MCU Host Bus.
[Определение данных и тактов]
Функции выводов. В следующей таблице показаны используемые выводы микросхемы и их функции, разрешенные в режиме MPSSE для каждого устройства.
Таблица 2.1. Назначение выводов MPSSE.
Бит
Сигнал
FT232H
FT2232H
FT4232H
FT2232D
Тип
Описание
Channel A
Channel B
Channel A
Channel B
Channel A
Bit0
TCK/SK
ADBUS0
ADBUS0
BDBUS0
ADBUS0
BDBUS0
ADBUS0
O
Такты данных
Bit1
TDI/DO
ADBUS1
ADBUS1
BDBUS1
ADBUS1
BDBUS1
ADBUS1
O
Выход данных
Bit2
TDO/DI
ADBUS2
ADBUS2
BDBUS2
ADBUS2
BDBUS2
ADBUS2
I
Вход данных
Bit3
TMS/CS
ADBUS3
ADBUS3
BDBUS3
ADBUS3
BDBUS3
ADBUS3
O
Сигнал выборки
Bit4
GPIOL0
ADBUS4
ADBUS4
BDBUS4
ADBUS4
BDBUS4
ADBUS4
I/O
GPIO
Bit5
GPIOL1
ADBUS5
ADBUS5
BDBUS5
ADBUS5
BDBUS5
ADBUS5
I/O
GPIO
Bit6
GPIOL2
ADBUS6
ADBUS6
BDBUS6
ADBUS6
BDBUS6
ADBUS6
I/O
GPIO
Bit7
GPIOL3
ADBUS7
ADBUS7
BDBUS7
ADBUS7
BDBUS7
ADBUS7
I/O
GPIO
Bit8
GPIOH0
ACBUS0
ACBUS0
BCBUS0
-
-
ACBUS0
I/O
GPIO
Bit9
GPIOH1
ACBUS1
ACBUS1
BCBUS1
-
-
ACBUS1
I/O
GPIO
Bit10
GPIOH2
ACBUS2
ACBUS2
BCBUS2
-
-
ACBUS2
I/O
GPIO
Bit11
GPIOH3
ACBUS3
ACBUS3
BCBUS3
-
-
ACBUS3
I/O
GPIO
Bit12
GPIOH4
ACBUS4
ACBUS4
BCBUS4
-
-
-
I/O
GPIO
Bit13
GPIOH5
ACBUS5
ACBUS5
BCBUS5
-
-
-
I/O
GPIO
Bit14
GPIOH6
ACBUS6
ACBUS6
BCBUS6
-
-
-
I/O
GPIO
Bit15
GPIOH7
ACBUS7
ACBUS7
BCBUS7
-
-
-
I/O
GPIO
Работа тактирования. Вывод выхода TCK/CK дважды делает операцию XOR текущего состояния вывода CLK. Это значит, что если тактовый вывод находится в лог. 0, то такты перейдут в лог. 1 за 1 тактовый перепад. Если тактовый вывод находится в лог. 1, то переход его в лог. 0 также за 1 тактовый перепад.
Из этого следует: если такты начинают работать с состояния ожидания (idle state) в лог. 0, то данные могут выдвигаться наружу по отрицательному перепаду тактов (1 -> 0), и вдвигаться по положительному перепаду (0 -> 1). Если такты начинают работать с состояния ожидания (idle state) в лог. 1, то данные могут выдвигаться наружу по положительному перепаду тактов (0 -> 1), и вдвигаться по отрицательному перепаду (1 -> 0).
[Определения команд]
BadCommands. Если устройство определит неправильную команду (bad command), то оно отправит обратно в в компьютер PC два байта. Первый будет байтом 0xFA, за ним будет идти байт, равный значению неправильной команды.
Если команды и ответы, которые читаются/записываются вышли из правильной последовательности, то это даст Вам информацию о первом шаблоне команды, которая привела к ошибке. Ошибка может произойти до этого (например, было отправлено неправильное количество данных после команды записи) и сработает только когда перейдет в лог. 1 бит 7 неправильной команды.
Обзор команды сдвига данных. Команды сдвига данных построены из следующих определений бит:
Bit 0: отрицательный перепад CLK при записи. Bit 1: если битовый режим (bit mode), то здесь лог. 1, иначе байтовый режим (byte mode). Bit 2: отрицательный перепад CLK при чтении. Bit 3: если первым идет LSB, то здесь лог. 1, иначе идет первым MSB. Bit 4: записать TDI. Bit 5: прочитать TDO. Bit 6: записать TMS. Bit 7: 0.
Команды записи в TDI работают, когда оба бита 7 и 6 в состоянии лог. 0. Чтение TDO будет работать с выводом данных через TMS, или с выводом данных через TDI, или самостоятельно.
Первым идет MSB. Используются следующие команды, когда данные передаются старшим битом (Most Significant Bit, MSB) вперед.
Эта последовательность выдвинет байты через сигнал TDI/DO, количество выдвигаемых байт данных от 1 до 65536, в зависимости от значения длины Length. Значение длины 0x0000 выдвинет 1 байт, и значение длины 0xffff выдвинет 65536 байт. Данные будут отправляться наружу старшим битом (MSB) вперед. Бит 7 первого байта будет помещен на сигнал TDI/D0, затем будет формироваться сигнал тактов на выводе CLK. Значение уровня данных поменяется для следующего бита по фронту нарастания уровня на выводе CLK (переход лог. 0 -> лог. 1). Через ножку TDO/DI никакие данные вдвигаться не будут.
Эта последовательность выдвинет байты через сигнал TDI/DO, количество выдвигаемых байт данных от 1 до 65536, в зависимости от значения длины Length. Значение длины 0x0000 выдвинет 1 байт, и значение длины 0xffff выдвинет 65536 байт. Данные будут отправляться наружу старшим битом (MSB) вперед. Бит 7 первого байта будет помещен на сигнал TDI/D0, затем будет формироваться сигнал тактов на выводе CLK. Значение уровня данных поменяется для следующего бита по спаду уровня на выводе CLK (переход лог. 1 -> лог. 0). Через ножку TDO/DI никакие данные вдвигаться не будут.
Этот режим используется, если такты CLK начинаются с уровня лог. 1. Последовательность вывода бит:
0x12, Length, Byte1
Эта последовательность выдвинет биты через сигнал TDI/DO, количество выдвигаемых бит данных от 1 до 8, в зависимости от значения длины Length. Значение длины 0x00 выдвинет 1 бит, и значение длины 0x07 выдвинет 8 бит. Данные будут отправляться наружу старшим битом (MSB) вперед. Бит 7 байта Byte1 будет помещен на сигнал TDI/D0, затем будет формироваться сигнал тактов на выводе CLK. Значение уровня данных поменяется для следующего бита по фронту нарастания уровня на выводе CLK (переход лог. 0 -> лог. 1). Через ножку TDO/DI никакие данные вдвигаться не будут.
Этот режим используется, если такты CLK начинаются с уровня лог. 0. Последовательность вывода бит:
0x13, Length, Byte1
Эта последовательность выдвинет биты через сигнал TDI/DO, количество выдвигаемых бит данных от 1 до 8, в зависимости от значения длины Length. Значение длины 0x00 выдвинет 1 бит, и значение длины 0x07 выдвинет 8 бит. Данные будут отправляться наружу старшим битом (MSB) вперед. Бит 7 байта Byte1 будет помещен на сигнал TDI/D0, затем будет формироваться сигнал тактов на выводе CLK. Значение уровня данных поменяется для следующего бита по спаду уровня на выводе CLK (переход лог. 1 -> лог. 0). Через ножку TDO/DI никакие данные вдвигаться не будут.
Эта последовательность вдвинет байты через сигнал TDO/DI, количество вдвигаемых байт данных от 1 до 65536, в зависимости от значения длины Length. Значение длины 0x0000 вдвинет 1 байт, и значение длины 0xffff вдвинет 65536 байт. Данные вводятся снаружи старшим битом (MSB) вперед, начиная с первого байта, и так далее. Данные будут считываться по фронту нарастания уровня на выводе CLK (переход лог. 0 -> лог. 1). Через ножку TDI/DO никакие данные выдвигаться не будут.
Эта последовательность вдвинет байты через сигнал TDO/DI, количество вдвигаемых байт данных от 1 до 65536, в зависимости от значения длины Length. Значение длины 0x0000 вдвинет 1 байт, и значение длины 0xffff вдвинет 65536 байт. Данные вводятся снаружи старшим битом (MSB) вперед, начиная с первого байта, и так далее. Данные будут считываться по спаду уровня на выводе CLK (переход лог. 1 -> лог. 0). Через ножку TDI/DO никакие данные выдвигаться не будут.
Уровень TDO/DI анализируется непосредственно перед фронтом нарастания уровня тактов. Последовательность байт команды:
0x22, Length
Эта последовательность вдвинет биты через сигнал TDO/DI, количество вдвигаемых бит данных от 1 до 8, в зависимости от значения длины Length. Значение длины 0x00 вдвинет 1 бит, и значение длины 0x07 вдвинет 8 бит. Данные вводятся снаружи таким образом, что первый вводимый бит может не быть в бите 7, однако начиная с бита 6 и вниз, в зависимости от количества вводимых бит (например, длина в 1 бит получит бит данных, вводимый в бите 0 байта, отправляемого обратно в компьютер PC). Данные будут считываться по фронту нарастания уровня на выводе CLK (переход лог. 0 -> лог. 1). Через ножку TDI/DO никакие данные выдвигаться не будут.
Уровень TDO/DI анализируется непосредственно перед спадом уровня тактов. Последовательность байт команды:
0x26, Length
Эта последовательность вдвинет биты через сигнал TDO/DI, количество вдвигаемых бит данных от 1 до 8, в зависимости от значения длины Length. Значение длины 0x00 вдвинет 1 бит, и значение длины 0x07 вдвинет 8 бит. Данные вводятся снаружи таким образом, что первый вводимый бит может не быть в бите 7, однако начиная с бита 6 и вниз, в зависимости от количества вводимых бит (например, длина в 1 бит получит бит данных, вводимый в бите 0 байта, отправляемого обратно в компьютер PC). Данные будут считываться по спаду уровня на выводе CLK (переход лог. 1 -> лог. 0). Через ножку TDI/DO никакие данные выдвигаться не будут.
Следующие команды позволяют одновременно вводить и выводить данные, самым старшим битом вперед. Байт может быть от 1 до 65536, в зависимости от значения Length. Значение 0x0000 обрабатывает 1 байт, значение 0xFFFF обрабатывает 65536 байт.
Вывод данных по отрицательному перепаду тактов, ввод по положительному:
Следующие команды позволяют одновременно вводить и выводить данные, самым старшим битом вперед. Выводить можно до 8 бит максимум, в зависимости от значения Length. Значение 0 обрабатывает 1 бит, значение 7 обрабатывает 8 бит. Выводимые данные содержатся в байте Byte.
Вывод данных по отрицательному перепаду тактов, ввод по положительному:
0x33, Length, Byte
Вывод данных по положительному перепаду тактов, ввод по отрицательному:
0x36, Length, Byte
Первым идет LSB. Используются следующие команды, когда данные передаются младшим битом (Least Significant Bit, LSB) вперед.
Эта последовательность выдвинет байты через сигнал TDI/DO, количество выдвигаемых байт данных от 1 до 65536, в зависимости от значения длины Length. Значение длины 0x0000 выдвинет 1 байт, и значение длины 0xffff выдвинет 65536 байт. Данные будут отправляться наружу младшим битом (LSB) вперед. Бит 0 первого байта будет помещен на сигнал TDI/D0, затем будет формироваться сигнал тактов на выводе CLK. Значение уровня данных поменяется для следующего бита по фронту нарастания уровня на выводе CLK (переход лог. 0 -> лог. 1). Через ножку TDO/DI никакие данные вдвигаться не будут.
Эта последовательность выдвинет байты через сигнал TDI/DO, количество выдвигаемых байт данных от 1 до 65536, в зависимости от значения длины Length. Значение длины 0x0000 выдвинет 1 байт, и значение длины 0xffff выдвинет 65536 байт. Данные будут отправляться наружу младшим битом (LSB) вперед. Бит 0 первого байта будет помещен на сигнал TDI/D0, затем будет формироваться сигнал тактов на выводе CLK. Значение уровня данных поменяется для следующего бита по спаду уровня на выводе CLK (переход лог. 1 -> лог. 0). Через ножку TDO/DI никакие данные вдвигаться не будут.
Этот режим используется, если такты CLK начинаются с уровня лог. 1. Последовательность вывода бит:
0x1A, Length, Byte1
Эта последовательность выдвинет биты через сигнал TDI/DO, количество выдвигаемых бит данных от 1 до 8, в зависимости от значения длины Length. Значение длины 0x00 выдвинет 1 бит, и значение длины 0x07 выдвинет 8 бит. Данные будут отправляться наружу младшим битом (LSB) вперед. Бит 0 байта Byte1 будет помещен на сигнал TDI/D0, затем будет формироваться сигнал тактов на выводе CLK. Значение уровня данных поменяется для следующего бита по фронту нарастания уровня на выводе CLK (переход лог. 0 -> лог. 1). Через ножку TDO/DI никакие данные вдвигаться не будут.
Этот режим используется, если такты CLK начинаются с уровня лог. 0. Последовательность вывода бит:
0x1B, Length, Byte1
Эта последовательность выдвинет биты через сигнал TDI/DO, количество выдвигаемых бит данных от 1 до 8, в зависимости от значения длины Length. Значение длины 0x00 выдвинет 1 бит, и значение длины 0x07 выдвинет 8 бит. Данные будут отправляться наружу младшим битом (LSB) вперед. Бит 0 байта Byte1 будет помещен на сигнал TDI/D0, затем будет формироваться сигнал тактов на выводе CLK. Значение уровня данных поменяется для следующего бита по спаду уровня на выводе CLK (переход лог. 1 -> лог. 0). Через ножку TDO/DI никакие данные вдвигаться не будут.
Эта последовательность вдвинет байты через сигнал TDO/DI, количество вдвигаемых байт данных от 1 до 65536, в зависимости от значения длины Length. Значение длины 0x0000 вдвинет 1 байт, и значение длины 0xffff вдвинет 65536 байт. Данные вводятся снаружи младшим битом (LSB) вперед, начиная с первого байта, и так далее. Данные будут считываться по фронту нарастания уровня на выводе CLK (переход лог. 0 -> лог. 1). Через ножку TDI/DO никакие данные выдвигаться не будут.
Эта последовательность вдвинет байты через сигнал TDO/DI, количество вдвигаемых байт данных от 1 до 65536, в зависимости от значения длины Length. Значение длины 0x0000 вдвинет 1 байт, и значение длины 0xffff вдвинет 65536 байт. Данные вводятся снаружи младшим битом (LSB) вперед, начиная с первого байта, и так далее. Данные будут считываться по спаду уровня на выводе CLK (переход лог. 1 -> лог. 0). Через ножку TDI/DO никакие данные выдвигаться не будут.
Уровень TDO/DI анализируется непосредственно перед фронтом нарастания уровня тактов. Последовательность байт команды:
0x2A, Length
Эта последовательность вдвинет биты через сигнал TDO/DI, количество вдвигаемых бит данных от 1 до 8, в зависимости от значения длины Length. Значение длины 0x00 вдвинет 1 бит, и значение длины 0x07 вдвинет 8 бит. Данные вводятся снаружи таким образом, что первый вводимый бит может не быть в бите 0, однако начиная с бита 1 и вверх, в зависимости от количества вводимых бит (например, длина в 1 бит получит бит данных, вводимый в бите 7 байта, отправляемого обратно в компьютер PC). Данные будут считываться по фронту нарастания уровня на выводе CLK (переход лог. 0 -> лог. 1). Через ножку TDI/DO никакие данные выдвигаться не будут.
Уровень TDO/DI анализируется непосредственно перед спадом уровня тактов. Последовательность байт команды:
0x2E, Length
Эта последовательность вдвинет биты через сигнал TDO/DI, количество вдвигаемых бит данных от 1 до 8, в зависимости от значения длины Length. Значение длины 0x00 вдвинет 1 бит, и значение длины 0x07 вдвинет 8 бит. Данные вводятся снаружи таким образом, что первый вводимый бит может не быть в бите 0, однако начиная с бита 1 и вверх, в зависимости от количества вводимых бит (например, длина в 1 бит получит бит данных, вводимый в бите 7 байта, отправляемого обратно в компьютер PC). Данные будут считываться по спаду уровня на выводе CLK (переход лог. 1 -> лог. 0). Через ножку TDI/DO никакие данные выдвигаться не будут.
Следующие команды позволяют одновременно вводить и выводить данные, младшим битом вперед. Байт может быть от 1 до 65536, в зависимости от значения Length. Значение 0x0000 обрабатывает 1 байт, значение 0xFFFF обрабатывает 65536 байт.
Вывод данных по отрицательному перепаду тактов, ввод по положительному:
Следующие команды позволяют одновременно вводить и выводить данные, младшим битом вперед. Выводить можно до 8 бит максимум, в зависимости от значения Length. Значение 0 обрабатывает 1 бит, значение 7 обрабатывает 8 бит. Выводимые данные содержатся в байте Byte.
Вывод данных по отрицательному перепаду тактов, ввод по положительному:
0x3B, Length, Byte
Вывод данных по положительному перепаду тактов, ввод по отрицательному:
0x3E, Length, Byte
Команды TMS. Следующие команды предназначены главным образом на использование в интерфейсах JTAG, где сигнал TMS должен управляться для навигации по машине состояний JTAG.
Эта команда отправит от 6 до 0 бит на вывод TMS, используя LSB или MSB, и спад или фронт CLK, в зависимости от того, какие младшие биты установлены.
0x4A: TMS, когда первым идет LSB по фронту нарастания уровня CLK - используется, если CLK установлен в лог. 1. 0x4B: TMS, когда первым идет LSB по спаду уровня CLK - используется, если CLK установлен в лог. 0.
Бит 7 байта Byte1 передается на TDI/DO перед первым импульсом CLK у TMS, и держится статическим на длительность тактирования TMS. Операция записи не осуществляется.
Эта команда отправит от 6 до 0 бит на вывод TMS, используя LSB или MSB, и спад или фронт CLK, в зависимости от того, какие младшие биты установлены.
0x6A: TMS, когда первым идет LSB по фронту нарастания уровня CLK, чтение по фронту нарастания уровня CLK - используется, если CLK установлен в лог. 1. 0x6B: TMS, когда первым идет LSB по спаду уровня CLK, чтение по фронту нарастания уровня CLK - используется, если CLK установлен в лог. 0. 0x6E: TMS, когда первым идет LSB по фронту нарастания уровня CLK, чтение по спаду уровня - используется, если CLK установлен в лог. 1. 0x6F: TMS, когда первым идет LSB по спаду уровня CLK, чтение по спаду уровня - используется, если CLK установлен в лог. 0.
Бит 7 байта Byte1 передается на TDI/DO перед первым импульсом CLK у TMS, и держится статическим на длительность тактирования TMS. Уровень ножки TDO/DI оцифровывается во время длительности TMS, и байт, содержащий данные, передается обратно по окончанию тактирования TMS.
Установка, чтение бит данных старших и младших байт. Следующие команды используются для установки начального направления и логического состояния выводов, когда происходит первый вход в режим MPSSE. Они также используются для установки или чтения ножек GPIO. Младший байт был бы ADBUS7 .. ADBUS0, и старший байт ACBUS7 .. ACBUS0.
Настроит направление (Direction) первых 8 сигналов и установит уровень в соответствие Value у тех сигналов, которые настроены как выход. Бит 1 в байте Direction настроит соответствующий сигнал на выход.
Настроит направление (Direction) старших 8 сигналов и установит уровень в соответствие Value у тех сигналов, которые настроены как выход. Бит 1 в байте Direction настроит соответствующий сигнал на выход.
Прочитает текущее состояние старших 8 сигналов и отправит обратно 1 байт.
Команды Loopback. Если разрешена функция логического закольцовывания данных со выхода на вход (loopback), то выводы TDI/DO и TDO/DI логически замкнуты друг на друга внутри микросхемы FTDI. Это позволяет тестировать прохождение данных без необходимости подключения внешних устройств и цепей.
Эта команда установит делитель тактов (clock divisor). У тактов TCK/SK всегда скважность 50%, кроме команд, где уровень тактов устанавливается в начальное состояние. Начальное состояние устанавливается с использованием команды Set Data Bits Low Byte (0x80). Например, для настройки режима JTAG были бы выданы команды:
0x80 установка бит младшего байта 0x08 TCK/SK, TDI/D0 в лог. 0, TMS/CS в лог. 1 0x0B TCK/SK, TDI/D0, TMS/CS настроены на выход, TDO/DI и ножки GPIOL0 .. GPIOL3 как вход.
Такты начнут работу с лог. 0. Когда MPSSE отправлена команда для тактирования бит (или байт), она переводит такты в лог. 1 и затем обратно в лог. 0 на время 1 периода тактов. Для команд TMS/CS команда 0x4B использовалась бы без чтения, и команда 0x6B для TMS/CS использовалась бы с чтением. Для тактирования данных с выводом через TDI/DO без чтения TDO/DI команда 0x19 использовалась бы для байт, и 0x1B для бит. Для чтения из TDO/DI без отправляемых данных через TDI/DO использовалась бы команда 0x28 ля байт, и 0x2A для бит. Для одновременного сканирования данных в микросхему и из неё использовалась бы команда 0x39 для байт и 0x3B для бит.
Частота TCK/SK может работать в соответствии со следующей формулой:
По умолчанию после сброса, когда активирован дополнительный делитель частоты на 5, частота тактов у высокоскоростных чипов FT232H, FT2232H, FT4232H устанавливается точно так же, как у полноскоростных чипов FT2232D, см. предыдующую врезку.
0x86, 0xValueL, 0xValueH
Это сделано специально, для сохранения аппаратно-программной совместимости между чипами. Таким образом, формула для частоты останется прежней. Если же дополнительный делитель на 5 деактивирован специальной командой (см. далее команду 0x8A в разделе "Команды, относящиеся только к FT232H, FT2232H и FT4232H"), то частота тактов вырастет в 5 раз, и формула получится следующая:
В этом режиме чип FTDI эмулирует шину процессора (CPU interface) со следующими сигналами:
a) Шина с мультиплексированием 8 бит адреса и данных. b) Расширенная 8-битная шина адреса. c) Сигналы CS#, ALE, WR#, RD# и OSC. d) 2 линии I/O, которые могут использоваться для дополнительного ввода/вывода, или для ожидания прерываний (IRQ).
Эта команда заставляет контроллер MPSSE ждать, пока GPIOL1 (режим JTAG) или I/O1 (режим CPU) не перейдет в лог. 1. Как только был определен уровень лог. 1, это приведет к переходу процесса к следующей инструкции. Если линия I/O не переходит в лог. 1, то единственный способ выйти из состояния ожидания - запрет контроллера.
Эта команда заставляет контроллер MPSSE ждать, пока GPIOL1 (режим JTAG) или I/O1 (режим CPU) не перейдет в лог. 0. Как только был определен уровень лог. 0, это приведет к переходу процесса к следующей инструкции. Если линия I/O не переходит в лог. 0, то единственный способ выйти из состояния ожидания - запрет контроллера.
[Команды, относящиеся только к FT232H, FT2232H и FT4232H]
Команды в таблице ниже применимы только к микросхемам FT232H, FT2232H и FT4232H.
opcode
Функция
0x8A
Запрещает дополнительный делитель на 5, чтобы можно было использовать 60 МГц в качестве опорной тактовой частоты.
0x8B
Разрешат дополнительный делитель на 5 для достижения обратной совместимости с FT2232D.
0x8C
Разрешает трехфазное тактирование данных. Используется интерфейсами I2C/TWI, чтобы можно было считывать данные по обоим перепадам тактов.
0x8D
Запрещает трехфазное тактирование данных.
0x8E
Позволяет генерировать такты без передачи данных. Обычно используется для управления машиной состояний JTAG. Количество тактов учитывается по количеству бит.
0x8F
Позволяет генерировать такты без передачи данных. Обычно используется для управления машиной состояний JTAG. Количество тактов учитывается по количеству байт.
0x94
Позволяет генерировать такты без передачи данных, пока это не остановит лог. 1 на входе GPIOL1.
0x95
Позволяет генерировать такты без передачи данных, пока это не остановит лог. 0 на входе GPIOL1.
0x96
Разрешает адаптивное тактирование.
0x97
Запрещает адаптивное тактирование.
0x9C
Позволяет генерировать такты без передачи данных, пока это не остановит лог. 1 на входе GPIOL1, или пока не будет отправлено определенное количество импульсов тактов. Количество тактов учитывается по количеству байт.
0x9D
Позволяет генерировать такты без передачи данных, пока это не остановит лог. 0 на входе GPIOL1, или пока не будет отправлено определенное количество импульсов тактов. Количество тактов учитывается по количеству байт.
Команда дает сдвиг данных на 3 стадиях, что используется для поддержи таких интерфейсов, как I2C которым нужны достоверные данные на обоих перепадах тактов clk. Это выглядит следующим образом:
Установка данных за 1/2 периода тактов -> импульс тактов на 1/2 периода тактов -> удержание уровня данных на 1/2 периода тактов.
Команда сгенерирует от 1 до 8 импульсов тактов. Значение Length равное 0x00 приведет к формированию 1 периода тактов, и значение 0x07 приведет к формированию 8 периодов тактов.
Команда сгенерирует от 8 до 0x80000 импульсов тактов, количество определяется значением Length. Значение Length 0x0000 приведет к формированию 8 периодов тактов, и Length 0xFFFF приведет к формированию 524288 периодов тактов.
Эта команда приведет к тому, что контроллер будет формировать импульсы тактов до тех пор, пока GPIOL1 или I/O1 (CPU mode микросхемы FT2232H) находится в состоянии лог. 0. Как только был определен уровень лог. 1, это приведет к переходу процесса к следующей инструкции. Если уровень I/O никогда не становится равным лог. 1, то единственный способ выйти из этого состояния - запрет контроллера.
Эта команда приведет к тому, что контроллер будет формировать импульсы тактов до тех пор, пока GPIOL1 или I/O1 (CPU mode микросхемы FT2232H) находится в состоянии лог. 1. Как только был определен уровень лог. 0, это приведет к переходу процесса к следующей инструкции. Если уровень I/O никогда не становится равным лог. 0, то единственный способ выйти из этого состояния - запрет контроллера.
Адаптивное тактирование требуется для интерфейса JTAG процессора ARM.
Команда приведет к тому, что контроллер ждет сигнала RTCK от процессора ARM который должен поступать на ножку GPIOL3 (находящемуся в режиме входа). После того, как уровень на выходе тактов TCK поменялся, контроллер ждет, пока RTCK не получит такой же уровень перед тем, как снова поменять уровень TCK. Такое поведение можно рассматривать как подтверждение, что был принят сигнал тактов необходимой частоты.
Команда приведет к выдаче от 8 до $80000 импульсов тактов, в зависимости от значения Length. Значение Length 0x0000 приведет к формированию 8 тактов, и Length 0xFFFF приведет к формированию 524288 тактов, или пока GPIOL1 не перейдет в лог. 1.
Команда приведет к выдаче от 8 до $80000 импульсов тактов, в зависимости от значения Length. Значение Length 0x0000 приведет к формированию 8 тактов, и Length 0xFFFF приведет к формированию 524288 тактов, или пока GPIOL1 не перейдет в лог. 0.
[Команда только для FT232H]
Установка работы выходов I/O только при лог. 0, с переходом в отключенное состояние при лог. 1:
Команда приведет к тому, что выходы буферов I/O будут активны только когда данные находятся в лог. 0, и будут в третьем состоянии, когда данные станут лог. 1, и установлен соответствующий бит. Этот op-code используется, когда MPSSE конфигурируется для I2C.