SPI to UART

Наброски протокола

Запись в TX FIFO

Байт 0:

Dir76543210
DI1xxxxxxx
DOtx_free 3210rx_ready 3210

Далее передаются байты данных, в количестве не более чем tx_free.

Байт N:

Dir76543210
DIdata 76543210
DOtx_free 3210xxxx

Чтение из RX FIFO

Байт 0:

Dir76543210
DI01xxxxxx
DOtx_free 3210rx_ready 3210

Далее принимаются байты данных из RX FIFO в количестве не более чем rx_ready. Когда буфер опустевает, читаются нули.

Байт N:

Dir76543210
DIxxxxxxxx
DOdata 76543210

Состояние UART

Байт 0:

Dir76543210
DI001xxxxx
DOtx_free 3210rx_ready 3210

Байт 1:

Dir76543210
DIxxxxxxxx
DOOVFPESTPExxxxx
  • OVF - переполнение буфера приёма
  • PE - ошибка чётности
  • STPE - ошибка стопбита

FIXME - какие ещё у нас ошибки UART бывают?

Порядок работы

Выбираем нужный приёмо-передатчик (CS# - down) для начала цикла SPI обмена.

Отправив любую команду в ответ мы получим свободный размер TX FIFO буфера (tx_free) и RX FIFO буфера (rx_ready).

Если это была команда на чтение, то если rx_ready не равен нулю прочитываем имеющиеся байты.

Если это была команда на запись, передаём байты в количестве не большем чем tx_free.

Передача через UART начинается сразу, как только байты появляются в TX FIFO.

Освободждаем приёмо-передатчик (CS# - up).

 
comments powered by Disqus