Последовательный интерфейс вам должен быть хорошо знаком. Он используется для программирования платы Arduino, а также для взаимодействий с монитором последовательного порта, посредством которого можно организовать обмен данными между платой и компьютером. Это можно делать через адаптер, связывающий порт USB с последовательным портом на плате Arduino, или непосредственно через адаптер последовательного порта. Адаптер последовательного порта часто называют последовательным портом ТТЛ или просто последовательным портом. Аббревиатура ТТЛ означает «транзистор-транзисторная логика» — это редко используемая в настоящее время технология, основанная на 5-вольтовой логике.
Последовательный интерфейс этого вида не является шиной. Он поддерживает взаимодействия вида «точка–точка», в которые вовлечены только два устройства — обычно сама плата Arduino и периферийное устройство.
Последовательный интерфейс ТТЛ вместо I2C или SPI обычно поддерживают большие периферийные устройства или устройства, разработанные довольно давно и традиционно использующие последовательный интерфейс ТТЛ. К их числу относятся также устройства, изначально предназначенные для подключения к последовательному порту персонального компьютера. Примерами могут служить модули GPS, мультиметры с возможностью передачи данных, а также устройства чтения штрихкодов и радиометок.
Аппаратная часть последовательного интерфейса
На рис. 10.1 изображена схема последовательного интерфейса на плате Arduino Uno.
Рис. 10.1. Последовательный интерфейс на плате Arduino Uno
Микроконтроллер ATmega328 на плате Arduino Uno имеет два контакта: Rx и Tx (
Контакты Rx и Tx составляют последовательный интерфейс аппаратного универсального асинхронного приемопередатчика (УАПП) (Universal Asynchronous Receiver Transmitter, UART) в ATmega328. Этот компонент микроконтроллера отвечает за передачу байтов данных в микроконтроллер и их прием из него.
Модель Uno имеет отдельный процессор, действующий как адаптер между портом USB и последовательным портом. Помимо различий в уровнях сигналов, шина USB имеет также более сложный протокол, чем последовательный порт, поэтому за кулисами выполняется масса преобразований разного рода, чтобы создавалось ощущение, что последовательный порт микроконтроллера ATmega328 взаимодействует с компьютером напрямую.
Модель Arduino Leonardo не имеет отдельной микросхемы интерфейса USB, вместо этого в ней используется микроконтроллер ATmega, включающий два кристалла УАПП и один интерфейс USB (рис. 10.2).
Рис. 10.2. Аппаратная поддержка последовательного интерфейса на плате Arduino Leonardo
Один из приемопередатчиков УАПП обслуживает интерфейс USB, а другой соединен с контактами Rx и Tx (D0 и D1). Это позволяет подключать внешние устройства к контактам Tx и Rx и сохранить возможность программирования платы Arduino и обмена данными с монитором последовательного порта.
Другие модели Arduino имеют иное количество и схему подключения последовательных портов, как показано в табл. 10.1. Обратите внимание на то, что Due является единственной моделью Arduino, в которой последовательные порты работают с уровнями сигналов 3,3 В, а не 5 В.
Последовательный интерфейс ТТЛ способен поддерживать связь лишь по относительно коротким линиям (в пределах нескольких метров), и чем выше скорость обмена, тем короче должна быть линия. Для передачи данных на большие расстояния был разработан электрический стандарт RS232. Персональные компьютеры, выпускавшиеся до недавнего прошлого, часто снабжались последовательными портами RS232. Стандарт RS232 изменил уровни сигналов, чтобы обеспечить передачу данных на большие расстояния, чем позволяет последовательный интерфейс ТТЛ.
Таблица 10.1. Последовательные интерфейсы УАПП в разных моделях Arduino
Модель
Число последовательных портов
Подробности
Uno
1
Линия Rx подключена к контакту D0, а линия Tx — к контакту D1. Этот порт используется также интерфейсом USB
Leonardo
2
Отдельный порт для интерфейса USB. Линия Rx подключена к контакту D0, а линия Tx — к контакту D1
Mega2560
4
Интерфейс USB подключен к контактам D0 и D1. Три других порта: Serial1 — к контактам 19 (Rx) и 18 (Tx), Serial2 — к контактам 17 (Rx) и 16 (Tx), Serial3 — к контактам 15 (Rx) и 14 (Tx)
Due
4
Отдельный порт для интерфейса USB. Последовательный порт 0 использует контакты D0 (Rx) и D1 (Tx). Три других порта: Serial1 — к контактам 19 (Rx) и 18 (Tx), Serial2 — к контактам 17 (Rx) и 16 (Tx), Serial3 — к контактам 15 (Rx) и 14 (Tx)
Протокол последовательного интерфейса