====== 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 |||| rx_ready |||| Далее передаются байты данных, в количестве не более чем tx_free. Байт N: ^ Dir ^ 7 ^ 6 ^ 5 ^ 4 ^ 3 ^ 2 ^ 1 ^ 0 ^ | DI | data |||||||| | DO | tx_free |||| 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 |||| rx_ready |||| Далее принимаются байты данных из 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 |||||||| ===== Состояние UART ===== Байт 0: ^ Dir ^ 7 ^ 6 ^ 5 ^ 4 ^ 3 ^ 2 ^ 1 ^ 0 ^ | DI | 0 | 0 | 1 | x | x | x | x | x | | DO | tx_free |||| rx_ready |||| Байт 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). {{tag>protocol uart spi}}