[an error occurred while processing this directive]
Покритикуйте, посоветуйте как улучшить уже сделанный протокол!
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Garisoft 01 ноября 2002 г. 11:31
В ответ на: О протоколе обмена (команда+3 байта данных+КС) на SPI отправлено Garisoft 01 ноября 2002 г. 10:55

Используется дополнительная нога от Slave'а которая показывает Master'у что Slave может вести обмен (он у Slave'а начинается не по прирыванию, а по флагу который постоянно просматривается в основном цикле. Но иногда бывает занят и обмен по SPI должен быть блокирован этой ногой)
----
Master отсылает по SDO 1 байт (Команду) в Slave, в замен по SDI получает байт, который является состоянием Slave'а (там флаги информации Slave'а).
Slave в цикле просматривает флаг прихода нового байта (Команды), если есть то идет сверять его на совпало/не совпало. Если с этой командой Master хочет получить от Slave'а данные, то он кладет данные (к примеру свою текущуу координату)в некие свои регистры, я назвал их: Reg_HI, Reg_MID, Reg_LO (Reg_Cmd и Reg_Sum) и после обработки этой команды, кладет из Reg_Cmd (номер команды, к примеру "что-то" от Slave'а №1, чтобы потом Master отослал через себя на PC, и тот это понял что это, и от кого) в сдвиговый регистр SPI, поднимает "Ногу" своей готовности обмена по SPI,и ждет прихода очередного, уже "Reg_HI - старшего байта данных от Master'а" просматривая флаг. Master следя за этой ногой, понимает что Slave обработал "Команду" и отправляет в Slave Reg_HI а взамен получает Reg_Cmd...
Ну и так дальше, пока все 5 байт от Slave'а он не получит. А чтобы получить от Slave'а 5-ый байт (Reg_Sum) Master кидает ему просто любой байт, чтобы он ему взамен вернул Reg_Sum от Slave'а....
---
1.Проблема состоит в том, что иногда Slave получает по SPI команду, которая у него не зарегистрирована. Догружает остальные байты а себе ставит флаг в регистре состояния (Master всегда его получат взамен на отправку любой команды, и если есть флаг ошибки, то отсылает с Slave команду а тот ему выгружает 3-байта регистра ошибок) о том, что была некая ошибка и кладет код ошибки в регистр ошибок.(к примеру у меня это "Slave не понял команду").
2. Иногда происходит какой то сбой по SPI, и они оба знают что это сбой, Master тогда пытается снова достучатться до Slave'а.
3. Иногда возможно команда совпала, а в данных какая то чушь прилетела, или битик сдвинулся.... Фиг его знает.
4. Как то давно, вроде я убедился что по SPI у меня всё доходит без сбоя, и вроде как подсчет КС ненужна, хотя байт для этого отведен (Reg_Sum) но я её пока не считаю...
5. Понимаю что протокол не особо хорош, потому как иногда получается что Master думает что он отослал весь пакет, не свалился с SPI, а на самом деле в конечном итоге SLave этот пакет не применил, а это очень плохо бля меня.
6. Всё сделано на PIC16F876'ых 1 Master + 3 Slave'а + PC Тактовая у всех 20MHz, SPI работает на максимальной частоте (ниже нельзя)...

Если кто чего понял, что я тут написал и может посоветовать что-то толково-полезное, буду очень благодарен.
В данном случае сейчас делаю отправку 7-го байта из Master'а в Slave, чтобы он мне вернул так называемую вторую КС, но уже у себя подсчитанную из всего что получил, а потом инвертировал и отослал в Master по запросу 7-го (пустого) байта. А я уже в Master'е её Проксорю с той КС (контрольная сумма) предварительно инвертировав назад, которую отсылал и буду делать выводы о том, что данные доставлены верно. В связи в этим придётся везде включить прочерку КС.

Короче говоря, С уважением к вам, Игорь.
Покритикуйте, посоветуйте, Хелп ми:))

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru