У меня есть приложение, в котором мне нужно общаться через SPI с FPGA. И FPGA, и микроконтроллер находятся под нашим контролем, поэтому у меня есть возможность определить протокол по своему усмотрению. Тем не менее, мне было интересно, есть ли какие-нибудь хорошие примеры использования, которые хорошо работают.
Вот о чем я думал. (байт-ориентированный)
Master: <REG><WR+LEN><MSTR_DATA><CHK>
Slave : < 0 >< 0 ><SLAV_DATA><CHK>
REG : register within FPGA to read or write
WR : read / write bit
LEN : 7 bit payload length (not including REG,WR+LEN or CHK)
MSTR: master data if write mode.
SLAV: slave data if read mode.
MCHK: 8 bit checksum of MSTR_DATA (by master), (CRC8, XOR, mod 256 etc)
SCHK: 8 bit checksum of SLAV_DATA (by slave ), (CRC8, XOR, mod 256 etc)
Это работоспособно? Есть ли лучшие примеры?
EDIT1: некоторые пояснения по требованиям:
Я бы посмотрел Modbus и асинхронное кадрирование HDLC для примеров того, как передавать пакеты по последовательной шине. Я бы также посмотрел на этот вопрос . Простой последовательный протокол связи «точка-точка » над Stack Overflow .
Редактировать:
Поскольку вам нужны низкие накладные расходы, я бы просто делал то, что вы делаете. Используйте Chip select для блокировки пакета и включения длины и контрольной суммы. Я бы, вероятно, держался подальше от CRC8, поскольку ваши данные основаны на байтах, а не на битах. Я проверил несколько устройств памяти SPI, и ни одно из них не содержало контрольной суммы.
Одним из примеров контрольной суммы является контрольная сумма UDP . Для вашего примера это будет означать дополнение к модулю суммы 256.
Для подтверждения или возврата статуса от ведомого вы можете воспользоваться тем фактом, что SPI является полнодуплексным, и вместо того, чтобы просто ничего не отправлять обратно, ведомое устройство может просто отправить байт состояния, и в этом байте вы можете использовать один бит, чтобы пометить ошибки контрольной суммы. Статус также может включать бит занятости, поэтому вы можете использовать его для опроса ведомого устройства, чтобы узнать, когда оно выполнено и готово к другой команде.
Я считаю, что режим SPI SD-карты имеет контрольную сумму.
ДжеффВ
ДжеффВ