18.05.2015, 17:17
|
|
Прописка
Регистрация: 09.10.2007
Сообщений: 235
Сказал спасибо: 27
Сказали Спасибо 24 раз(а) в 24 сообщении(ях)
|
SPI с аппаратным CRC
Вопрос: кто-нибудь реализовывал аппаратный CRC в SPI на STM8S?
Интересует именно флаг, который выставляется при несовпадении принятого CRC и подсчитанного.
Могу кинуть код на Си.
А в кратце так: как только закидываю последний байт из массива в буфер TX по прерыванию TXE, то сразу же даю команду CRCNEXT, после маскирую прерывание (сбрасываю флаг TXIE). По идее, приняв столько же байт, сколько и передал, происходит прием CRC и потом его сравнение. Ну и фиг. Флаг CRCERR взводится. Кто знает, в чем засада?
|
|
|
|
18.05.2015, 22:20
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,294
Сказал спасибо: 442
Сказали Спасибо 1,048 раз(а) в 706 сообщении(ях)
|
Re: SPI с аппаратным CRC
А как приемник узнает по скольки байтам считать crc?
__________________
misterdi<@>i.ua
|
|
|
|
19.05.2015, 07:14
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
|
Re: SPI с аппаратным CRC
Сообщение от ilya_sh
|
несовпадении принятого CRC и подсчитанного.
|
А МБЫТЬ в даном случае у вас CRC считается для данных которые ВЫ ПЕРЕДАВАЛИ? что бы CRC вы отправили после последнего переданного байта данных?
Я пока не возился с CRC SPI. Но если бы я писал софтверную реализацию передачи SPI с CRC, то так бы и поступил.
__________________
"picavr(ГАВ)мыло.ру" USB_Analyzer, Digital_Storage_Oscilloscope "picavr.kr1.ru" заказы в Китай компонентов/изготовление: плат/ЖКИ/мембраных клавиатур/имп трансформаторов
|
|
|
|
19.05.2015, 10:09
|
|
Прописка
Регистрация: 09.10.2007
Сообщений: 235
Сказал спасибо: 27
Сказали Спасибо 24 раз(а) в 24 сообщении(ях)
|
Re: SPI с аппаратным CRC
Проц в режиме слэйва. Мастер имеет табло, на котором высвечиваются принимаемые и передаваемые данные, включая CRC.
Команда CRCNEXT передается сразу же после загрузки в буфер TX последнего элемента массива. Вычисление CRC для приемника и передатчика прекращается после реальной отправки и приема последних данных. Дело в том, в регистре TXCRCR и RXCRCR находятся правильно посчитанные CRC. Но, после приема CRC от мастера, слэйв должен сравнить этот принятый CRC с RXCRCR. В случае несовпадения выставить бит CRCERR (x-x-x-CRCERR-x-x-x-x).
Вообщем, причина найдена. Итак поясню, что и как на коде.
char tmp;
tmp=SPI-›SR; tmp &=10;
if (tmp) Ошибка CRC;
SPI-›SR &=0xEF; // сбрасываем флаг ошибки
Вот в этом коде ошибка всегда есть
char tmp;
tmp=(uint8_t)(SPI-›SR);
if ((tmp & 0x10)!=0) Ошибка CRC;
SPI-›SR &=0xEF; // сбрасываем флаг ошибки
В этом коде всё работает верно.
Вывод: надо быть внимательным! )
Если кого интересует реализация аппаратного CRC, то выложу код с пояснениями. Кстати, объясню, почему этот режим для моего случая предпочтителен: мне нужно передавать мастеру некие данные, которые изменяются в прерываниях, и может быть так, что при передаче данных, они могут измениться прямо перед записью их в буфер TX, что исключает предварительный расчет CRC. Аппаратный же калькулятор CRC считает его именно по Shift регистру.
|
|
|
Сказали "Спасибо" ilya_sh
|
|
|
30.05.2015, 18:33
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
|
Re: SPI с аппаратным CRC
Сообщение от ilya_sh
|
что исключает предварительный расчет CRC.
|
а промежуточный буфер даёт такую возможность.
__________________
"picavr(ГАВ)мыло.ру" USB_Analyzer, Digital_Storage_Oscilloscope "picavr.kr1.ru" заказы в Китай компонентов/изготовление: плат/ЖКИ/мембраных клавиатур/имп трансформаторов
|
|
|
|
01.06.2015, 12:56
|
|
Прописка
Регистрация: 09.10.2007
Сообщений: 235
Сказал спасибо: 27
Сказали Спасибо 24 раз(а) в 24 сообщении(ях)
|
Re: SPI с аппаратным CRC
Учитывая скромные ресурсы контроллера, буфер отпадает.
|
|
|
|
11.06.2015, 13:06
|
|
Заблокирован
Регистрация: 15.04.2010
Адрес: Ижевск
Сообщений: 388
Сказал спасибо: 24
Сказали Спасибо 45 раз(а) в 35 сообщении(ях)
|
Re: SPI с аппаратным CRC
а можно отдельной функцией библиотекой скинуть сюда исходник ?
https://kazus.ru/forums/showthread.php?t=110853
Думаю людям пригодится.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 11:22.
|
|