Все прочитали, вроде даже поняли, взяли паяльник - а нифига не получается? Скорее сюда! Поможем. Чем можем...
Ответить

Сбой SPI передачи

Вс окт 07, 2018 16:03:24

3 микроконтроллера Atmega 16 соеденяются между собой. Назовем условно - первый, второй и третий. Второй микроконтроллер собирает информацию и передает её для вывода 3 микроконтроллеру по SPI. "Командует парадом" первый микроконтроллер. Первый и второй микроконтроллер соеденены 4 проводами, второй микроконтроллер должен получать команду от первого диаграммой нулей и единиц. Пока первый и второй микроконтроллер между собой не соеденены (выставляя плюсы и минусы "перемычками") передача по SPI второго к третему идет нормально. Как только подключаю первый микроконтроллер данные от SPI непонятным образом искажаются. Пробовал соеденять первый и второй через оптроны и через механическое реле (чтобы понять причину), результат тот же. Не могу понять почему искажаются данные по SPI от второго к третему при подключении первого, хотя при подаче просто плюсов и минусов без первого микроконтроллера все работает нормально. Заранее спасибо за возможную помощь.

Re: Сбой SPI передачи

Пт ноя 02, 2018 15:14:09

Может быть, потому что если первый МК командует парадом - он тогда master наверное, генерить clk, дергать CS и все такое - его прерогатива, а 2 и 3 это уже не смогут? Если 2 и 3 - slave, то напрямую они не смогут и придется сперва закинуть пакет в первого, при том по его инициативе. А тот перешлет правильному адресату, опять же по своей инициативе. Это если пользоваться spi в его первозданном виде.

Можно попробовать сделать некое подобие multimaster но spi изначально подразумевает 1 мастера на шине и это потребует неких нестандартных извращений.

Если spi 4 провода - проблема в том что TX и RX разнесены, master своим TX отправляет всем slave'ам данные на их RX, а они принимают. Ответ наоборот, TX slave'а отправляет данные на RX master'а. А вот если это будут 2 slave-а - у них соединены между собой TX и TX, RX и RX и они ничего передать не смогут. Если это 3-проводной SPI где TX и RX соединены - вот там можно попробовать. Тогда в холостом режиме шины все должны быть в slave, а когда кто-то хочет передать - становится master'ом, начинает генерить клок, а остальные принимают соответственно. При этом придется сделать какую-то адресацию.

...и на самом деле это несколько проще в I2C сделать, пожалуй.

Re: Сбой SPI передачи

Пн ноя 05, 2018 12:45:53

Если один мастер и несколько слейвов на ОДНОЙ линии то выходные линии с подчиненных должны быть по крайней мере по схеме "монтажное ИЛИ" со статусом 1 у неиспользуемого во время обмена слейва.
Тактирование при таком варианте ведется мастером и при передаче (с адресными преамбулами) и при приеме.
Можно конечно и CS у слейвов использовать... Но то лишние проводки...
:roll:
При работе двух МК "в спарке" можно использовать протокол побитового квитирования (как в этом проекте https://radiokot.ru/forum/viewtopic.php ... 1#p3472041 ) там можно и совершенно остановить на некоторое время обмен, да и частота генераторов в устройствах не имеет значения.
8)
Ответить