Интерфейс UART – один из первых внешних компьютерных интерфейсов, который использовался уже в первых самосборных компьютерах в виде COM-порта (RS232, используется до сих пор). Было бы странно, если бы PADI не имел хотя бы одного такого интерфейса, а он имеет целых 3! О работе с ними мы сегодня и поговорим.
Теория
UART – асинхронный интерфейс. Если в том же SPI и I2C устройство понимает, когда нужно считывать новый бит, исключительно по фронту тактового сигнала, то здесь эта задержка между двумя считываниями/отправлениями высчитывается внутри самих устройств, и, естественно, должна совпадать для корректного приёма данных.
В этом заключается сложность – для корректной работы в пакет данных включают ещё несколько битов, поэтому скорость передачи по UART (которая измеряется в бодах, то есть «бит в секунду») нельзя просто поделить на 8 и получить скорость в байтах данных в секунду – один байт минимум будет растянут до 10 бит из-за старт-бита и стоп-бита.
Зачастую кроме этих необходимых битов добавляют биты проверки чётности для обеспечения проверки правильности данных, также стоп-битов может быть 2 штуки. Это замедляет передачу, но делает её более надёжной; стандарт RS-232 позволяет выполнять передачу на 15 метров на скорости 115200 бод (максимальная стандартизированная скорость).
Для реализации проекта из этой статьи нам потребуются следующие компоненты:
Подключение
RTL8710 имеет 2 интерфейса UART, работающих на максимально возможной скорости, и один низкоскоростной интерфейс с поддержкой работы при сне основного ядра (с минимальным потреблением).
По умолчанию объект Serial работает с UART, который расположен на GB0 (TXD) и GB1 (RXD).
Для связи с ПК необходимо использовать специальный адаптер. Если у вас есть хардварный COM-порт (чтобы это проверить, выньте все USB-UART преобразователи и откройте Диспетчер устройств – если порт COM1 существует, значит хардварный COM-порт есть и его разъём расположен сзади системного блока), то можно использовать RS232-UART преобразователь, который просто собирается на транзисторах или микросхеме MAX232:
Но универсальным решением будет USB-UART переходник, как, например, наш – на основе CP2102:
Он совместим со всеми популярными ОС (для Linux драйвера не нужны) и поддерживает все стандартные частоты работы. Для нестандартных частот рекомендуется использовать CP2104 – она имеет автоопределение скорости.
При питании PADI и адаптера от одного компьютера для связи достаточно подключить только линии RX и TX. При раздельном питании необходимо связать и земли адаптера и модуля.
Важно – подключение линий данных UART перекрёстное – RX к TX, TX к RX!
Для отслеживания потока на ПК можно использовать как встроенный терминал Arduino IDE, так и сторонние приложения, как, например, Terminal by Br@@y – поддерживает управление служебными линиями порта и множество частот, но в рамках сегодняшней статьи мы не выйдем за пределы встроенного терминала.
Итак, начнём работать с передачей данных из PADI. В комплекте с пакетом Ameba есть множество примеров, работающих с беспроводными сетями. Почти все они выводят информацию в последовательный порт. Например, откроем скетч AmebaWiFi-ScanNetworks и загрузим его в PADI:
Данные успешно получены! Если вы внимательно посмотрите в текст программы, то увидите, что порт настроен на скорости в 9600 бод, а принимаем мы на 38400 без каких-либо ошибок!
К сожалению, это пока что неисправленная ошибка в коде адаптации контроллера для Arduino IDE – какую бы скорость вы не выставили, передача и приём будут вестись на 38400 бодах. Это не позволяет нам подключить, например, модуль RFID или LC12S, которые работают на частоте 9600 бод. Надеемся, что в следующих версиях это будет исправлено.
Для обращения к этому порту можно использовать объект Serial, поэтому все стандартные примеры Arduino также будет работать. Скетч ASCIITable из стандартных примеров в папке Communication:
Работа с библиотекой Serial подробно расписана на официальном сайте или у нас в разделе Туториалы. Удачи в освоении работы с этим интерфейсом!
1 комментарий. Оставить новый
а программа где?