Ребятушки всем Привет. Сегодня будем разбираться с 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.

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.