SPI to UART

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

Запись в TX FIFO

Байт 0:

Dir 7 6 5 4 3 2 1 0
DI 1 x x x x x x x
DO tx_free 3 2 1 0 rx_ready 3 2 1 0

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

Байт N:

Dir 7 6 5 4 3 2 1 0
DI data 7 6 5 4 3 2 1 0
DO tx_free 3 2 1 0 x x x x

Чтение из RX FIFO

Байт 0:

Dir 7 6 5 4 3 2 1 0
DI 0 1 x x x x x x
DO tx_free 3 2 1 0 rx_ready 3 2 1 0

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

Байт N:

Dir 7 6 5 4 3 2 1 0
DI x x x x x x x x
DO data 7 6 5 4 3 2 1 0

Состояние UART

Байт 0:

Dir 7 6 5 4 3 2 1 0
DI 0 0 1 x x x x x
DO tx_free 3 2 1 0 rx_ready 3 2 1 0

Байт 1:

Dir 7 6 5 4 3 2 1 0
DI x x x x x x x x
DO OVF PE STPE x x x x x
  • 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