STM32: прямое подключение периферийных устройств I2C к UART через DMA - PullRequest
0 голосов
/ 11 июня 2019

У меня есть 2 микроконтроллера STM32L0 на разных печатных платах, которые обмениваются данными через I2C. Мне нужно как можно быстрее передать входящую передачу данных I2C (RX) от одного MCU к UART (TX) другого MCU без какой-либо обработки самих данных.

Можно ли напрямую подключить I2C RX к UART-TX через DMA?

Насколько я понимаю, это должно быть самое быстрое решение без блокировки процессора UART-relay-MCU. Но, к сожалению, я не нашел сравнимого примера ни с одним периферийным устройством, поэтому боюсь, что этот подход либо по каким-то причинам мне не известен, либо не самый лучший, или он просто неосуществим.

1 Ответ

3 голосов
/ 11 июня 2019

Это должно быть возможно, поскольку в Справочном руководстве указано, что контроллер DMA поддерживает передачу данных с периферии на периферию. Но там не сказано, как именно это должно быть настроено, поэтому я просто немного угадаю.

Используйте запрос 6 канала DMA 3, это запрос I2C1_RX. Настройте его на выполнение 8-битной циклической передачи от периферии к памяти, не увеличивайте ни адрес периферии, ни адрес памяти, адрес периферии - это регистр приема I2C, адрес памяти - это регистр данных передачи UART .

Убедитесь, что UART может передавать быстрее, когда I2C принимает. I2C требуется 9 бит для передачи байта, UART требуется 10 бит, учитывайте это при выборе битрейта. I2C @ 100 кГц и UART @ 115200 Бод должно быть в порядке.

...