Ребятушки всем Привет. Сегодня будем разбираться с Uart на Raspberry Pi 3. Почему все стало сложно, зачем производитель пошел на этот шаг и как с этим бороться.

Активные пользователи и подписчики моего Instagram да и просто читатели сайта, знают что я сейчас погружен в изучение вендинговой темы. И одной из составляющей этой темы, являются термопринтеры. Пару постов назад я описал работу с термопринтером HS-K21C и не очень удачный опыт с термопринтером Adafruit Thermal Printer   Оба термопринтера подключались к Raspberry Pi 3 по протоколу Uart. Но до этого пришлось словить просто огромное количество граблей. И казалось бы как видно из Gif-ки ниже, Raspberry Pi это одноплатник с Plug & Play, но по факту не все так просто. Сравнение новой версии с предыдущими можно почитать здесь.

Итак, поскольку в Raspberry Pi 3 теперь есть Bluetooth, то выводы uart0 от чипа процессора теперь используются под нужды Bluetooth. Таким образом в Raspberry Pi 3 больше нет нормального хардварного Uart’а.

Вместо него разработчики сделали программный UART. И это плохо, очень плохо. Программный Uart не имеет собственного генератора такта, а использует для работы частоту процессора, а она на Raspberry Pi постоянно меняется в зависимости от нагрузки, соответственно меняется и скорость работы порта. Вы и сами можете это проверить командой.

stty -F /dev/ttyS0

Теперь этот квазиUART представлен устройством /dev/ttyS0, а не /dev/ttyAMA0 как было раньше. В выводе команды видно, что скорость работы порта постоянно меняется и зафиксировать её на определённую константу невозможно, а значит невозможно и пользоваться портом для чтения/передачи данных. Вот такую свинью совместимости с предыдущими моделями Raspberry Pi подложили сообществу английские электронщики.

Разработчики предлагают абсолютно гениальные решения для решения проблемы с UART:
1. Зафиксировать частоту core_freq на уровне 250mhz, прописав core_freq=250 в конфиг /boot/config.txt, что естественно повлечёт за собой снижение производительности одноплатника, скатив его до уровня первой версии.

2.»Вернуть всё в зад», фактически отключив Bluetooth , добавив в конфиг

dtoverlay=pi3-miniuart-bt

Что в сухом остатке. Теперь у нас нет возможности нормально пользоваться UART’ом по умолчанию. Для нормальной работы нужно либо зафиксировать частоту ядра процессора на пониженном уровне и соответственно потерять часть производительности, либо отказаться от одновременного использования UART и Bluetooth. Для себя отключил Bluetooth, решил не жертвовать производительностью.

На этом у меня все. Запилил эту статейку для вас Друзья и как напоминалку для себя. Да и кстати никто вам не мешает пользоваться Usb-to-Serial переходниками, сними как раз все вроде нормально.

Друзья. Если вам понравилась эта статья, поделитесь ей в социальных сетях. Обязательно напишите комментарий если у вас возникли вопросы. Мне важно ваше мнение. И поддержите проект монеткой на страничке Donate.