(вздохнув) Китайцы...
Протокол общения по SPI, который в принципе написан как 16-битный (первые два байта идут с паузой в 1 такт SCK между ними, а SCK там 10 МГц, способность такое обработать поштучно довольно сильно зависит от конкретного контроллера), и в большинстве случаев так и работает, но в определённые моменты от него внезапно последний байт... отваливается.
И CS уже сняли, и времени прошло нормально так, и тут опа — вспомнили! Ещё ж байт был!
Причём переход в 8-битный режим, даже если я успеваю принять два первых байта (в принципе это возможно, надо успеть от конца первого байта до конца второго войти в прерывание и сбросить его флаг), счастья в жизни мне не приносит — в другой части сего мудрого протокола надо отвечать уже на второй байт, и если с 16-битным словом я могу заранее записать 0x00FE в регистр данных SPI, то с 8-битным у меня тупо между первым и вторым байтом нет на это времени.
Так что или переписывать на DMA (что для настолько в остальном примитивного протокола выглядит примерно как антикрыло на жигулях восьмой модели), или вот сейчас поищем, нет ли у нас тут контроллера какого, который при снятии CS посередине слова не сбрасывает весь SPI, а смиренно ждёт остаток данных.
@sforsecurity
Post #1009
4.56K

- 👍 25
- 👎 4
- ❤ 1