FT232H Задержка между командами записи

Я хочу использовать микросхему FT232H в режиме SPI для управления дисплеем. Я установил тактовую частоту на 5 МГц. При тестировании своего кода я заметил, что даже в тесном цикле команды выполняются с разницей примерно в 120 микросекунд. В приведенном ниже коде я даю команду записать 4 байта. Я измеряю действие секундомером в VB, а также смотрю сигналы на прицеле. Код занимает около 200 микросекунд для выполнения один раз и около 320 микросекунд для выполнения два раза подряд, 450 микросекунд для 3 раз и так далее. Фактическая отправка байтов занимает всего около 7 микросекунд каждый раз. В остальное время ничего не происходит, т.е. 120 микросекунд тратятся впустую на каждую передачу. Вопросы: Является ли это неактивное время просто восстановлением процедур в FT232H? Я что-то упустил здесь? Есть ли лучшая команда для использования? Я хочу использовать SPI для синхронизации данных с чипом драйвера дисплея ILI9341 как можно быстрее. Я знаю, что это сделали другие. Предложения приветствуются!

 'Start
    'Data transmit, no receive
    SendBuffer(0) = &H10    'Output on rising clock, no input, MSB first, clock a number of bytes out
    SendBuffer(1) = &H3     'Length L
    SendBuffer(2) = &H0     'Length H
    SendBuffer(3) = &HA
    SendBuffer(4) = &HAA
    SendBuffer(5) = &HA
    SendBuffer(6) = &HAA

    'About 1-3 microseconds to this point

    FT_Status = FT_Write_Bytes(FT_Handle, SendBuffer(0), 7, BytesWritten)   ' Write buffer to the device

    '201 microseconds to this point

    'Data transmit, no receive
    SendBuffer(0) = &H10    'Output on rising clock, no input, MSB first, clock a number of bytes out
    SendBuffer(1) = &H3     'Length L
    SendBuffer(2) = &H0     'Length H
    SendBuffer(3) = &HA
    SendBuffer(4) = &HAA
    SendBuffer(5) = &HA
    SendBuffer(6) = &HAA
    FT_Status = FT_Write_Bytes(FT_Handle, SendBuffer(0), 7, BytesWritten)   ' Write buffer to the device

    '321 microseconds to here

    'Data transmit, no receive
    SendBuffer(0) = &H10    'Output on rising clock, no input, MSB first, clock a number of bytes out
    SendBuffer(1) = &H3     'Length L
    SendBuffer(2) = &H0     'Length H
    SendBuffer(3) = &HA
    SendBuffer(4) = &HAA
    SendBuffer(5) = &HA
    SendBuffer(6) = &HAA
    FT_Status = FT_Write_Bytes(FT_Handle, SendBuffer(0), 7, BytesWritten)   ' Write buffer to the device

    '450 microseconds to here

person Nordic_1    schedule 26.06.2016    source источник


Ответы (2)


нет опыта работы с вашим чипом (FT232H) но вот некоторые возможности в общем:

  1. некоторые микросхемы имеют отдельные часы для внутренней связи

    если установлено слишком низкое значение, вы ждете, пока команда будет отправлена ​​в модуль SPI, а не на саму передачу SPI.

  2. Прерывает время

    Если вы используете прерывания, то либо ваш ISR вызывается с задержкой (иногда модуль прерывания имеет собственные часы), либо вы заблокированы другим процессом, например, таймером/счетчиками в фоновом режиме или USB/ передача или настройка DMA или другим ISR.

  3. Интерфейс отладки

    Если вы используете интерфейс отладки (например, JTAG), он может вас остановить. В таком случае попробуйте сырое приложение без такого интерфейса и измерьте осциллографом, чтобы исключить это.

  4. Управление питанием

    Для экономии энергии некоторые микросхемы отключили неиспользуемые модули, и перед использованием их необходимо запустить, что занимает некоторое время. Это может иметь место, даже если вы меняете конфигурацию модуля.

  5. Ошибка в чипе

    Что ж, в настоящее время, когда руководство вынуждает/выводит на рынок новые чипы, существует больше возможностей оставить ошибки в чипах (намного выше, чем в прошлом). Так что не исключайте этого.. Я наткнулся на это уже несколько раз. Обычно старайтесь связаться с производителем чипа и/или проверить его техническое описание на наличие обновлений/ошибок и списков известных ошибок.

person Spektre    schedule 28.06.2016

Я узнал от производителя чипов, что задержка связана с соображениями массовой передачи USB. Я буду работать со временем, буферизируя как можно больше данных при каждой передаче.

person Nordic_1    schedule 29.06.2016