В соответствии со спецификацией SDIO последовательность операций (для транзакции записи) имеет вид:
Command53 - CommandLatency - Command53Response - ResponseLatency - startbit - запись-число-байтов - CRC - endbit - WriteLatency - startbit - CRC - endbit - busybit.
Во время тестирования драйвера SDIO UART значения времени, которые я получил, были больше, чем ожидалось. Было обнаружено много задержек, особенно во время транзакции записи.
Причинами задержки могут быть планировщик, выделяющий процессорное время другим процессам, задержка в рабочих очередях и т. Д.
Я хотел бы проанализировать и понять время ожидания. Возможно, понимание соответствия между кодом драйвера устройства и осциллограммой Logic Analyzer может привести к некоторому сигналу.
Может кто-нибудь пролить свет на это?
Спасибо.
РЕДАКТИРОВАТЬ 1:
Сожалею! Я предположил несколько вещей.
В sdio_uart_transmit_chars () происходит вызов sdio_out()
, который, в свою очередь, вызывает sdio_writeb () , и этот вызов записывает побайтно (по одному байту за раз) в SDIO Устройство UART. Я изменил драйвер, чтобы использовать sdio_writesb () , то есть многобайтовый режим. Это уменьшило время, необходимое для записи X байтов. Интересно, что с увеличением размера записываемых данных наблюдался экспоненциальный рост WriteLatency (как упомянуто выше).
Эта задержка может быть вызвана многими причинами. Я хотел бы понять эти причины.
Установка: я использую ноутбук Linux (v 2.6.32) и загружаемый модуль ядра (который модифицирован sdio_uart.c )
РЕДАКТИРОВАТЬ 2:
Возможно, добавление 'SDIO' в этом вопросе вводит в заблуждение .. (в данный момент не уверен). Причины задержки могут быть общими для любого драйвера устройства при взаимодействии с оборудованием и могут быть независимы от процесса записи SDIO.
Если кто-то может указать мне на связанный онлайн-ресурс, я был бы рад изучить и обновить результат здесь.
Надеюсь, на этот раз я добавил больше ясности. Пожалуйста, прокомментируйте, если мне вопрос все еще не ясен.
Спасибо, что уделили время.
РЕДАКТИРОВАТЬ 3:
Да, я просматриваю сигналы в Logic Analyzer (LA), и во время и между записями задержки больше, чем я ожидал.
Чтобы дать представление о значениях времени:
Для передачи 512 байт: на аппаратном уровне теоретически запись должна занять 50 микросекунд (нас), однако в действительности я получил 200 нас.
Этот разрыв в 150 нас - это то, что я хочу понять.
Примечание:
1) Я округляю значения времени, чтобы упростить дело.
2) Все значения времени рассчитываются на уровне ядра, и здесь не возникает проблем с пользовательским пространством.