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.
Работа тактирования. Вывод выхода 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 при записи. Команды записи в TDI работают, когда оба бита 7 и 6 в состоянии лог. 0. Чтение TDO будет работать с выводом данных через TMS, или с выводом данных через TDI, или самостоятельно. Первым идет MSB. Используются следующие команды, когда данные передаются старшим битом (Most Significant Bit, MSB) вперед.
Этот режим используется, если такты CLK начинаются с уровня лог. 1. Последовательность вывода байт: 0x10, LengthL, LengthH, Byte1, .., Byte65536 (max) Эта последовательность выдвинет байты через сигнал TDI/DO, количество выдвигаемых байт данных от 1 до 65536, в зависимости от значения длины Length. Значение длины 0x0000 выдвинет 1 байт, и значение длины 0xffff выдвинет 65536 байт. Данные будут отправляться наружу старшим битом (MSB) вперед. Бит 7 первого байта будет помещен на сигнал TDI/D0, затем будет формироваться сигнал тактов на выводе CLK. Значение уровня данных поменяется для следующего бита по фронту нарастания уровня на выводе CLK (переход лог. 0 -> лог. 1). Через ножку TDO/DI никакие данные вдвигаться не будут. Этот режим используется, если такты CLK начинаются с уровня лог. 0. Последовательность вывода байт: 0x11, LengthL, LengthH, Byte1, .., Byte65536 (max) Эта последовательность выдвинет байты через сигнал 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 никакие данные вдвигаться не будут. Последовательность байт команды: 0x20, LengthL, LengthH Эта последовательность вдвинет байты через сигнал TDO/DI, количество вдвигаемых байт данных от 1 до 65536, в зависимости от значения длины Length. Значение длины 0x0000 вдвинет 1 байт, и значение длины 0xffff вдвинет 65536 байт. Данные вводятся снаружи старшим битом (MSB) вперед, начиная с первого байта, и так далее. Данные будут считываться по фронту нарастания уровня на выводе CLK (переход лог. 0 -> лог. 1). Через ножку TDI/DO никакие данные выдвигаться не будут. Последовательность байт команды: 0x24, LengthL, LengthH Эта последовательность вдвинет байты через сигнал 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 байт. Вывод данных по отрицательному перепаду тактов, ввод по положительному: 0x31, LengthL, LengthH, Byte1, .., Byte65536 (max) Вывод данных по положительному перепаду тактов, ввод по отрицательному: 0x34, LengthL, LengthH, Byte1, .., Byte65536 (max) Следующие команды позволяют одновременно вводить и выводить данные, самым старшим битом вперед. Выводить можно до 8 бит максимум, в зависимости от значения Length. Значение 0 обрабатывает 1 бит, значение 7 обрабатывает 8 бит. Выводимые данные содержатся в байте Byte. Вывод данных по отрицательному перепаду тактов, ввод по положительному: 0x33, Length, Byte Вывод данных по положительному перепаду тактов, ввод по отрицательному: 0x36, Length, Byte Первым идет LSB. Используются следующие команды, когда данные передаются младшим битом (Least Significant Bit, LSB) вперед.
Этот режим используется, если такты CLK начинаются с уровня лог. 1. Последовательность вывода байт: 0x18, LengthL, LengthH, Byte1, .., Byte65536 (max) Эта последовательность выдвинет байты через сигнал TDI/DO, количество выдвигаемых байт данных от 1 до 65536, в зависимости от значения длины Length. Значение длины 0x0000 выдвинет 1 байт, и значение длины 0xffff выдвинет 65536 байт. Данные будут отправляться наружу младшим битом (LSB) вперед. Бит 0 первого байта будет помещен на сигнал TDI/D0, затем будет формироваться сигнал тактов на выводе CLK. Значение уровня данных поменяется для следующего бита по фронту нарастания уровня на выводе CLK (переход лог. 0 -> лог. 1). Через ножку TDO/DI никакие данные вдвигаться не будут. Этот режим используется, если такты CLK начинаются с уровня лог. 0. Последовательность вывода байт: 0x19, LengthL, LengthH, Byte1, .., Byte65536 (max) Эта последовательность выдвинет байты через сигнал 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 никакие данные вдвигаться не будут. Последовательность байт команды: 0x28, LengthL, LengthH Эта последовательность вдвинет байты через сигнал TDO/DI, количество вдвигаемых байт данных от 1 до 65536, в зависимости от значения длины Length. Значение длины 0x0000 вдвинет 1 байт, и значение длины 0xffff вдвинет 65536 байт. Данные вводятся снаружи младшим битом (LSB) вперед, начиная с первого байта, и так далее. Данные будут считываться по фронту нарастания уровня на выводе CLK (переход лог. 0 -> лог. 1). Через ножку TDI/DO никакие данные выдвигаться не будут. Последовательность байт команды: 0x2C, LengthL, LengthH Эта последовательность вдвинет байты через сигнал 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 байт. Вывод данных по отрицательному перепаду тактов, ввод по положительному: 0x39, LengthL, LengthH, Byte1, .., Byte65536 (max) Вывод данных по положительному перепаду тактов, ввод по отрицательному: 0x3С, LengthL, LengthH, Byte1, .., Byte65536 (max) Следующие команды позволяют одновременно вводить и выводить данные, младшим битом вперед. Выводить можно до 8 бит максимум, в зависимости от значения Length. Значение 0 обрабатывает 1 бит, значение 7 обрабатывает 8 бит. Выводимые данные содержатся в байте Byte. Вывод данных по отрицательному перепаду тактов, ввод по положительному: 0x3B, Length, Byte Вывод данных по положительному перепаду тактов, ввод по отрицательному: 0x3E, Length, Byte Команды TMS. Следующие команды предназначены главным образом на использование в интерфейсах JTAG, где сигнал TMS должен управляться для навигации по машине состояний JTAG.
0x4A или 0x4B, Length, Byte1 Эта команда отправит от 6 до 0 бит на вывод TMS, используя LSB или MSB, и спад или фронт CLK, в зависимости от того, какие младшие биты установлены. 0x4A: TMS, когда первым идет LSB по фронту нарастания уровня CLK - используется, если CLK установлен в лог. 1. Бит 7 байта Byte1 передается на TDI/DO перед первым импульсом CLK у TMS, и держится статическим на длительность тактирования TMS. Операция записи не осуществляется. 0x6A или 0x6B или 0x6E или 0x6F, Length, Byte1 Эта команда отправит от 6 до 0 бит на вывод TMS, используя LSB или MSB, и спад или фронт CLK, в зависимости от того, какие младшие биты установлены. 0x6A: TMS, когда первым идет LSB по фронту нарастания уровня CLK, чтение по фронту нарастания уровня CLK - используется, если CLK установлен в лог. 1. Бит 7 байта Byte1 передается на TDI/DO перед первым импульсом CLK у TMS, и держится статическим на длительность тактирования TMS. Уровень ножки TDO/DI оцифровывается во время длительности TMS, и байт, содержащий данные, передается обратно по окончанию тактирования TMS. Установка, чтение бит данных старших и младших байт. Следующие команды используются для установки начального направления и логического состояния выводов, когда происходит первый вход в режим MPSSE. Они также используются для установки или чтения ножек GPIO. Младший байт был бы ADBUS7 .. ADBUS0, и старший байт ACBUS7 .. ACBUS0.
0x80, 0xValue, 0xDirection Настроит направление (Direction) первых 8 сигналов и установит уровень в соответствие Value у тех сигналов, которые настроены как выход. Бит 1 в байте Direction настроит соответствующий сигнал на выход. 0x82, 0xValue, 0xDirection Настроит направление (Direction) старших 8 сигналов и установит уровень в соответствие Value у тех сигналов, которые настроены как выход. Бит 1 в байте Direction настроит соответствующий сигнал на выход. 0x81 Прочитает текущее состояние первых 8 сигналов и отправит обратно 1 байт. 0x83 Прочитает текущее состояние старших 8 сигналов и отправит обратно 1 байт. Команды Loopback. Если разрешена функция логического закольцовывания данных со выхода на вход (loopback), то выводы TDI/DO и TDO/DI логически замкнуты друг на друга внутри микросхемы FTDI. Это позволяет тестировать прохождение данных без необходимости подключения внешних устройств и цепей.
0x84 Команда соединит выход TDI/DO со входом TDO/DI для тестирования петли прямого замыкания данных loopback. 0x85 Команда разъединит выход TDI/DO со входом TDO/DI для тестирования петли прямого замыкания данных loopback. Clock Divisor. В следующих врезках описано, как установить скорость, на которой данные вдвигаются в микросхему FTDI и выдвигаются из неё. 0x86, 0xValueL, 0xValueH Эта команда установит делитель тактов (clock divisor). У тактов TCK/SK всегда скважность 50%, кроме команд, где уровень тактов устанавливается в начальное состояние. Начальное состояние устанавливается с использованием команды Set Data Bits Low Byte (0x80). Например, для настройки режима JTAG были бы выданы команды: 0x80 установка бит младшего байта Такты начнут работу с лог. 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 может работать в соответствии со следующей формулой: Частота TCK/SK = 12 МГц / (( 1 +[(0xValueH * 256) OR 0xValueL] ) * 2) Для примера: Значение TCK/SK Max По умолчанию после сброса, когда активирован дополнительный делитель частоты на 5, частота тактов у высокоскоростных чипов FT232H, FT2232H, FT4232H устанавливается точно так же, как у полноскоростных чипов FT2232D, см. предыдующую врезку. 0x86, 0xValueL, 0xValueH Это сделано специально, для сохранения аппаратно-программной совместимости между чипами. Таким образом, формула для частоты останется прежней. Если же дополнительный делитель на 5 деактивирован специальной командой (см. далее команду 0x8A в разделе "Команды, относящиеся только к FT232H, FT2232H и FT4232H"), то частота тактов вырастет в 5 раз, и формула получится следующая: Частота TCK/SK = 60 МГц / (( 1 +[(0xValueH * 256) OR 0xValueL] ) * 2) Примеры значений и соответствующих частот TCK/SK для отключенного дополнительного делителя. Значение TCK/SK Max [Инструкции для режима CPU] В этом режиме чип FTDI эмулирует шину процессора (CPU interface) со следующими сигналами: a) Шина с мультиплексированием 8 бит адреса и данных.
0x90, 0xAddrLow Эта команда прочитает 1 байт из целевого устройства. 0x91, 0xAddrHigh, 0xAddrLow Эта команда прочитает 1 байт из целевого устройства. 0x92, 0xAddrLow, 0xData Эта команда запишет 1 байт Data в целевое устройство. 0x93, 0xAddrHigh, 0xAddrLow, 0xData Эта команда запишет 1 байт Data в целевое устройство. [Инструкции для одновременного использования MPSSE и режимов эмуляции хоста MCU] 0x87 Эта команда выполнит сброс буфера микросхемы с передачей его содержимого в компьютер PC. 0x88 Эта команда заставляет контроллер MPSSE ждать, пока GPIOL1 (режим JTAG) или I/O1 (режим CPU) не перейдет в лог. 1. Как только был определен уровень лог. 1, это приведет к переходу процесса к следующей инструкции. Если линия I/O не переходит в лог. 1, то единственный способ выйти из состояния ожидания - запрет контроллера. 0x89 Эта команда заставляет контроллер MPSSE ждать, пока GPIOL1 (режим JTAG) или I/O1 (режим CPU) не перейдет в лог. 0. Как только был определен уровень лог. 0, это приведет к переходу процесса к следующей инструкции. Если линия I/O не переходит в лог. 0, то единственный способ выйти из состояния ожидания - запрет контроллера. [Команды, относящиеся только к FT232H, FT2232H и FT4232H] Команды в таблице ниже применимы только к микросхемам FT232H, FT2232H и FT4232H.
0x8A Команда выключит делитель на 5, чтобы на основной делитель подавалась частота 60 МГц.. 0x8B Команда включит делитель на 5, чтобы на основной делитель подавалась частота 60/5 = 12 МГц (режим по умолчанию, для совместимости с FT2232D). 0x8C Команда дает сдвиг данных на 3 стадиях, что используется для поддержи таких интерфейсов, как I2C которым нужны достоверные данные на обоих перепадах тактов clk. Это выглядит следующим образом: Установка данных за 1/2 периода тактов -> 0x8D Команда переводит сдвиг данных в состояние по умолчанию, на 2 стадиях. Это выглядит следующим образом: Установка данных за 1/2 периода тактов -> 0x8E, Length Команда сгенерирует от 1 до 8 импульсов тактов. Значение Length равное 0x00 приведет к формированию 1 периода тактов, и значение 0x07 приведет к формированию 8 периодов тактов. 0x8F LengthL, LengthH Команда сгенерирует от 8 до 0x80000 импульсов тактов, количество определяется значением Length. Значение Length 0x0000 приведет к формированию 8 периодов тактов, и Length 0xFFFF приведет к формированию 524288 периодов тактов. 0x94 Эта команда приведет к тому, что контроллер будет формировать импульсы тактов до тех пор, пока GPIOL1 или I/O1 (CPU mode микросхемы FT2232H) находится в состоянии лог. 0. Как только был определен уровень лог. 1, это приведет к переходу процесса к следующей инструкции. Если уровень I/O никогда не становится равным лог. 1, то единственный способ выйти из этого состояния - запрет контроллера. 0x95 Эта команда приведет к тому, что контроллер будет формировать импульсы тактов до тех пор, пока GPIOL1 или I/O1 (CPU mode микросхемы FT2232H) находится в состоянии лог. 1. Как только был определен уровень лог. 0, это приведет к переходу процесса к следующей инструкции. Если уровень I/O никогда не становится равным лог. 0, то единственный способ выйти из этого состояния - запрет контроллера. 0x96 Адаптивное тактирование требуется для интерфейса JTAG процессора ARM. Команда приведет к тому, что контроллер ждет сигнала RTCK от процессора ARM который должен поступать на ножку GPIOL3 (находящемуся в режиме входа). После того, как уровень на выходе тактов TCK поменялся, контроллер ждет, пока RTCK не получит такой же уровень перед тем, как снова поменять уровень TCK. Такое поведение можно рассматривать как подтверждение, что был принят сигнал тактов необходимой частоты. 0x97 Команда выключает адаптивное тактирование. 0x9C, LengthL, LengthH Команда приведет к выдаче от 8 до $80000 импульсов тактов, в зависимости от значения Length. Значение Length 0x0000 приведет к формированию 8 тактов, и Length 0xFFFF приведет к формированию 524288 тактов, или пока GPIOL1 не перейдет в лог. 1. 0x9D, LengthL, LengthH Команда приведет к выдаче от 8 до $80000 импульсов тактов, в зависимости от значения Length. Значение Length 0x0000 приведет к формированию 8 тактов, и Length 0xFFFF приведет к формированию 524288 тактов, или пока GPIOL1 не перейдет в лог. 0. [Команда только для FT232H] Установка работы выходов I/O только при лог. 0, с переходом в отключенное состояние при лог. 1: 0x9E, LowByteEnablesForOnlyDrive0, HighByteEnablesForOnlyDrive0 Команда приведет к тому, что выходы буферов I/O будут активны только когда данные находятся в лог. 0, и будут в третьем состоянии, когда данные станут лог. 1, и установлен соответствующий бит. Этот op-code используется, когда MPSSE конфигурируется для I2C. [Ссылки] 1. AN_108 Command Processor for MPSSE and MCU Host Bus Emulation Modes site:ftdichip.com. |