Я пишу на карту microSD из своей прошивки, но это задача с самым низким приоритетом, поэтому она может быть прервана другими задачами, пока идет чтение/запись.
Теперь предположим, что я общался с этой картой microSD с помощью UART. Проблема во время чтения будет заключаться в том, что аппаратный RX FIFO переполнится, поэтому максимальная задержка, которую я могу предпринять, будет (размер FIFO × байт в секунду), а во время записи проблем не будет, потому что другой конец просто будет ждать, пока я отправить следующий символ.
Как это работает теперь, когда я использую SPI? Ситуация такая же, что для записи не имеет значения, а для чтения зависит от размера SPI FIFO?
Подавляющее большинство устройств SPI будут совершенно счастливы при любой скорости передачи данных ниже указанного максимума. Можно было выполнить часть сделки, в любой момент сделать перерыв, вернуться через несколько лет и завершить ее. При условии, что не было сбоев в часах, селекте или силовых линиях, транзакция прошла бы нормально.
Есть три основных предостережения, о которых следует знать:
В то время как определенные типы связи требуют использования определенных временных интервалов, для SPI-устройств редко возникает необходимость в них. Тем не менее, следует помнить о существовании таких устройств.
Проверяя копию спецификации (которую я не могу процитировать по причинам авторского права / NDA), скорость SPI указана, начиная с 0 Гц, что означает, что статическая работа в порядке. При использовании SPI вы получаете данные обратно только во время тактирования устройства, поэтому при использовании аппаратного SPI вы получите что-то только после отправки данных (даже если 0 / все равно). Таким образом, в этом отношении он отличается от UART, где вы можете получать незапрошенные данные в любое время.
DrFriedParts