@piotrosiotr

Как реализовать мультиплексирование двух потоков данных между двумя микроконтроллерами?

Суть вопроса такова. Есть два микроконтроллера, связанных полудуплексным каналом передачи данных. Первый их собирает, второй выводит. Возникла необходимость параллельно передавать два потока данных. Как эту задачу можно оптимально реализовать, чтобы данные не путались и не было рассинхронизации? Есть ли какие-то идеи на этот счет или, может быть, литература, которую можно почитать?
  • Вопрос задан
  • 114 просмотров
Решения вопроса 1
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Вариант первый:
Сделайте один из сигналов CS (Chip Select).
Взводите его для одного контроллера, опускайте - для второго.
Взвели - передачу принимает первый. Опущен - второй.
В теории, CS сигналы могут коммутировать друг-друга или выбирать конкретного приемника.

Вариант второй:
Чисто программный. Использовать сигнал CD (Carier Detect), его поднимает передающая сторона, все остальные слушают посылку. Никто не может отправлять, пока поднят CD. В посылке первый байт - номер приемника. Чтобы не было коллизий, желательно определить длительность или максимальный размер передачи.
В этом верианте еще можно использовать дополнительную сигнальную линию INT (Interrupt). Ее поднимает, тот, кто хочет сделать срочную передачу, при поднятом CD.
Никто не поднимает CD, Пока не снят INT.
CD поднят, идет посылка
Кто-то поднял INT, Прошла предыдущая посылка, но никто не захватывает линию через CD.
Тот, кто поднял INT, ждет освобождения CD, сам поднимает CD, снимает INT, н7ачинает передачу.
Если линии INT и CD свободны, любой может поднять CD и начать передачу.

Литература: сети I2C, CAN, RS-485 + modbus, SPI, FrameRelay....
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Nick495
Увлекаюсь электроникой и микроконтроллерами.
Добрый день.
Если контроллеры расположены близко, то лучше всего подойдет скоростной протокол SPI.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы