UART и с чем его едят / Хабр
После Vogue истерии появилось множество вопросов, как подключить плату к компьютеру. И многие люди даже не понимают, что же такое UART. И я решил рассказать здесь какой это мощный инструмент.
Роутер превращается в компьютер, если к нему по UART подключить клавиатуру и дисплей
От телеграфа к COM-порту
Протокол UART (Universal asynchronous receiver/transmitter) или, по-русски, УАПП (универсальный асинхронный приемопередатчик) — старейший и самый распространенный на сегодняшний день физический протокол передачи данных. Наиболее известен из семейства UART протокол RS-232 (в народе – COM-порт, тот самый который стоит у тебя в компе). Это, наверное, самый древний компьютерный интерфейс. Он дожил до наших дней и не потерял своей актуальности.
Надо сказать, что изначально интерфейс УАПП появился в США как средство для передачи телеграфных сообщений, и рабочих бит там было пять (как в азбуке Морзе). Для передачи использовались механические устройства. Потом появились компьютеры, и коды ASCII, которые потребовали семь бит. В начале 60-х на смену пришла всем известная 8-битная таблица ASCII, и тогда формат передачи стал занимать полноценный байт, плюс управляющие три бита.
В 1971 году, когда уже начался бум микросхем, Гордон Белл для компьютеров PDP фирмы Western Digital сделал микросхему UART WD1402A. Примерно в начале 80-х фирмой National Semiconductor был создан чип 8520. В 90-е был придуман буфер к интерфейсу, что позволило передавать данные на более высоких скоростях. Этот интерфейс, не претерпев практически никаких изменений, дошел и до наших дней
Физика интерфейса
Чтобы понять, что роднит и отличает разные UART-интерфейсы, разберем принцип работы самого популярного и любимого нами протокола RS-232. Дотошно расписывать все тонкости его работы я не буду. Об этом написан ни один десяток мегабайт статей, и если ты умеешь пользоваться Гуглом, то без проблем найдешь всю необходимую информацию. Но основы я расскажу, благо с ними можно уже круто всем рулить, а всякие фишки используются очень редко.
Основные рабочие линии у нас – RXD и TXD, или просто RX и TX. Передающая линия – TXD (Transmitted Data), а порт RXD (Received Data) – принимающая.
Эти линии СОМ-порта задействованы при передаче без аппаратного управления потоком данных. При аппаратном потоке задействованы еще дополнительные интерфейсные линии (DTS, RTS и пр.). Выход передатчика TX соединен с входом приемника RX и наоборот. Электрический принцип работы RS-232 отличается от стандартной 5-вольтовой TTL логики. В этом протоколе логический нуль лежит от +3 до +12 вольт, а единица от -3 до -12, соответственно. Промежуток от -3 до +3 вольт считается зоной неопределенности. Учти, что все напряжения указаны относительно корпуса компьютера, или земли. Теперь, я думаю, ты понимаешь, зачем в компьютерном блоке питания существует сразу два напряжения: -12 и +12 вольт. Они были введены специально для работы СОМ-порта.
Приём сигнала по RS-232 (взято из книги М.Гук «Аппаратные интерфейсы ПК»)
Такая большая амплитуда рабочих напряжений, целых 24 вольта, нужна в первую очередь для помехоустойчивости линий связи. По стандарту, длина кабеля, по которому у нас бегают данные, может быть 15 м. Хотя на практике люди умудрялись заставлять его работать даже на 25 м. Электрические параметры RS-232 – это главная характеристика, которая отличает его от других протоколов семейства UART.
Следующие характеристики – формат посылки и скорость передачи данных – полностью применимы ко всем видам UART и обеспечивают их совместимость через несложные схемы сопряжения.
Стандартная посылка занимает 10 бит. Но правило это распространяется только на стандартные настройки СОМ-порта. В принципе, его можно перенастроить так, чтобы он даже интерфейс One-Wire понимал. В режиме простоя, когда по линии ничего не передается, она находится в состоянии логической единицы, или -12 вольт. Начало передачи обозначают передачей стартового бита, который всегда равен нулю. Затем идет передача восьми бит данных. Завершает посылку бит четности и стоповый бит. Бит четности осуществляет проверку переданных данных. Стоповый бит говорит нам, что пересылка данных завершена. Надо отметить, что STOP-бит может занимать 1, 1.5, и 2 бита. Не стоит думать, что это дробные биты, это число говорит только о его длительности. Стоповый бит, как и стартовый, равен нулю.
Сигнал UART на экране осциллографа. Виден старт бит, данные и стоповый бит. Спасибо DIHALTза картинку
Скорость работы
Даже если тебе раньше никогда не приходилось работать с СОМ-портом, по крайней мере, в модеме ты должен знать номинальные скорости работы: 9600, 28800, 33600, 56000 и т.п. Сколько бит в секунду убегает из нашего порта? Вот смотри, допустим, скорость у нас 9600 бит в секунду. Это означает, что передача одного бита будет занимать 1/9600 секунды, а пересылка байта – 11/9600. И такая скорость для байта верна только в случае, если стоп-бит будет занимать один бит. В случае, если он занимает два стоп-бита, то передача будет 12/9600. Это связано с тем, что вместе с битами данных передаются еще специальные биты: старт, стоп и бит четности. Линейка скоростей СОМ-порта стандартизирована. Как правило, все устройства работают на трех стандартных скоростях: 9600, 19200, 115200. Но возможны другие варианты, даже использование нестандартных скоростей или скорости, меняющейся во времени, – с этим я сталкивался при разборе полетов очередного устройства.
Такой разный протокол
Видов UART существует великое множество. Я не буду перечислять их наименования, ибо, если ты владеешь английским, то сумеешь и сам нагуглить. Но самые основные не отметить нельзя! Напомню, что главное отличие интерфейсов состоит в среде и способе передаче данных. Данные могут передаваться даже по оптоволокну.
Второй по распространению интерфейс после RS-232 – это RS-485. Он является промышленным стандартом, и передача в нем осуществляется по витой паре, что дает ему неплохую помехоустойчивость и повышенную скорость передачи до 4 мегабит в секунду. Длина провода тут может достигать 1 км. Как правило, он используется на заводах для управления разными станками.
Надо сказать, что IRDA, или инфракрасная связь, которая встроена в большинство телефонов и КПК, тоже по сути является UARTом. Только данные передаются не по проводам, а с помощью инфракрасного излучения.
В SMART-картах (SIM, спутниковое телевиденье, банковские карты) – тех самых устройствах, которые мечтает похачить каждый уважающий себя фрикер – тоже используется наш любимый UART. Правда, там полудуплексная передача данных, и логика работы может быть 1,8/3,3 и 5 вольт. Выглядит так, будто RX запаян с TX на одном конце и на другом – в результате, один передает, другой в этот момент слушает, и наоборот. Это регламентировано стандартом смарт-карт. Так мы точно знаем, сколько байт пошлем, и сколько нам ответит карточка. Тема достойна отдельной статьи. В общем, запомни, что UART есть практически везде.
Устройства, которые имеют на своём борту UART, по часовой стрелке: мышка, ридер-эмулятор SMART-карт, КПК Palm m105, отладочная плата для микроконтроллера ATtiny2313 (или AT89C2051), модем.
Сопряжение интерфейсов
Я уже глаза намозолил разными интерфейсами, но как с ними работать-то? Ну, с обычным RS-232 понятно, а, допустим, с 5-вольтовым юартом как быть? Все просто: существуют различные готовые микросхемы-преобразователи. Как правило, в маркировке они содержат цифры «232». Увидел в схеме микруху с этими цифирями – будь уверен: скорее всего, это преобразователь. Через такие микросхемы с небольшим обвязом и сопрягаются все интерфейсы UART. Я не буду рассказывать о промышленных интерфейсах, а скажу о тех преобразователях, которые интересуют нас в первую очередь.
Самый известный преобразователь интерфейса – это микросхема, разработанная фирмой MAXIM, которая и получила от нее часть своего названия (max232). Для ее работы требуется четыре конденсатора от 0,1 микрофарады до 4 микрофарад и питание 5 вольт. Удивительно, что эта микросхема из 5 вольт генерирует отрицательное напряжение, чтобы сопрягать 5-вольтовый UART с RS-232.
Существуют микросхемы сопряжения USB с UART, например, микросхема ft232rl. В Ubuntu для этой микросхемы уже встроены драйвера. Для Windows их придется качать с официального сайта. После установки драйверов в системе появится виртуальный СОМ-порт, и с ним уже можно рулить различными устройствами. Советую не принимать эти микросхемы, как единственно возможные. Найдется громадное количество более дешевых и интересных аналогов, посему наседай на Гугл и поймешь, что мир UARTа – это круто.
В целом, микросхемы стоят достаточно дорого и порой можно обойтись более сложными, но зато более дешевыми схемами на паре транзисторов.
Что нам это дает?
Как ты понял, интерфейс UART присутствует во многих устройствах, в которых стоит какой-либо процессор или контроллер. Я даже больше скажу: если там стоит контроллер, то юарт есть стопудово (только он не всегда может использоваться). Как правило, по этому интерфейсу идет наладка и проверка работоспособности девайса. Зачастую производитель умалчивает о наличии этого интерфейса в изделии, но найти его несложно: достаточно скачать мануал на процессор и, где находится юарт, ты будешь знать. После того, как ты получишь физический доступ к железяке по нашему интерфейсу, можно его настроить на свое усмотрение или даже заставить работать, так как надо тебе, а не как задумал производитель. В общем, – выжать максимум возможностей из скромного девайса. Знание этого протокола дает также возможность подслушать, что же творится в линиях обмена между различными процессорами, так как часто производители организуют целые юарт-сети в своем устройстве. В общем, применений много, главное – интуитивно понимать, как это делать.
Апдейтим роутер
Намедни я намутил себе WiFi-роутер WL-520GU и, прочитав статью Step’a «Level-up для точки доступа» (][ #106), успешно установил туда Linux. Но у меня возникли проблемы с монтированием swap-раздела жесткого диска. Так появилась необходимость посмотреть лог загрузки точки доступа – подмонтировался раздел или нет – причем, как говорится, на лету, чтобы сразу вносить необходимые изменения. Шестым чувством я подозревал, что в моем роутере просто обязан быть UART. Я взял в руки крестовую отвертку и начал его разбирать. Дело тривиальное, но с заковыркой – потайные винтики находятся под резиновыми ножками (если решишь повторить, помни, что при разборе ты лишаешься гарантии). Моему взору предстала достаточно скучная плата, где все «chip-in-one»: один центральный процессор, в который включено все, внешняя оператива, флеша, преобразователь питания и рядок разъемов с кнопками. Но на плате была не распаянная контактная площадка, точнее сказать, отверстия под иголки. Их было четыре штуки. Вот он UART, это очевидно! По плате даже без мультиметра видно, что крайние иголки – это +3,3 вольта и второй – земля. Средние контакты, соответственно, RX и TX. Какой из них что, легко устанавливается методом научного тыка (спалить интерфейс очень проблематично).
Собираем преобразователь
Чтобы подключить роутер к компу, необходимо сопрячь интерфейсы RS-232 с UARTом роутера. В принципе, можно подключить к USB, используя указанную выше микросхему FT232RL, – что я и сделал при первой проверке роутера. Но эта микросхема – в достаточно сложном для пайки корпусе, посему мы поговорим о более простых решениях. А именно – микросхеме MAX232. Если ты собираешься питаться от роутера, то там, скорее всего, будет 3,3 вольта, поэтому лучше использовать MAX3232, которая обычно стоит в КПК (схему распайки нетрудно найти в инете). Но в моем роутере присутствовало питание +5 вольт на входе, а указанных микросхем у меня великое множество, и я не стал заморачиваться. Для сборки нам потребуются конденсаторы 0,1 мкФ (4 штуки) и сама микросхема. Запаиваем все по традиционной схеме, и начинаем эксперименты.
Исходники для сборки
На выход я сразу повесил 9-пиновый разъем типа «папа», чтобы можно было легко подключить нуль-модемный кабель. Если ты помнишь, во времена DOSа такими кабелями делали сетку из двух компов и резались в «Дюкнюкем». Провод для наших целей собрать несложно. Правда, получится не полный нуль-модем и через него особо не поиграешь, но рулить точкой доступа будет самое то! Тебе понадобятся два 9-пиновых разъема типа «мама», корпуса к ним и провод, например, от старой мышки или клавы (главное, чтобы в нем было три провода). Сначала соединяем земли ¬- это пятый контакт разъемов; просто берем любой провод и с обоих сторон припаиваем к 5-му контакту. А вот с RX и TX надо поступить хитрее. С одного конца провода запаиваем на 3-й контакт, а с другого – на 2-й. Аналогично с третьим проводом, только с одного конца запаиваем на 2-й контакт, с другого – на 3-й. Суть в том, что TX должен передавать в RX. Прячем запаянные разъемы в корпус — и готов нуль-модемный кабель!
Распаянные иголки на плате роутера.
Для удобства монтажа в материнку роутера я впаял штырьковый разъем, а в монтажку с MAX232 – обратный разъем и вставил платку, как в слот. RX и TX роутера подбираются экспериментально.
Собраная плата
Теперь надо запитать микросхему преобразователя. Общий провод у нас присутствует уже прямо в разъеме на мамке роутера. А вот + 5 вольт находится прямо у входа питания роутера, в месте, где подключается адаптер. Точку нахождения 5 вольт определяем вольтметром, измеряя разные узлы относительно земли роутера.
Прожигаем отверстие для вывода проводов
Распаянный СОМ-порт
Всё в сборе. Обратите внимание, что красный провод питания идёт к разъёму адаптера роутера. Узелок внутри сделан, для того чтобы рывком на оторвать припаянные провода.
Настройка терминала
Нам нужно настроить терминальную программу. В Винде все достаточно просто: запускаем Hyper Terminal, отключаем программную и аппаратную проверку данных, выставляем скорость 115200 и один стоповый бит. А вот в Линухе дело обстоит чуть хитрее. У меня Ubuntu, и рассказывать буду про нее. Для начала разберись, как в твоей сборке именуется СОМ-порт. В моем случае СОМ1 был ttyS0 (если использовать к примеру микросхему FT232, то он будет именоваться ttyUSB0). Для работы с ним я использовал софтинку minicom.
Запускай ее с параметрами: minicom -l -8 -c on -s. Далее выбирай «Настройки последовательного порта»:
Последовательный порт /dev/ttyS0
* Скорость/четность/биты 115200 8N1
* Аппаратное управление потоком — нет
* Программное управление потоком — нет
Сохраняем настройки. Софтина попробует проинициализировать модем — не обращай внимания. Чтобы вызвать меню, нажми <ctrl-a z>. Там можно менять настройки, например: включить/выключить эхо — Е.
Настройка
Я не рекомендую подключать микросхему преобразователя к роутеру, дабы проверить ее функционал. Допускается только брать с него питание. Проверка проходит очень просто — необходимо перемкнуть RX с TX. Сначала перемыкаешь в СОМ-порте 2-й и 3-й контакт — проверяешь настройки терминалки. Пишешь что-то на клаве: если символы возвращаются, значит, все ОК. Также проверяешь кабель, те же контакты. Потом подключаешь микросхему, и уже у нее на выходе ставишь перемычку. Я заостряю на этом внимание, потому что, например, у меня возникли проблемы, и ничего не работало, пока я все не проверил и не нашел ошибку.
После всех настроек можешь смело цеплять к роутеру и искать RX-TX на роутере, периодически выдергивая из него питание. Если все сделано правильно, то при подаче питания ты увидишь лог загрузки роутера. Принимай поздравления, теперь у тебя полный аппаратный рут, так, будто ты сидишь за монитором с клавой роутера.
Лог загрузки роутера в программе minicom
Автономное плаванье
Согласись, делать через терминальную программу то же самое, что удобнее сделать через SSH – не айс. Мне хотелось превратить роутер в автономный Linux-компьютер, со своей хитрой архитектурой. Для этого нужно, чтобы данные с клавиатуры передавались по UART, и по нему же выводились на монитор. Паять и разрабатывать устройство было лениво. Тогда-то и пришла идея заюзать для этих целей пылящийся без дела КПК. По сути, наладонник будет исполнять роль контроллера клавиатуры и дисплея, ну и служить сопряжением интерфейсов.
Сначала я попробовал древнейший Palm m100. Но, видимо, у него очень маленькая буферная память, и от количества данных, которые идут с роутера, ему становилось плохо. Я взял другой — промышленный КПК, с нормальным СОМ-портом и терминалкой. Подключил, вставил в док и, в результате, получил небольшой линукс-компьютер. В принципе, вместо дорогущего промышленного КПК подойдет большинство наладонников, работающих под операционкой WinCE, главное – найти подходящий терминальный софт.
Линукс компьютер 🙂
Итоги
Итак, я показал небольшой пример использования UART. Если ты вкуришь в этот протокол, то поверь, станешь просто повелителем различных железок. Есть он практически везде, и через него можно сопрягать, казалось бы, совершенно разные вещи. К примеру, к тому же роутеру при небольших настройках подключается мобильный телефон по юарту, – и раздает с него интернет. В общем, применений куча. Не бойся экспериментировать, самообразовываться и реализовать свои идеи.
Этот пост является отредактированной для хабра версией моей статьи в Хакере № 05/09 «Главный инструмент фрикера».
Литература:
1. Михаил Гук «Аппаратные интерфейсы ПК» — просто студенческая библия по персоналке.
2. en.wikipedia.org/wiki/RS-232
3. easyelectronics.ru/tag/rs232
Скорость передачи UART – CodeRoad
Я хочу проверить, правильно ли я понимаю, однако не могу найти никаких точных объяснений или примеров. Допустим, у меня установлена связь UART на 57600 бит / сек, и я передаю 8-битные символы. Допустим, я решил не иметь четности, и поскольку мне нужен один начальный бит и один стоп-бит, это означает, что по существу для передачи одного символа мне нужно было бы передать 10 бит. Означает ли это, что скорость передачи будет равна 5760 chars/second?
Поделиться Источник user1949350 21 июня 2018 в 22:52
2 ответа
- USB скорость UART ошибочна
GUI на PC отправляет набор байтов во встроенную систему. Bluetooth адаптер, все в порядке USB кабель, все неправильно. Устройство представляет собой последовательный кабель FTDI USB TTL ( страница продукта поставщика здесь ) Нам нужна предсказуемая скорость. Я посылаю одну вещь из PC, но я вижу…
- Как заставить UART работать в PIC32 с правильной тактовой частотой и скоростью передачи данных?
Я работаю над UART с pic32mx5xx . Все, что мне нужно, это отправить сообщение с pic на terminal (Putty), но оно не работает, так как я получаю недопустимые символы. Скорость передачи данных установлена на 19200, как рассчитать тактовую частоту? Правда ли, что тактовая частота UART в 16 раз…
1
Ваш расчет по существу верен.
Но 5760 символов в секунду – это максимальная скорость передачи. Поскольку это асинхронная связь, передатчику UART разрешено простоя линии между символьными кадрами.
IOW скорость передачи данных применяется только к битам символьного кадра.
Скорость передачи символов зависит от того, имеются ли данные для сохранения передатчика busy/saturated.
Например, если microcontroller использовал запрограммированный ввод-вывод (с опросом или прерыванием) вместо DMA для передачи UART, высокоприоритетные прерывания могли бы остановить передачу и ввести задержки между кадрами.
Поделиться sawdust 22 июня 2018 в 07:40
0
Baudrate = 57600
Time for 1 Bit: 1 / 57600 = 17,36 us
Time for a frame with 10 Bit = 173,6 us
this means max. 1 / 1736 us = 5760 frames(characters) / s**
Поделиться Mike 22 июня 2018 в 08:09
Похожие вопросы:
uart tx buf не изменился
Я использую EWARM IDE от IAR с платой разработки Olimex для ARM STR712FR2 и отладчиком J-link JTAG, предоставленным IAR. По какой-то причине я не могу писать в регистр UART TxBUFR. Я считаю, что…
Скорость передачи данных и тактовой частоты
Я хочу, чтобы 2 моих устройства связывались с UART. Я не имеют каких-либо требований по срокам Означает ли это, что я могу выбрать любую скорость передачи данных, если скорость передачи данных…
настройка скорости передачи данных UART stm32f4?
Теперь у меня есть stm32f4-discovery. Я делаю max232 для uart для подключения stm32f4. И я использую usb-rs232 для подключения max232. Я надеюсь, что смогу общаться с stm32f4 и PC через uart. И я…
USB скорость UART ошибочна
GUI на PC отправляет набор байтов во встроенную систему. Bluetooth адаптер, все в порядке USB кабель, все неправильно. Устройство представляет собой последовательный кабель FTDI USB TTL ( страница…
Как заставить UART работать в PIC32 с правильной тактовой частотой и скоростью передачи данных?
Я работаю над UART с pic32mx5xx . Все, что мне нужно, это отправить сообщение с pic на terminal (Putty), но оно не работает, так как я получаю недопустимые символы. Скорость передачи данных…
Почему задержка между байтами увеличивается, когда я увеличиваю скорость UART БОД?
Есть кое-что интересное, что я не совсем понимаю. Мой UART инициализируется с 9600 бод. Я посмотрел на TX в строке через логический анализатор, и байты, которые я отправляю, имеют минимальную…
raspberry pi скорость передачи данных uart зафиксирована на уровне 9600
Я использовал raspberry pi с преобразователем usb в rs232, но теперь мне приходится использовать Raspberry Pi UART контактов, но у меня такая глупая проблема. Я использую библиотеку termios.h в C (…
C# SerialPort не поддерживает высокую скорость передачи данных в бодах
Я использую драйвер Silicon Labs CP210x для моего моста USB – UART. Используя CVAVR terminal, я могу получать данные с моста со скоростью 57600 БОД. Однако, когда я реализовал это на C#,, я получил…
Linux UART медленнее, чем заданная скорость передачи данных
Я пытаюсь связаться между двумя системами Linux через UART. Я хочу отправлять большие куски данных. При заданной скорости передачи данных это должно занять около 5 секунд, но почти в 10 раз больше…
Как настроить скорость передачи данных в бодах с помощью HAL_UART_Transmit() в STM32F103C8T6?
Я использую плату STM32F103C8T6 и CubeMX для генерации кода. Я передаю данные через UART, используя функцию HAL_UART_Transmit(). Я настроил скорость передачи данных как 9600 в CubeMX, и я также…
Портирование приложений с семейства PIC18 на PIC24F. 2.6. Модуль UART
2.6. Модуль универсального асинхронного приемопередатчика (UART)
Новый модуль универсального асинхронного приемопередатчика (UART) семейства PIC24F является полнодуплексным интерфейсом со значительно расширенной функциональностью, по сравнению с модулем EUSART семейства PIC18.
Основные новые особенности модуля UART PIC24F включают в себя увеличенную скорость обмена, аппаратную поддержку контроля четности, конфигурация уровня на линии в режиме ожидания, поддержку аппаратного управления потоком, и т. д.
В табл. 29 приведено сравнение основных функций модуля UART PIC24F и модуля EUSART PIC18.
Замечание: модуль UART семейства PIC24F не поддерживает синхронный режим обмена. В качестве синхронного приемопередатчика возможно использование аппаратного модуля SPI.
Таблица 29. Сравнение основных функций модуля UART PIC24F и модуля EUSART PIC18
Параметры |
PIC18 |
PIC24F |
Асинхронный дуплексный режим работы с поддержкой: |
да |
да |
Дуплексный 8- и 9-битный обмен |
да |
да |
Поддержка 9-битного обмена с функцией детектирования адреса (9 бит = 1) |
да |
да |
Аппаратное управление потоком (сигналы CTS и RTS) |
нет |
да |
Количество стоповых бит |
1 |
1 или 2 |
Выбор уровня на линии в режиме ожидания |
нет |
да |
Генератор скорости передачи |
8- / 16-битный |
16-битный |
Предделитель генератора скорости передачи |
да |
да |
Диапазон скоростей обмена |
от 300 бод до 115 кбод |
от 15 бод до 1 Мбод |
Аппаратная поддержка кодирования и декодирования IrDA® |
нет |
да |
Выход частоты 16x(baud rate) для поддержки IrDA® трансивера |
нет |
да |
Наличие буфера FIFO у передатчика |
нет |
да |
Наличие буфера FIFO у приемника |
нет |
да |
Диагностический режим «Loopback» |
нет |
да |
Аппаратная поддержка бита четности |
нет (может быть реализована программно) |
да |
Аппаратная поддержка контроля четности |
нет |
да |
Аппаратная генерация байта синхронизации LIN |
да |
да |
Аппаратная поддержка символов Sync и Break |
да |
да |
Генерирование прерывания по фронту на линии приема |
да |
да |
Аппаратное детектирование ошибки кадра и переполнения буфера |
да |
да |
Возможность останова в режиме IDLE |
нет |
да |
Генерирование прерываний |
при приеме и при передаче |
при приеме, при передаче и при детектировании ошибки |
2. 6.1. Наименования битов и регистров модуля
Большинство служебных битов модуля UART микроконтроллеров PIC24F имеют псевдонимы, соответствующие (или похожие) названию аналогичных битов в семействе PIC18 – см. табл. 30.
Таблица 30. Сравнение основных управляющих битов модуля UART семейства PIC24F и модуля EUSART семейства PIC18
Функция |
PIC18 |
PIC24F |
Включение механизма автоматической настройки скорости обмена (Auto Baud Detect) |
ABDEN |
ABAUD |
Включение адресного режима обмена |
ADDEN |
ADDEN |
Выбор высокой скорости обмена (для PIC18F – высокая/низкая скорость, для PIC24F – выбор делителя генератора тактовой частоты 4x/16x) |
BRGH |
BRGH |
Включение приемника |
CREN (только приемник) |
UARTEN (приемник и передатчик) |
Флаг ошибки фрейма |
FERR |
FERR |
Флаг переполнения буфера |
OERR |
OERR |
Флаг нахождения приемника в режиме ожидания |
RCIDL |
RIDLE |
Флаг прерывания по приему |
RCIF |
UxRXIF |
Флаг наличия данных в буфере приемника |
URXDA |
|
9-й бит принятого фрейма (в 9-битном режиме работы) |
RX9D |
UxRXREG<8> |
Бит разрешения 9-биного приема |
RX9 |
PDSEL1:PDSEL0 |
Бит разрешения 9-битной передачи |
TX9 |
|
Отправка символа Break (спецификация LIN) |
SENDB |
UTXBRK |
Состояние сдвигового регистра передатчика |
TRMT |
TRMT |
Включение передатчика |
TXEN |
UTXEN |
Флаг прерывания по передаче |
TXIF |
UxTXIF |
9-й бит передаваемых данных |
TX9D |
UxTXREG |
Разрешение прерывания по заднему фронту на линии RX (режим WAKE-UP) |
WUE |
WAKE |
2. 6.2. Функции модуля UART, отсутствующие в семействе PIC24F
Микроконтроллеры PIC24F не поддерживают следующие функции модуля UART контроллеров PIC18:
Низкая частота тактового генератора: FOSC/(64 (n+1))
Синхронный режим работы. Модули UART PIC24F не поддерживают синхронный обмен как в режиме ведомого, так и в режиме ведущего. Для организации синхронного обмена рекомендуется использовать модуль SPI (см. п. 2.4 «Модуль SPI»).
Изменение скорости обмена одним битом. Модули EUSART семейства PIC18 имеют возможность изменения скорости обмена с помощью переключения одного бита BRGH. Для изменения скорости обмена в PIC24F требуется конфигурация делителя тактового генератора.
2.6.3. Портирование типового приложения (передатчик)
Рассмотрим последовательность инициализации аппаратного модуля U(S)ART в режиме передачи для двух архитектур.
Семейство PIC18:
- Выбрать скорость обмена, настроив регистры SPBRGHx:SPBRGx. Выбрать диапазон скоростей, установив или сбросив биты BRGH и BRG16;
- Выбрать режим работы (синхронный/асинхронный), настроив бит SYNC, установить бит SPEN;
- Если используются прерывания – установить соответствующий бит разрешения TXxIE;
- Установить бит TX9, если планируется использование 9-битного обмена;
- Разрешить передачу, установив бит TXEN, после этого автоматически будет установлен бит TXxIF;
- Если используется 9-битный режим обмена, 9-й бит фрейма должен быть загружен в бит TX9D;
- Загрузить байт передаваемых данных в регистр TXREGx;
- Если используются прерывания, бит глобального разрешения прерываний GIE и бит разрешения прерываний от периферийных устройств PEIE должны быть установлены (регистр INTCON<7:6>).
Для семейства PIC24F:
- Настроить модуль UART – установить режим обмена (размер фрейма, четность, размер стопового бита), установить требуемую скорость обмена, сконфигурировав регистр UxBRG, сконфигурировать прерывание, если они будут использоваться в программе;
- Включить модуль UART;
- Включить передатчик, установив бит UTXEN;
- Загрузить данные в младший байт регистра UxTXREG. Данные будут автоматически перемещены в сдвиговый регистр передатчика;
- Альтернативным способом передачи данных является загрузка данных в регистр UxTXREG при сброшенном бите UTXEN. После установки бита UTXEN данные будут автоматически перемещены в сдвиговый регистр передатчика и будет включен тактовый генератор модуля;
- Прерывания передатчика настраиваются битами UTXISELx.
2.6.4. Портирование типового приложения (приемник)
Рассмотрим последовательность инициализации аппаратного модуля U(S)ART в режиме приема для двух архитектур.
Семейство PIC18:
- Выбрать скорость обмена, настроив регистры SPBRGHx:SPBRGx. Выбрать диапазон скоростей, установив или сбросив биты BRGH и BRG16;
- Выбрать режим работы (синхронный/асинхронный), настроив бит SYNC, установить бит SPEN;
- Если используются прерывания – установить соответствующий бит разрешения RCxIE;
- Установить бит RX9, если планируется использование 9-битного обмена;
- Разрешить прием, установив бит CREN;
- Флаг RCxIF будет установлен после завершения приема фрейма. Если установлен бит разрешения RCxIE, будет сгенерировано прерывание;
- Считать регистр RCSTAx для получения 9-го бита фрейма (если используется 9-битный режим приема) и флагов ошибок;
- Считать байт принятых данных из регистра RCREGx;
- Если обнаружена ошибка прима (ошибка фрейма или переполнение буфера) – сбросить бит разрешения приема CREN;
- Если используются прерывания, бит глобального разрешения прерываний GIE и бит разрешения прерываний от периферийных устройств PEIE должны быть установлены (регистр INTCON<7:6>)
Для семейства PIC24F:
- Настроить модуль UART – установить режим обмена (размер фрейма, четность, размер стопового бита), установить требуемую скорость обмена, сконфигурировав регистр UxBRG, сконфигурировать прерывание, если они будут использоваться в программе;
- Включить модуль UART;
- Прерывание будет сгенерировано в случае приема одного или нескольких байт данных, в зависимости он состояния URXISELx;
- Считать бит OERR для определения ошибки переполнения приемного буфера. Замечание: бит OERR должен быть сброшен программно;
- Считать данные из буфера приема UxRXREG.
2.6.5. Рекомендации по портированию приложения
При портировании приложения, использующего модуль UART, особое внимание следует уделить следующим рекомендациям.
Так как архитектуры PIC18 и PIC24F отличаются структурой конвейера выполнения инструкций (частота выполнения инструкций в PIC18 равна FCY = FOSC/4, в PIC24F – FCY = FOSC/2), необходимо пересчитать значения, используемые для конфигурации скорости обмена.
Для семейства PIC18 максимальная скорость обмена составляет FOSC/4, минимальная – FOSC/(64 * 65536). Для PIC24F максимальная скорость обмена составляет FCY/4, минимальная FCY/(4 * 65536). Если в системе используется несколько скоростей обмена, следует убедиться, что они попадают в допустимый диапазон.
Функции реализации 9-битного обмена должны быть изменены. Так как PIC18F – 8-битная архитектура, для сохранения 9-го бита фрейма используется отдельный бит в конфигурационном регистре. В PIC24F 9-битный обмен реализуется прямым считыванием из 16-битного регистра UxRXREG и записью в 16-битный регистр UxTXREG.
Калькулятор UART для AVR
Опубликовано пн, 06/04/2018 – 22:00 пользователем trol
Калькулятор скорости UART для AVR-микроконтроллеров. По умолчанию отображаются таблицы для основных популярных частот процессора и скоростей обмена. При желании эти параметры можно изменить.
Значения в таблицах подсвечены разными цветами в зависимости от отклонения реальной частоты передачи от желаемой: менее 0.1%, менее 0.5%, менее 1%, менее 2%, менее 3%, более 3%.
300 | 207 | 0x00CF | 300.48 | 0.2% | 416 | 0x01A0 | 299.76 | -0.1% |
600 | 103 | 0x0067 | 600.96 | 0.2% | 207 | 0x00CF | 600. 96 | 0.2% |
900 | 68 | 0x0044 | 905.8 | 0.6% | 138 | 0x008A | 899.28 | -0.1% |
1200 | 51 | 0x0033 | 1201.92 | 0.2% | 103 | 0x0067 | 1201.92 | 0.2% |
1800 | 34 | 0x0022 | 1785.71 | -0.8% | 68 | 0x0044 | 1811.59 | 0.6% |
2400 | 25 | 0x0019 | 2403.85 | 0.2% | 51 | 0x0033 | 2403.85 | 0.2% |
3600 | 16 | 0x0010 | 3676.47 | 2.1% | 34 | 0x0022 | 3571.43 | -0.8% |
4800 | 12 | 0x000C | 4807.69 | 0.2% | 25 | 0x0019 | 4807.69 | 0.2% |
9600 | 6 | 0x0006 | 8928.57 | -7% | 12 | 0x000C | 9615.38 | 0.2% |
14.4 K | 3 | 0x0003 | 15.625 K | 8.5% | 8 | 0x0008 | 13.889 K | -3.5% |
19.2 K | 2 | 0x0002 | 20.833 K | 8.5% | 6 | 0x0006 | 17.857 K | -7% |
28.8 K | 1 | 0x0001 | 31.25 K | 8.5% | 3 | 0x0003 | 31.25 K | 8.5% |
33.6 K | 1 | 0x0001 | 31.25 K | -7% | 3 | 0x0003 | 31.25 K | -7% |
38.4 K | 1 | 0x0001 | 31.25 K | -18.6% | 2 | 0x0002 | 41.667 K | 8.5% |
56 K | 0 | 0x0000 | 62.5 K | 11.6% | 1 | 0x0001 | 62.5 K | 11.6% |
57.6 K | 0 | 0x0000 | 62.5 K | 8.5% | 1 | 0x0001 | 62.5 K | 8.5% |
76.8 K | 0 | 0x0000 | 62.5 K | -18.6% | 1 | 0x0001 | 62.5 K | -18.6% |
115. 2 K | 0 | 0x0000 | 62.5 K | -45.7% | 0 | 0x0000 | 125 K | 8.5% |
128 K | 0 | 0x0000 | 62.5 K | -51.2% | 0 | 0x0000 | 125 K | -2.3% |
153.6 K | 0 | 0x0000 | 62.5 K | -59.3% | 0 | 0x0000 | 125 K | -18.6% |
230.4 K | 0 | 0x0000 | 62.5 K | -72.9% | 0 | 0x0000 | 125 K | -45.7% |
300 | 383 | 0x017F | 300 | 0% | 767 | 0x02FF | 300 | 0% |
600 | 191 | 0x00BF | 600 | 0% | 383 | 0x017F | 600 | 0% |
900 | 127 | 0x007F | 900 | 0% | 255 | 0x00FF | 900 | 0% |
1200 | 95 | 0x005F | 1200 | 0% | 191 | 0x00BF | 1200 | 0% |
1800 | 63 | 0x003F | 1800 | 0% | 127 | 0x007F | 1800 | 0% |
2400 | 47 | 0x002F | 2400 | 0% | 95 | 0x005F | 2400 | 0% |
3600 | 31 | 0x001F | 3600 | 0% | 63 | 0x003F | 3600 | 0% |
4800 | 23 | 0x0017 | 4800 | 0% | 47 | 0x002F | 4800 | 0% |
9600 | 11 | 0x000B | 9600 | 0% | 23 | 0x0017 | 9600 | 0% |
14.4 K | 7 | 0x0007 | 14.4 K | 0% | 15 | 0x000F | 14.4 K | 0% |
19.2 K | 5 | 0x0005 | 19.2 K | 0% | 11 | 0x000B | 19.2 K | 0% |
28.8 K | 3 | 0x0003 | 28.8 K | 0% | 7 | 0x0007 | 28. 8 K | 0% |
33.6 K | 2 | 0x0002 | 38.4 K | 14.3% | 6 | 0x0006 | 32.914 K | -2% |
38.4 K | 2 | 0x0002 | 38.4 K | 0% | 5 | 0x0005 | 38.4 K | 0% |
56 K | 1 | 0x0001 | 57.6 K | 2.9% | 3 | 0x0003 | 57.6 K | 2.9% |
57.6 K | 1 | 0x0001 | 57.6 K | 0% | 3 | 0x0003 | 57.6 K | 0% |
76.8 K | 1 | 0x0001 | 57.6 K | -25% | 2 | 0x0002 | 76.8 K | 0% |
115.2 K | 0 | 0x0000 | 115.2 K | 0% | 1 | 0x0001 | 115.2 K | 0% |
128 K | 0 | 0x0000 | 115.2 K | -10% | 1 | 0x0001 | 115.2 K | -10% |
153.6 K | 0 | 0x0000 | 115.2 K | -25% | 1 | 0x0001 | 115.2 K | -25% |
230.4 K | 0 | 0x0000 | 115.2 K | -50% | 0 | 0x0000 | 230.4 K | 0% |
300 | 416 | 0x01A0 | 299.76 | -0.1% | 832 | 0x0340 | 300.12 | 0% |
600 | 207 | 0x00CF | 600.96 | 0.2% | 416 | 0x01A0 | 599.52 | -0.1% |
900 | 138 | 0x008A | 899.28 | -0.1% | 277 | 0x0115 | 899.28 | -0.1% |
1200 | 103 | 0x0067 | 1201.92 | 0.2% | 207 | 0x00CF | 1201.92 | 0.2% |
1800 | 68 | 0x0044 | 1811.59 | 0.6% | 138 | 0x008A | 1798.56 | -0.1% |
2400 | 51 | 0x0033 | 2403.85 | 0.2% | 103 | 0x0067 | 2403.85 | 0. 2% |
3600 | 34 | 0x0022 | 3571.43 | -0.8% | 68 | 0x0044 | 3623.19 | 0.6% |
4800 | 25 | 0x0019 | 4807.69 | 0.2% | 51 | 0x0033 | 4807.69 | 0.2% |
9600 | 12 | 0x000C | 9615.38 | 0.2% | 25 | 0x0019 | 9615.38 | 0.2% |
14.4 K | 8 | 0x0008 | 13.889 K | -3.5% | 16 | 0x0010 | 14.706 K | 2.1% |
19.2 K | 6 | 0x0006 | 17.857 K | -7% | 12 | 0x000C | 19.231 K | 0.2% |
28.8 K | 3 | 0x0003 | 31.25 K | 8.5% | 8 | 0x0008 | 27.778 K | -3.5% |
33.6 K | 3 | 0x0003 | 31.25 K | -7% | 6 | 0x0006 | 35.714 K | 6.3% |
38.4 K | 2 | 0x0002 | 41.667 K | 8.5% | 6 | 0x0006 | 35.714 K | -7% |
56 K | 1 | 0x0001 | 62.5 K | 11.6% | 3 | 0x0003 | 62.5 K | 11.6% |
57.6 K | 1 | 0x0001 | 62.5 K | 8.5% | 3 | 0x0003 | 62.5 K | 8.5% |
76.8 K | 1 | 0x0001 | 62.5 K | -18.6% | 2 | 0x0002 | 83.333 K | 8.5% |
115.2 K | 0 | 0x0000 | 125 K | 8.5% | 1 | 0x0001 | 125 K | 8.5% |
128 K | 0 | 0x0000 | 125 K | -2.3% | 1 | 0x0001 | 125 K | -2.3% |
153.6 K | 0 | 0x0000 | 125 K | -18.6% | 1 | 0x0001 | 125 K | -18.6% |
230.4 K | 0 | 0x0000 | 125 K | -45.7% | 0 | 0x0000 | 250 K | 8.5% |
300 | 767 | 0x02FF | 300 | 0% | 1535 | 0x05FF | 300 | 0% |
600 | 383 | 0x017F | 600 | 0% | 767 | 0x02FF | 600 | 0% |
900 | 255 | 0x00FF | 900 | 0% | 511 | 0x01FF | 900 | 0% |
1200 | 191 | 0x00BF | 1200 | 0% | 383 | 0x017F | 1200 | 0% |
1800 | 127 | 0x007F | 1800 | 0% | 255 | 0x00FF | 1800 | 0% |
2400 | 95 | 0x005F | 2400 | 0% | 191 | 0x00BF | 2400 | 0% |
3600 | 63 | 0x003F | 3600 | 0% | 127 | 0x007F | 3600 | 0% |
4800 | 47 | 0x002F | 4800 | 0% | 95 | 0x005F | 4800 | 0% |
9600 | 23 | 0x0017 | 9600 | 0% | 47 | 0x002F | 9600 | 0% |
14. 4 K | 15 | 0x000F | 14.4 K | 0% | 31 | 0x001F | 14.4 K | 0% |
19.2 K | 11 | 0x000B | 19.2 K | 0% | 23 | 0x0017 | 19.2 K | 0% |
28.8 K | 7 | 0x0007 | 28.8 K | 0% | 15 | 0x000F | 28.8 K | 0% |
33.6 K | 6 | 0x0006 | 32.914 K | -2% | 13 | 0x000D | 32.914 K | -2% |
38.4 K | 5 | 0x0005 | 38.4 K | 0% | 11 | 0x000B | 38.4 K | 0% |
56 K | 3 | 0x0003 | 57.6 K | 2.9% | 7 | 0x0007 | 57.6 K | 2.9% |
57.6 K | 3 | 0x0003 | 57.6 K | 0% | 7 | 0x0007 | 57.6 K | 0% |
76.8 K | 2 | 0x0002 | 76.8 K | 0% | 5 | 0x0005 | 76.8 K | 0% |
115.2 K | 1 | 0x0001 | 115.2 K | 0% | 3 | 0x0003 | 115.2 K | 0% |
128 K | 1 | 0x0001 | 115.2 K | -10% | 3 | 0x0003 | 115.2 K | -10% |
153.6 K | 1 | 0x0001 | 115.2 K | -25% | 2 | 0x0002 | 153.6 K | 0% |
230.4 K | 0 | 0x0000 | 230.4 K | 0% | 1 | 0x0001 | 230.4 K | 0% |
300 | 832 | 0x0340 | 300.12 | 0% | 1666 | 0x0682 | 299.94 | 0% |
600 | 416 | 0x01A0 | 599.52 | -0.1% | 832 | 0x0340 | 600.24 | 0% |
900 | 277 | 0x0115 | 899.28 | -0.1% | 555 | 0x022B | 899.28 | -0.1% |
1200 | 207 | 0x00CF | 1201. 92 | 0.2% | 416 | 0x01A0 | 1199.04 | -0.1% |
1800 | 138 | 0x008A | 1798.56 | -0.1% | 277 | 0x0115 | 1798.56 | -0.1% |
2400 | 103 | 0x0067 | 2403.85 | 0.2% | 207 | 0x00CF | 2403.85 | 0.2% |
3600 | 68 | 0x0044 | 3623.19 | 0.6% | 138 | 0x008A | 3597.12 | -0.1% |
4800 | 51 | 0x0033 | 4807.69 | 0.2% | 103 | 0x0067 | 4807.69 | 0.2% |
9600 | 25 | 0x0019 | 9615.38 | 0.2% | 51 | 0x0033 | 9615.38 | 0.2% |
14.4 K | 16 | 0x0010 | 14.706 K | 2.1% | 34 | 0x0022 | 14.286 K | -0.8% |
19.2 K | 12 | 0x000C | 19.231 K | 0.2% | 25 | 0x0019 | 19.231 K | 0.2% |
28.8 K | 8 | 0x0008 | 27.778 K | -3.5% | 16 | 0x0010 | 29.412 K | 2.1% |
33.6 K | 6 | 0x0006 | 35.714 K | 6.3% | 14 | 0x000E | 33.333 K | -0.8% |
38.4 K | 6 | 0x0006 | 35.714 K | -7% | 12 | 0x000C | 38.462 K | 0.2% |
56 K | 3 | 0x0003 | 62.5 K | 11.6% | 8 | 0x0008 | 55.556 K | -0.8% |
57.6 K | 3 | 0x0003 | 62.5 K | 8.5% | 8 | 0x0008 | 55.556 K | -3.5% |
76.8 K | 2 | 0x0002 | 83.333 K | 8.5% | 6 | 0x0006 | 71.429 K | -7% |
115.2 K | 1 | 0x0001 | 125 K | 8.5% | 3 | 0x0003 | 125 K | 8.5% |
128 K | 1 | 0x0001 | 125 K | -2. 3% | 3 | 0x0003 | 125 K | -2.3% |
153.6 K | 1 | 0x0001 | 125 K | -18.6% | 2 | 0x0002 | 166.667 K | 8.5% |
230.4 K | 0 | 0x0000 | 250 K | 8.5% | 1 | 0x0001 | 250 K | 8.5% |
300 | 1535 | 0x05FF | 300 | 0% | 3071 | 0x0BFF | 300 | 0% |
600 | 767 | 0x02FF | 600 | 0% | 1535 | 0x05FF | 600 | 0% |
900 | 511 | 0x01FF | 900 | 0% | 1023 | 0x03FF | 900 | 0% |
1200 | 383 | 0x017F | 1200 | 0% | 767 | 0x02FF | 1200 | 0% |
1800 | 255 | 0x00FF | 1800 | 0% | 511 | 0x01FF | 1800 | 0% |
2400 | 191 | 0x00BF | 2400 | 0% | 383 | 0x017F | 2400 | 0% |
3600 | 127 | 0x007F | 3600 | 0% | 255 | 0x00FF | 3600 | 0% |
4800 | 95 | 0x005F | 4800 | 0% | 191 | 0x00BF | 4800 | 0% |
9600 | 47 | 0x002F | 9600 | 0% | 95 | 0x005F | 9600 | 0% |
14.4 K | 31 | 0x001F | 14.4 K | 0% | 63 | 0x003F | 14.4 K | 0% |
19.2 K | 23 | 0x0017 | 19.2 K | 0% | 47 | 0x002F | 19.2 K | 0% |
28.8 K | 15 | 0x000F | 28.8 K | 0% | 31 | 0x001F | 28.8 K | 0% |
33.6 K | 13 | 0x000D | 32.914 K | -2% | 26 | 0x001A | 34.133 K | 1.6% |
38.4 K | 11 | 0x000B | 38. 4 K | 0% | 23 | 0x0017 | 38.4 K | 0% |
56 K | 7 | 0x0007 | 57.6 K | 2.9% | 15 | 0x000F | 57.6 K | 2.9% |
57.6 K | 7 | 0x0007 | 57.6 K | 0% | 15 | 0x000F | 57.6 K | 0% |
76.8 K | 5 | 0x0005 | 76.8 K | 0% | 11 | 0x000B | 76.8 K | 0% |
115.2 K | 3 | 0x0003 | 115.2 K | 0% | 7 | 0x0007 | 115.2 K | 0% |
128 K | 3 | 0x0003 | 115.2 K | -10% | 6 | 0x0006 | 131.657 K | 2.9% |
153.6 K | 2 | 0x0002 | 153.6 K | 0% | 5 | 0x0005 | 153.6 K | 0% |
230.4 K | 1 | 0x0001 | 230.4 K | 0% | 3 | 0x0003 | 230.4 K | 0% |
300 | 1666 | 0x0682 | 299.94 | 0% | 3332 | 0x0D04 | 300.03 | 0% |
600 | 832 | 0x0340 | 600.24 | 0% | 1666 | 0x0682 | 599.88 | 0% |
900 | 555 | 0x022B | 899.28 | -0.1% | 1110 | 0x0456 | 900.09 | 0% |
1200 | 416 | 0x01A0 | 1199.04 | -0.1% | 832 | 0x0340 | 1200.48 | 0% |
1800 | 277 | 0x0115 | 1798.56 | -0.1% | 555 | 0x022B | 1798.56 | -0.1% |
2400 | 207 | 0x00CF | 2403.85 | 0.2% | 416 | 0x01A0 | 2398.08 | -0.1% |
3600 | 138 | 0x008A | 3597.12 | -0.1% | 277 | 0x0115 | 3597.12 | -0.1% |
4800 | 103 | 0x0067 | 4807.69 | 0. 2% | 207 | 0x00CF | 4807.69 | 0.2% |
9600 | 51 | 0x0033 | 9615.38 | 0.2% | 103 | 0x0067 | 9615.38 | 0.2% |
14.4 K | 34 | 0x0022 | 14.286 K | -0.8% | 68 | 0x0044 | 14.493 K | 0.6% |
19.2 K | 25 | 0x0019 | 19.231 K | 0.2% | 51 | 0x0033 | 19.231 K | 0.2% |
28.8 K | 16 | 0x0010 | 29.412 K | 2.1% | 34 | 0x0022 | 28.571 K | -0.8% |
33.6 K | 14 | 0x000E | 33.333 K | -0.8% | 29 | 0x001D | 33.333 K | -0.8% |
38.4 K | 12 | 0x000C | 38.462 K | 0.2% | 25 | 0x0019 | 38.462 K | 0.2% |
56 K | 8 | 0x0008 | 55.556 K | -0.8% | 17 | 0x0011 | 55.556 K | -0.8% |
57.6 K | 8 | 0x0008 | 55.556 K | -3.5% | 16 | 0x0010 | 58.824 K | 2.1% |
76.8 K | 6 | 0x0006 | 71.429 K | -7% | 12 | 0x000C | 76.923 K | 0.2% |
115.2 K | 3 | 0x0003 | 125 K | 8.5% | 8 | 0x0008 | 111.111 K | -3.5% |
128 K | 3 | 0x0003 | 125 K | -2.3% | 7 | 0x0007 | 125 K | -2.3% |
153.6 K | 2 | 0x0002 | 166.667 K | 8.5% | 6 | 0x0006 | 142.857 K | -7% |
230.4 K | 1 | 0x0001 | 250 K | 8.5% | 3 | 0x0003 | 250 K | 8.5% |
300 | 2082 | 0x0822 | 300.05 | 0% | 4166 | 0x1046 | 299.98 | 0% |
600 | 1041 | 0x0411 | 599. 81 | 0% | 2082 | 0x0822 | 600.1 | 0% |
900 | 693 | 0x02B5 | 900.58 | 0.1% | 1388 | 0x056C | 899.93 | 0% |
1200 | 520 | 0x0208 | 1199.62 | 0% | 1041 | 0x0411 | 1199.62 | 0% |
1800 | 346 | 0x015A | 1801.15 | 0.1% | 693 | 0x02B5 | 1801.15 | 0.1% |
2400 | 259 | 0x0103 | 2403.85 | 0.2% | 520 | 0x0208 | 2399.23 | 0% |
3600 | 173 | 0x00AD | 3591.95 | -0.2% | 346 | 0x015A | 3602.31 | 0.1% |
4800 | 129 | 0x0081 | 4807.69 | 0.2% | 259 | 0x0103 | 4807.69 | 0.2% |
9600 | 64 | 0x0040 | 9615.38 | 0.2% | 129 | 0x0081 | 9615.38 | 0.2% |
14.4 K | 42 | 0x002A | 14.535 K | 0.9% | 86 | 0x0056 | 14.368 K | -0.2% |
19.2 K | 32 | 0x0020 | 18.939 K | -1.4% | 64 | 0x0040 | 19.231 K | 0.2% |
28.8 K | 21 | 0x0015 | 28.409 K | -1.4% | 42 | 0x002A | 29.07 K | 0.9% |
33.6 K | 18 | 0x0012 | 32.895 K | -2.1% | 36 | 0x0024 | 33.784 K | 0.5% |
38.4 K | 15 | 0x000F | 39.063 K | 1.7% | 32 | 0x0020 | 37.879 K | -1.4% |
56 K | 10 | 0x000A | 56.818 K | 1.5% | 21 | 0x0015 | 56.818 K | 1.5% |
57.6 K | 10 | 0x000A | 56.818 K | -1.4% | 21 | 0x0015 | 56.818 K | -1.4% |
76.8 K | 7 | 0x0007 | 78. 125 K | 1.7% | 15 | 0x000F | 78.125 K | 1.7% |
115.2 K | 4 | 0x0004 | 125 K | 8.5% | 10 | 0x000A | 113.636 K | -1.4% |
128 K | 4 | 0x0004 | 125 K | -2.3% | 9 | 0x0009 | 125 K | -2.3% |
153.6 K | 3 | 0x0003 | 156.25 K | 1.7% | 7 | 0x0007 | 156.25 K | 1.7% |
230.4 K | 2 | 0x0002 | 208.333 K | -9.6% | 4 | 0x0004 | 250 K | 8.5% |
300 | 2303 | 0x08FF | 300 | 0% | 4607 | 0x11FF | 300 | 0% |
600 | 1151 | 0x047F | 600 | 0% | 2303 | 0x08FF | 600 | 0% |
900 | 767 | 0x02FF | 900 | 0% | 1535 | 0x05FF | 900 | 0% |
1200 | 575 | 0x023F | 1200 | 0% | 1151 | 0x047F | 1200 | 0% |
1800 | 383 | 0x017F | 1800 | 0% | 767 | 0x02FF | 1800 | 0% |
2400 | 287 | 0x011F | 2400 | 0% | 575 | 0x023F | 2400 | 0% |
3600 | 191 | 0x00BF | 3600 | 0% | 383 | 0x017F | 3600 | 0% |
4800 | 143 | 0x008F | 4800 | 0% | 287 | 0x011F | 4800 | 0% |
9600 | 71 | 0x0047 | 9600 | 0% | 143 | 0x008F | 9600 | 0% |
14.4 K | 47 | 0x002F | 14.4 K | 0% | 95 | 0x005F | 14.4 K | 0% |
19.2 K | 35 | 0x0023 | 19.2 K | 0% | 71 | 0x0047 | 19.2 K | 0% |
28. 8 K | 23 | 0x0017 | 28.8 K | 0% | 47 | 0x002F | 28.8 K | 0% |
33.6 K | 20 | 0x0014 | 32.914 K | -2% | 40 | 0x0028 | 33.717 K | 0.3% |
38.4 K | 17 | 0x0011 | 38.4 K | 0% | 35 | 0x0023 | 38.4 K | 0% |
56 K | 11 | 0x000B | 57.6 K | 2.9% | 24 | 0x0018 | 55.296 K | -1.3% |
57.6 K | 11 | 0x000B | 57.6 K | 0% | 23 | 0x0017 | 57.6 K | 0% |
76.8 K | 8 | 0x0008 | 76.8 K | 0% | 17 | 0x0011 | 76.8 K | 0% |
115.2 K | 5 | 0x0005 | 115.2 K | 0% | 11 | 0x000B | 115.2 K | 0% |
128 K | 4 | 0x0004 | 138.24 K | 8% | 10 | 0x000A | 125.673 K | -1.8% |
153.6 K | 4 | 0x0004 | 138.24 K | -10% | 8 | 0x0008 | 153.6 K | 0% |
230.4 K | 2 | 0x0002 | 230.4 K | 0% | 5 | 0x0005 | 230.4 K | 0% |
300 | 3071 | 0x0BFF | 300 | 0% | 6143 | 0x17FF | 300 | 0% |
600 | 1535 | 0x05FF | 600 | 0% | 3071 | 0x0BFF | 600 | 0% |
900 | 1023 | 0x03FF | 900 | 0% | 2047 | 0x07FF | 900 | 0% |
1200 | 767 | 0x02FF | 1200 | 0% | 1535 | 0x05FF | 1200 | 0% |
1800 | 511 | 0x01FF | 1800 | 0% | 1023 | 0x03FF | 1800 | 0% |
2400 | 383 | 0x017F | 2400 | 0% | 767 | 0x02FF | 2400 | 0% |
3600 | 255 | 0x00FF | 3600 | 0% | 511 | 0x01FF | 3600 | 0% |
4800 | 191 | 0x00BF | 4800 | 0% | 383 | 0x017F | 4800 | 0% |
9600 | 95 | 0x005F | 9600 | 0% | 191 | 0x00BF | 9600 | 0% |
14. 4 K | 63 | 0x003F | 14.4 K | 0% | 127 | 0x007F | 14.4 K | 0% |
19.2 K | 47 | 0x002F | 19.2 K | 0% | 95 | 0x005F | 19.2 K | 0% |
28.8 K | 31 | 0x001F | 28.8 K | 0% | 63 | 0x003F | 28.8 K | 0% |
33.6 K | 26 | 0x001A | 34.133 K | 1.6% | 54 | 0x0036 | 33.513 K | -0.3% |
38.4 K | 23 | 0x0017 | 38.4 K | 0% | 47 | 0x002F | 38.4 K | 0% |
56 K | 15 | 0x000F | 57.6 K | 2.9% | 32 | 0x0020 | 55.855 K | -0.3% |
57.6 K | 15 | 0x000F | 57.6 K | 0% | 31 | 0x001F | 57.6 K | 0% |
76.8 K | 11 | 0x000B | 76.8 K | 0% | 23 | 0x0017 | 76.8 K | 0% |
115.2 K | 7 | 0x0007 | 115.2 K | 0% | 15 | 0x000F | 115.2 K | 0% |
128 K | 6 | 0x0006 | 131.657 K | 2.9% | 13 | 0x000D | 131.657 K | 2.9% |
153.6 K | 5 | 0x0005 | 153.6 K | 0% | 11 | 0x000B | 153.6 K | 0% |
230.4 K | 3 | 0x0003 | 230.4 K | 0% | 7 | 0x0007 | 230.4 K | 0% |
300 | 3332 | 0x0D04 | 300.03 | 0% | 6666 | 0x1A0A | 299.99 | 0% |
600 | 1666 | 0x0682 | 599.88 | 0% | 3332 | 0x0D04 | 600.06 | 0% |
900 | 1110 | 0x0456 | 900.09 | 0% | 2221 | 0x08AD | 900.09 | 0% |
1200 | 832 | 0x0340 | 1200. 48 | 0% | 1666 | 0x0682 | 1199.76 | 0% |
1800 | 555 | 0x022B | 1798.56 | -0.1% | 1110 | 0x0456 | 1800.18 | 0% |
2400 | 416 | 0x01A0 | 2398.08 | -0.1% | 832 | 0x0340 | 2400.96 | 0% |
3600 | 277 | 0x0115 | 3597.12 | -0.1% | 555 | 0x022B | 3597.12 | -0.1% |
4800 | 207 | 0x00CF | 4807.69 | 0.2% | 416 | 0x01A0 | 4796.16 | -0.1% |
9600 | 103 | 0x0067 | 9615.38 | 0.2% | 207 | 0x00CF | 9615.38 | 0.2% |
14.4 K | 68 | 0x0044 | 14.493 K | 0.6% | 138 | 0x008A | 14.388 K | -0.1% |
19.2 K | 51 | 0x0033 | 19.231 K | 0.2% | 103 | 0x0067 | 19.231 K | 0.2% |
28.8 K | 34 | 0x0022 | 28.571 K | -0.8% | 68 | 0x0044 | 28.986 K | 0.6% |
33.6 K | 29 | 0x001D | 33.333 K | -0.8% | 59 | 0x003B | 33.333 K | -0.8% |
38.4 K | 25 | 0x0019 | 38.462 K | 0.2% | 51 | 0x0033 | 38.462 K | 0.2% |
56 K | 17 | 0x0011 | 55.556 K | -0.8% | 35 | 0x0023 | 55.556 K | -0.8% |
57.6 K | 16 | 0x0010 | 58.824 K | 2.1% | 34 | 0x0022 | 57.143 K | -0.8% |
76.8 K | 12 | 0x000C | 76.923 K | 0.2% | 25 | 0x0019 | 76.923 K | 0.2% |
115.2 K | 8 | 0x0008 | 111.111 K | -3.5% | 16 | 0x0010 | 117.647 K | 2.1% |
128 K | 7 | 0x0007 | 125 K | -2. 3% | 15 | 0x000F | 125 K | -2.3% |
153.6 K | 6 | 0x0006 | 142.857 K | -7% | 12 | 0x000C | 153.846 K | 0.2% |
230.4 K | 3 | 0x0003 | 250 K | 8.5% | 8 | 0x0008 | 222.222 K | -3.5% |
300 | 3839 | 0x0EFF | 300 | 0% | 7679 | 0x1DFF | 300 | 0% |
600 | 1919 | 0x077F | 600 | 0% | 3839 | 0x0EFF | 600 | 0% |
900 | 1279 | 0x04FF | 900 | 0% | 2559 | 0x09FF | 900 | 0% |
1200 | 959 | 0x03BF | 1200 | 0% | 1919 | 0x077F | 1200 | 0% |
1800 | 639 | 0x027F | 1800 | 0% | 1279 | 0x04FF | 1800 | 0% |
2400 | 479 | 0x01DF | 2400 | 0% | 959 | 0x03BF | 2400 | 0% |
3600 | 319 | 0x013F | 3600 | 0% | 639 | 0x027F | 3600 | 0% |
4800 | 239 | 0x00EF | 4800 | 0% | 479 | 0x01DF | 4800 | 0% |
9600 | 119 | 0x0077 | 9600 | 0% | 239 | 0x00EF | 9600 | 0% |
14.4 K | 79 | 0x004F | 14.4 K | 0% | 159 | 0x009F | 14.4 K | 0% |
19.2 K | 59 | 0x003B | 19.2 K | 0% | 119 | 0x0077 | 19.2 K | 0% |
28.8 K | 39 | 0x0027 | 28.8 K | 0% | 79 | 0x004F | 28.8 K | 0% |
33.6 K | 33 | 0x0021 | 33.882 K | 0.8% | 68 | 0x0044 | 33.391 K | -0.6% |
38. 4 K | 29 | 0x001D | 38.4 K | 0% | 59 | 0x003B | 38.4 K | 0% |
56 K | 20 | 0x0014 | 54.857 K | -2% | 40 | 0x0028 | 56.195 K | 0.3% |
57.6 K | 19 | 0x0013 | 57.6 K | 0% | 39 | 0x0027 | 57.6 K | 0% |
76.8 K | 14 | 0x000E | 76.8 K | 0% | 29 | 0x001D | 76.8 K | 0% |
115.2 K | 9 | 0x0009 | 115.2 K | 0% | 19 | 0x0013 | 115.2 K | 0% |
128 K | 8 | 0x0008 | 128 K | 0% | 17 | 0x0011 | 128 K | 0% |
153.6 K | 7 | 0x0007 | 144 K | -6.3% | 14 | 0x000E | 153.6 K | 0% |
230.4 K | 4 | 0x0004 | 230.4 K | 0% | 9 | 0x0009 | 230.4 K | 0% |
300 | 4166 | 0x1046 | 299.98 | 0% | 8332 | 0x208C | 300.01 | 0% |
600 | 2082 | 0x0822 | 600.1 | 0% | 4166 | 0x1046 | 599.95 | 0% |
900 | 1388 | 0x056C | 899.93 | 0% | 2777 | 0x0AD9 | 899.93 | 0% |
1200 | 1041 | 0x0411 | 1199.62 | 0% | 2082 | 0x0822 | 1200.19 | 0% |
1800 | 693 | 0x02B5 | 1801.15 | 0.1% | 1388 | 0x056C | 1799.86 | 0% |
2400 | 520 | 0x0208 | 2399.23 | 0% | 1041 | 0x0411 | 2399.23 | 0% |
3600 | 346 | 0x015A | 3602.31 | 0.1% | 693 | 0x02B5 | 3602.31 | 0.1% |
4800 | 259 | 0x0103 | 4807. 69 | 0.2% | 520 | 0x0208 | 4798.46 | 0% |
9600 | 129 | 0x0081 | 9615.38 | 0.2% | 259 | 0x0103 | 9615.38 | 0.2% |
14.4 K | 86 | 0x0056 | 14.368 K | -0.2% | 173 | 0x00AD | 14.368 K | -0.2% |
19.2 K | 64 | 0x0040 | 19.231 K | 0.2% | 129 | 0x0081 | 19.231 K | 0.2% |
28.8 K | 42 | 0x002A | 29.07 K | 0.9% | 86 | 0x0056 | 28.736 K | -0.2% |
33.6 K | 36 | 0x0024 | 33.784 K | 0.5% | 73 | 0x0049 | 33.784 K | 0.5% |
38.4 K | 32 | 0x0020 | 37.879 K | -1.4% | 64 | 0x0040 | 38.462 K | 0.2% |
56 K | 21 | 0x0015 | 56.818 K | 1.5% | 44 | 0x002C | 55.556 K | -0.8% |
57.6 K | 21 | 0x0015 | 56.818 K | -1.4% | 42 | 0x002A | 58.14 K | 0.9% |
76.8 K | 15 | 0x000F | 78.125 K | 1.7% | 32 | 0x0020 | 75.758 K | -1.4% |
115.2 K | 10 | 0x000A | 113.636 K | -1.4% | 21 | 0x0015 | 113.636 K | -1.4% |
128 K | 9 | 0x0009 | 125 K | -2.3% | 19 | 0x0013 | 125 K | -2.3% |
153.6 K | 7 | 0x0007 | 156.25 K | 1.7% | 15 | 0x000F | 156.25 K | 1.7% |
230.4 K | 4 | 0x0004 | 250 K | 8.5% | 10 | 0x000A | 227.273 K | -1.4% |
Рейтинг:
Голосов еще нет
Инфракрасный протокол связи ? IrDA
Летом 1993 года компания Hewlett-Packard организовала общепромышленное совещание, чтобы обсудить будущее ИК (инфракрасный) передачи данных. Многообразие несовместимых стандартов было печальной реальностью, причинявшей массу неудобств всем от того, что устройства от разных производителей были несовместимы. Телевизоры, видеомагнитофоны, другая бытовая техника с ИК управлением сегодня встречается на “каждом углу”, однако в них используются несовместимые физические и программные интерфейсы. Целью совещания было обсуждение путей, которыми промышленность может пойти к общему стандарту, способному совместимость всех устройств, использующих ИК порт. На совещании был сформирован консорциум всех ведущих компаний, названных Ассоциацией инфракрасной передачи данных и вскоре (в июне 1994 года) была объявлена первая одноименная версия стандарта, включающая физический и программный протоколы — IrDA 1.0. Текущая версия — 1.1. В настоящей статье будут описаны основные моменты действующего ныне стандарта.
Итак, протокол IrDA (Infra red Data Assotiation) позволяет соединяться с периферийным оборудованием без кабеля при помощи ИК-излучения с длиной волны 880nm. Порт IrDA позволяет устанавливать связь на коротком расстоянии до 1 метра в режиме точка-точка. IrDA намерено не пытался создавать локальную сеть на основе ИК-излучения, поскольку сетевые интерфейсы очень сложны и требуют большой мощности, а в цели IrDA входили низкое потребление и экономичность. Интерфейс IrDA использует узкий ИК-диапазон (850–900 nm с 880nm “пиком”) с малой мощностью потребления, что позволяет создать недорогую аппаратуру и не требует сертификации FCC (Федеральной Комиссии по Связи).
Устройство инфракрасного интерфейса подразделяется на два основных блока: преобразователь (модули приемника-детектора и диода с управляющей электроникой) и кодер-декодер. Блоки обмениваются данными по электрическому интерфейсу, в котором в том же виде транслируются через оптическое соединение, за исключением того, что здесь они пакуются в кадры простого формата — данные передаются 10bit символами, с 8bit данных, одним старт-битом в начале и одним стоп-битом в конце данных.
Сам порт IrDA основан на архитектуре коммуникационного СОМ-порта ПК, который использует универсальный асинхронный приемо-передатчик UART (Universal Asynchronous Receiver Transmitter) и работает со скоростью передачи данных 2400–115200 bps.
Связь в IrDA полудуплексная, т.к. передаваемый ИК-луч неизбежно засвечивает соседний PIN-диодный усилитель приемника. Воздушный промежуток между устройствами позволяет принять ИК-энергию только от одного источника в данный момент.
Рассмотрим физические основы IrDA. Передающую часть. Байт, который требуется передать, посылается в блок UART из CPU командой записи ввода-вывода. UART добавляет старт-стоп биты и передает символ последовательно, начиная с младшего значения бита. Стандарт IrDA требует, чтобы все последовательные биты кодировались таким образом: логический “0” передается одиночным ИК-импульсом длиной от 1.6m s до 3/16 периода передачи битовой ячейки, а логическая “1” передается как отсутствие ИК-импульса. Минимальная мощность потребления гарантируется при фиксированной длине импульса 1.6m s.
По окончании кодирования битов необходимо возбудить один или несколько ИК-светодиодов током соответствующего уровня, чтобы выработать ИК-импульс требуемой интенсивности. Стандарт IrDA требует, чтобы интенсивность излучения в конусе ± 30° была в диапазоне 40–50 m W/Sr, причем ИК-светодиод должен иметь длину волны 880nm, как уже отмечалось ранее. Радиальная чувствительность приемника и длины связи диктуются, исходя из требований самой спецификации IrDA.
Приемная часть. Переданные ИК-импульсы поступают на PIN-диод, преобразующий импульсы света в токовые импульсы, которые усиливаются, фильтруются и сравниваются с пороговым уровнем для преобразования в логические уровни. ИК-импульс в активном состоянии генерирует “0”, при отсутствии света генерируется логическая “1”. Протокол IrDA требует, чтобы приемник точно улавливал ИК-импульсы мощностью от 4m W/sm2 до 500mW/sm2 в угловом диапазоне ± 15°.
Для ИК-излучения cуществует два источника интерференции (помех), основным из которых является солнечный свет, но к счастью в нем преобладает постоянная составляющая. Правильно спроектированные приемники должны компенсировать большие постоянные токи через PIN-диод. Другой источник помех — флуорисцентные лампы — часто применяются для общего освещения. Хорошо спроектированные приемники должны иметь полосовой фильтр для снижения влияния таких источников помех. Вероятность ошибок связи будет зависеть от правильного выбора мощности передатчика и чувствительности приемника. В IrDA выбраны значения, гарантирующие, что описанные выше помехи не будут влиять на качество связи.
Стандарт IrDA включает в себя стек протоколов трех согласованных обязательных уровней: IrPL (Physical Layer), IrLAP (Link Access Protocol) и IrLMP (Link Management Protocol).
Физический уровень (Physical Layer). Спецификация этого протокола устанавливает стандарты для Ir-трансиверов, методов модуляции и схемы кодирования/декодирования, а также ряд физических параметров. Стандарт предусматривает использование длины волны в диапазоне 850–900 nm. Минимальная и максимальная интенсивность передатчика (как уже говорилось) составляет 40–50 m W/Sr соответственно внутри 30° конуса. Для стандарта IrDA (скорость передачи данных 115.2Kbps) схема кодирования аналогична используемой в традиционной UART: бит старта (“0”) и стоп-бит (“1”) добавляются перед и после каждого байта соответственно. Но вместо схемы NZR (Non-Return to Zero) используется кодировка, подобная RZ (Return to Zero), т.е. двоичный “0” кодируется единичным импульсом, а “1” — его отсутствием. Кадры отделяются друг от друга байтами Escape-последовательности, содержащимися в теле самого кадра. Для определения ошибок (EDt — Error Detection) используется 16bit циклическая контрольная сумма. Например, уже в стандарте IrDA 1.1 для протокола обмена 1.152Mbps (синхронизация выполняется как в протоколе HDLP — High-level Data Link Protocol высокого уровня) и 4Mbps (использование 4-PPM — Pulse-Phase Modulation) старт-бит и стоп-бит не применяются. Так, фреймы, получаемые от более высокоуровневого протокола IrLAP, вкладываются в поле данных фреймов SIR, согласно используемому методу кодирования. Стандарт не содержит обязательных вариантов реализации этой процедуры и допускает варьирование алгоритмов в зависимости от возможностей конкретного оборудования. В зависимости от скорости соединения предлагаются методы кодирования: асинхронный (ASYNC, 9600–115200 bps), синхронный (HDLC, 0.576–1.152 Mbps) и 4-PPM (4Mbps).
Программный протокол. Он включает в себя: IrLAP (Link Access Protocol), занимающийся разбиением данных на блоки, контролем ошибок и другими функциями низкого уровня, и IrLMP (Link Management Protocol), позволяющий по одной ИК-линии обмениваться данными между несколькими приложениями. Данный протокол базируется на существующих стандартах асинхронной полудуплексной передачи данных HDLC и SDLC. Инфракрасная технология поддерживает только однонаправленную передачу информации, поэтому, в следствие полудуплексной природы SIR, возникла архитектура с одним главным (первичным) и множественными подчиненными (вторичными) устройствами. Схема обращения устройств представляет собой обычный протокол обмена данными, где есть фазы запросов (Request) и ответов (Response). Так, первичное устройство отвечает за организацию соединения, обработку ошибок, и посланные им фреймы называются управляющими (Command Frames), а пакеты вторичных устройств именуются ответными (Response Frames). Обмен информацией идет только с первичным устройством, которое всегда выступает инициатором соединения, однако его роль может играть любое из устройств, поддерживающих необходимые для этого функции. По желанию может быть включен протокол транспортного уровня, позволяющий осуществлять контроль передачи между приложениями в случае одновременной работы нескольких приложений на одной физической линии. Для разных уровней имеется три интерфейса. Служебные примитивы уровня LM-SVC позволяют одному из устройств IrDA узнать какие сервис и протоколы зарегистрированы на другом устройстве. Примитивы доступа к уровню M-SVC управляют режимом связи, открытием и закрытием независимых соединений между клиентами, а так же отправкой и приемом данных. Интерфейс L-SVC дает доступ к функциям протокола IrLAP.
Устройства, соответствующие стандарту IrDA, перед началом передачи должны в первую очередь попытался выявить (прочитать) нет ли в ближайшей окрестности активности в ИК-диапазоне, установить не ведется ли какая-либо передача в пределах его досягаемости. Если такая активность обнаружена, то программе, выдающей запрос, посылается соответствующее сообщение, а сам блок откладывает передачу. Поскольку оба соединяющихся устройства могут быть компьютерами (а не компьютер и принтер, или клавиатура, мышь), то любое из них может быть ведущим. Выбор зависит от того, какое устройство первым проявит инициативу.
Каждое устройство имеет 32bit адрес, вырабатываемый случайным образом при установлении соединения. Каждому кадру в пределах соединения ведущее устройство при старте присваивает 7bit-адрес соединения. Для возможных, но нежелательных случаев, когда два устройства имеют одинаковый адрес, предусмотрен такой механизм, когда ведущее устройство дает команду всем подчиненным устройствам изменить их адреса. В процессе установления связи два устройства “договариваются” о максимальной скорости, с которой они оба могут работать. Все первичные передачи, выполняемые до фазы переговоров, по умолчанию ведутся на скорости 9,6 Kbps.
Максимальный квант передачи может быть равен 100, 200 или 500 ms. Он представляет собой максимальное время, в течение которого устройство передает данные до того, как перейдет к прослушиванию подтверждения приема и зависит от скорости передачи, емкости буфера в принимающем устройстве. Минимальная длительность передачи определяется неспособностью передающего устройства перейти к приему данных сразу после выдачи последнего бита. Дело в том, что усилитель PIN-диода в передающем устройстве входит в состояние насыщения от собственной передачи. Время восстановления приемника — переменная величина, составляющая 0.001–10 ms. Этот параметр для данного устройства должен быть заранее известен и учитывается в фазе переговоров об установлении соединения. Процедуры расширенного восстановления включают в себя функцию сброса, которая прерывает связь, но потом восстанавливает активное состояние с параметрами соединения, используемые по умолчанию.
Стандартом предусмотрено два основных состояния: NRM (Normal Response Mode) и NDM (Normal Disconnect Mode). Первое — это состояние соединения с распределенными ролями первичного и вторичных устройств. Второе предусматривает функции детектирования доступных устройств, сбор информации о них, разрешение адресных конфликтов, а также позволяет передавать данные широковещательно, без установления соединения. В протоколе IrLAP используется три типа кадров по аналогии с HDLC. Поле данных присутствует только у первого и последнего вида фреймов, оно не ограничено по длине, но число бит в нем должно быть кратно 8. Ненумерованные (U-кадры) используются для установления связи: операции соединения и разъединения, информирования об ошибках и передачи данных, если нет необходимости в нумерации последовательностей. Информационные (I-кадры) используются для передачи информации и предназначены для передачи данных. Их командное поле содержит номер фрейма в последовательности, помогающей принимающему устройству отслеживать нарушения очередности. Нумерация организована так, что служит одновременно средством подтверждения приема: S- и I-фреймы могут нести номер пакета, который ожидается на входе устройства-отправителя. Счетчик позволяет идентифицировать только 8 фреймов, таким образом, номер следующего ожидаемого приемником пакета может высылаться не с каждым фреймом, а только по получении нескольких промежуточных пакетов. Величина, определяющая их количество, называется размером окна. Четвертый бит контрольного поля у фрейма, сгенерированного первичным устройством, означает запрос данных, а в ответном фрейме он играет роль конечного бита, сигнализирующего о завершении передачи. Супервизорные (S-кадры) используются для функций handshaking (процедура договора устройств о параметрах синхронизации).
Договариваясь о соединении, устройства обмениваются информацией о скорости, максимальной и минимальной длительности цикла, максимальной величине фрейма, размере окна, количестве дополнительных флагов BOF (Beginning Of Frame) и пороговом времени разрыва соединения (промежуток, в течение которого не было принято ни одного корректного фрейма). Под максимальным циклом (maximum turn-around time) подразумевается отрезок времени, по истечении которого устройство должно установить в своем фрейме конечный бит, а под минимальным — длительность паузы, начиная с момента отсылки последнего байта последнего фрейма, запрошенного передающим устройством, чтобы подготовиться к приему данных. BOF выполняет роль задержки перед посылкой очередного фрейма устройствам с большей задержкой. Предусмотрена команда смены ролей XCHG, позволяющая передавать право называться первичным устройством, как эстафету. Для проверки правильности передачи фрейма к нему в конце дописывается поле FCS (Frame Check Sequence), которое содержит контрольную сумму формата CRC-CCITT.
Протокол IrLAP устанавливает правила доступа к ИК-среде, процедуры открытия канала, согласование абонентов сети, обмена информацией и т.д. Хотя IrLAP и обязательный уровень IrDA, но не все его особенности являются таковыми. Любая станция, не принимающая в данный момент времени участия в обмене, перед тем как начать передачу, должна прослушивать канал не менее 500ms, чтобы убедиться в отсутствии трафика. С другой стороны, станция, участвующая в обмене, должна вести передачу не более 500ms. Доступ к среде передачи регулируется посредством специального бита PF (Poll/Final), который устанавливается в теле кадра и выполняет функции, аналогичные маркеру. IrLAP допускает передачи без установления предварительного соединения. По своей природе такая передача является широковещательной и не требует получения подтверждения станции получателя. Процедура открытия канала в этом случае предусматривает обмен идентификационной информацией (ID). Инициатор широковещательного обмена передает ID предопределенное количество раз и прослушивает канал в интервалах между ссылками (слот, Slot). Станция-получатель случайным образом выбирает слот и посылает в ответ свой ID. При обнаружении коллизии процедура повторяется и применяется для согласования операционных параметров станций (скорость посылки бит, максимальная длина пакета). При установлении соединения обмен данными, объем которых не должен превышать 64 байта, осуществляется со скоростью 9.6Kbps. После того, как соединение установлено, скорость обмена и величина пакета данных могут быть по “договоренности” увеличены до максимальных. Кроме пакетов с пользовательскими данными, в обмене участвуют специальные, служащие для управления потоком, коррекции ошибок и передачи маркера. Связь может осуществляться в режиме “1:1” или “1:n”. В процессе обмена одна станция является первичной, а остальные — вторичными. Помимо описанных процедур существуют и другие: разрешение конфликтов адресов, изменение роли станции “первичная-вторичная” и т.д.
Протокол управления каналом IrLMP является обязательным, однако его некоторые особенности могут быть опциональны. Каждое устройство IrDA содержит таблицу сервисов и протоколов, доступных в настоящий момент. Эта информация может запрашиваться у других устройств. Мультиплексор администратора соединений и его схема управления позволяют нескольким приложениям обмениваться данными по одному физическому соединению. Протокол IrLMP содержит два компонента: LM-IAS (Link Management Information Access Service) и LM-MUX (Link Management MUltipleXed). LM-IAS управляет информационной базой так, что станции могут запросить, какие службы предоставляются. Эта информация храниться как ряд объектов, с каждым из которых связан набор атрибутов. Например, Device является обязательным и имеет атрибуты DeviceName, IrLMPSupport (номер версии протокола, поддержка ISA и MUX). LM-MUX выполняет мультиплексирование каналов поверх одного соединения, устанавливаемого протоколом IrLAP. С этой целью в Ir-станции определяется множество точек доступа канала — LSAP (Link Service Access Point) — каждая с уникальным селектором. Таким образом каждое из LSAP-соединений определяет логически различные информационные потоки. Протокол LM-MUX обеспечивает передачу данных между точками доступа как внутри одной, так и между другими станциями. Он может работать в одном из двух режимах: эксклюзивном (активизируется только одно соединение LSAP) и мультиплексивном (несколько соединений LSAP могут разделять один канал IrLAP). В этом случае управление потоком должно быть обеспечено протоколами верхнего уровня или непосредственно приложением. Итак, IrLMP функционирует в двух режимах: мультиплексирования и эксклюзивном. Первый позволяет разделять одно физическое соединение нескольким задачам, второй отдает все ресурсы одному-единственному приложению. Каждое виртуальное соединение представлено своей LSAP, таким образом, связь происходит на уровне двух LSAP (LSAP Connection). Также предусмотрено три варианта доступа: с установлением предварительного соединения, без установления предварительного соединения (Сonnectionless) и режим сбора информации о возможностях, сервисах и приложениях удаленного устройства (XID_Discovery).
IrDA TP (Transport Protocol) работает над использованием в качестве транспортного протокола ISO-8073. Его применение позволяет пропускать по линии IrDA несколько потоков данных, с собственным управлением для каждого. Но использование этого протокола не обязательно. TinyTP (Tiny Transport Protocol) — транспортный протокол, осуществляющий функции управления потоком независимыми для любого LSAP-соединения. Каждая точка доступа этого протокола (TTPSAP — TinyTP Service Access Point) идентифицируется с единственной точкой доступа IrLMP и использует единый с ней адрес. TinyTP также ведает сегментацией и сборкой фреймов). IrCOMM — протокол эмуляции последовательного и параллельного портов, основанный на четырех типах сервиса: 3-Wire Raw, 3-Wire, 9-Wire и Centronics. Первый работает только через одно эксклюзивное соединение и используется, когда необходимо передавать исключительно данные. Второй эмулирует параллельную передачу по трем каналам (Signal Common, TD, RD), используя возможности TinyTP, Девятипроводный предназначен для эмуляции последовательных портов и обрабатывает, помимо трех вышеупомянутых, еще шесть сигналов (RTS, CTS, DSR, DTR, CD, RI). Centronics — это не что иное, как виртуальный параллельный интерфейс на базе TinyTP).
Протокол IrTran-P, введенный для передачи изображений, состоит из трех слоев (SCEP, bFTP, UPF) и пользуется услугами упоминавшегося ранее IrCOMM. Назначение SCEP (Simple Command Execute Protocol) — изоляция вышележащих уровней от реалий конкретного интерфейса. Благодаря высокому уровню абстракции удалось спроектировать протокол bFTP (binary File Transfer Protocol) таким образом, что он может единообразно обслуживать нужды самых разных устройств в самых разных конфигурациях соединения. Имя файла упаковывается вместе с данными в единый блок, предусмотрены функции опроса удаленного устройства и согласования параметров представления информации, что максимально автоматизирует процесс. UPF (Uni Picture Format) обеспечивает гарантированное воспроизведение изображений, переданных с одного устройства на другое. UPF основывается на формате JPEG и позволяет сохранять, помимо изображения, еще и все дополнительные сведения о нем, обычно фиксируемые цифровыми камерами (дата, ориентация, уровень белого, уровень черного и т. д.). Чтобы устройства, содержащие аппаратно-зафиксированные алгоритмы обработки изображений, могли адекватно воспринимать модифицированный формат, вся расширенная информация вынесена в заголовок, а само изображение остается нетронутым.
VFIR (Very Fast IR) — дополнение к стандарту IrDA, позволяющее повысить скорость передачи данных до 16Mbps. Введен новый формат фрейма, в котором первым идет поле преамбулы (Preamble), состоящее из 240bit или слотов, после IrLAP-фрейма и контрольной суммы — поле FB (Flush Byte — 8 нулевых бит), в конце — поле Null (24 нулевых бита). Вся переданная информация кодируется по алгоритму HHH, обеспечивающему от 1 до 13 пустых слотов между импульсами. Конечно, необходимые изменения были сделаны и в протоколе IrLAP: добавлено обозначение для скорости 16Mbps в поле Baud Rate, а также увеличен максимально возможный размер окна с 7 до 127 фреймов.
IrBus (IrControl). Спецификация, регулирующая вопросы, связанные с подключением различной периферии, требующей взаимодействия с системными контроллерами. Ее положения применимы также к устройствам удаленного управления ПК, телевизорами высокой четкости (HDTV) и бытовыми приборами.
Физический уровень обеспечивает передачу данных, закодированных по схеме модуляции последовательными импульсами 16-PSM (Pulse Sequence Modulation — 8 слотов, где только 2 или 4 могут содержать импульс) со скоростью 75Kbps. Однако, при использовании такой схемы кодирования, импульс означает “1”, его отсутствие — “0”. Частота несущей основного сигнала — 1.5MHz с минимальной дальностью действия 5м. Данные пересылаются в пакетах двух видов: длинные (776bit) и короткие (72bit), структура которых абсолютно идентична за исключением значения стартового флага, а также разрядности контрольной суммы. Так, протокол MAC (Media Access Control) регламентирует процессы взаимодействия множественной периферии с единственным основным устройством (Host) и обмена информацией между ними.
Существует три режима работы ведущего устройства: сон (с низким энергопотреблением), нормальный и сосуществование с IrDA (поддержка IrDA SIR 1.1 и IrControl). Если от периферии долгое время не поступает никаких данных, то Host автоматически переходит в состояние сна, причем само периферийное устройство в случае необходимости может самостоятельно перевести его в нормальный режим работы. Host получает данные путем циклического опроса периферии (Poll) с периодом 13.8m s, в ходе которого обслуживается до четырех устройств с критическим временем латентности (для менее требовательной периферии гарантируется период опроса в 69m s). Формат MAC-пакета состоит из поля адреса основного устройства (HA — Host Address), поля адреса периферии (PA — Peripheral Address) и контрольного поля (MAC). Значение структуры MAC зависит от того, основное или периферийное устройство являются “автором” пакета, и содержит вспомогательную системную информацию.
Прежде чем начнется обмен данными, должен пройти процесс идентификации всей доступной “лидеру” периферии (Enumeration), для чего предназначен специальный формат пакета, называемый “окликом” (Hail). После идентификации устройства и регистрации сведений о его максимально возможном времени опроса оно включается в общий цикл Host-опроса. В зависимости от его дальнейшей активности частота обращений может быть повышена или понижена.
В режиме сосуществования основное устройство в первые 50m s отводит на осуществление IrDA SIR 1.1-коммуникаций, а следующие 10m s производит опрос периферии. Устройства, чувствительные к времени задержки, не могут получить в этом режиме надлежащего обслуживания, да и количество некритичного к циклу опроса оборудования уменьшается до двух устройств. Над уровнем MAC располагается слой LLC (Logical Link Control), функции которого сводятся к обеспечению надежного соединения для вышележащих уровней. Именно LLC ведает пересылкой подтверждений об успешной доставке пакетов. Каждому устройству тут присваивается четыре оконечные точки (Endpoints): первая обслуживает “виртуальное” контрольное соединение, вторая и третья — входное и выходное соединения соответственно, а четвертая является опциональной и может служить для еще одного входного или выходного соединения. На прикладном же уровне определено только два стандартных, обслуживающих LLC, протокола — HA (Home Appliances) и HID (Human Interface Device). Последний поддерживает подключение USB-периферии с помощью IrDA Control Transceiver Module (IRB-TM), также являющегося USB-устройством и функционирующего как хаб (Hub).
IrLAN. Протокол обеспечивает доступ в локальную сеть с помощью инфракрасного соединения (сетевая среда IrLAN), где основными являются клиент и провайдер. Провайдер пассивен и ожидает проявления иницативы со стороны клиента, на которого возлагаются все функции по детектированию и конфигурированию соединения. Для этого используется контрольный канал — через него клиент получает необходимые сведения о провайдере из его IAS. Предусмотрено три метода доступа в сеть: через точку доступа (Access Point), типа “порт–порт” (Peer-to-Peer) и режим основного функционирования (Hosted). Access point представляет собой специализированное устройство, имеющее как доступ к сети, так и IR-адаптер. При соединении “порт–порт” два устройства связываются через инфракрасное соединение, а IrLAN лишь эмулирует локальную сеть. В этом случае каждый из участников должен играть роли клиента и провайдера одновременно. В режиме “хост” компьютер-провайдер не только предоставляет услуги подключения к сети для удаленных устройств, но и сам пользуется ими, потому что провайдер и клиент делят один и тот же сетевой адрес и возникает потребность в специальном маршрутизирующем и фильтрующем ПО. При инициализации соединения устанавливаются два “виртуальных канала” — данных и контроля, причем оба используют TinyTP. В канале данных в настоящий момент поддерживаются пакеты типов 802.3 (Ethernet) и 802.5 (Token Ring). Формат фрейма данных IrLAN аналогичен формату ретранслируемого сетевого протокола. Драйвер IrLAN обычно не модифицирует содержимое пакетов, за исключением дескрипторов, и лишь в режиме Hosted могут быть внесены определенные изменения. В канале контроля обмен осуществляется на основе фреймов другого формата. В первом его 8bit-поле содержится команда, в таком же следующем — количество сопутствующих параметров, а дальше идут сами параметры, которые “укладываются” в промежуток 0–8160 bit.
Практически, сегодня уже нет мало-мальски уважающей компании, которая бы не производила компоненты для ИК портов. Например, компания Crystal Semiconductor выпускает микросхему ИК приемопередатчика серии CS8130. Этот прибор является интерфейсом между блоком UART, излучающим светодиодом и светочувствительным PIN-диодом. Он работает в форматах IrDA, ASK и TV формате беспроводного управления, имеет функции программирования мощности передачи и порога срабатывания приемника. Микросхема выполнена в корпусе типа SSOP очень малого размера (5х7 mm).
В качестве примера “интеграции” можно рассмотреть интерфейс IrDA, добавленного на материнскую плату обычного ПК (в связи со сложностью схемы она не прилагается). Блок UART, имеющийся на плате, можно использовать как для того, чтобы управлять проводным СОМ-портом интерфейса RS-232, используя, например, преобразователь напряжения МАХ562, так и для управления ИК-портом, соответствующим стандарту IrDA, используя трансивер CS8130. Внешний вывод PWRDN# микросхемы CS8130 используется для перевода в третье состояние линий RXD и FORM/BSY, что позволит использовать UART. И наоборот, с помощью выводов EN и SHDN# можно перевести в третье состояние выходы R2OUT и R3OUT микросхемы МАХ562, передавая управление UART трансиверу CS8130. В качестве второго примера можно привести схему (также не прилагается) внешнего модуля, который можно подключить к имеющемуся СОМ-порту любого компьютера. Этот модуль очень компактен и расположен в конце метрового кабеля, свободно ориентируемого в пространстве. Более подробно с конкретными реализациями интерфейса IrDA можно в документах, указанных в “списке дополнительных источников”…
Список основных источников
- Infrared Data Association Control Specification (Formerly IrBus). IrDA CIR (Control IR) Standard, www.irda.org
- Infrared Data Association Minimal Protocol Implementation (IrDA Lite), www.irda.org
- Infrared Data Association Serial Interface Physical Layer Specification, www.irda.org
- Infrared Data Association LAN Access Extensions for Link Management Protocol (IrLAN), www.irda.org
- IrDA Serial Infrared Link Access Protocol Specification for 16Mbps Addition (VFIR), www.irda.org
- Infrared Data Association Serial Infrared Link Access Protocol (IrLAP), www.irda.org
- Infrared Data Association Link Management Protocol (IrLMP), www. irda.org
- Infrared Data Association Specification for IR Mobile Communications (IrMC), www.irda.org
- Infrared Data Association Object Exchange Protocol (IrOBEX), www.irda.org
- Infrared Data Association Plug-and-Play Extension for Link Management Protocol (IrPnP), www.irda.org
- Infrared Data Association TinyTP: A Flow-Control Mechanism for use with IrLMP, www.irda.org
- IrTran-P (Infrared Transfer Picture) Specification IrDA Application for Consumer Digital Cameras, www.irda.org
- JetSend Protocol for IrDA, www.irda.org
- ETSI: Radio Equipment and Systems Methods of Measurement for Mobile Radio Equipment (ETR027)
Список дополнительных источников
- EMI: Stability Against. Electromagnetic Interference, www.vishay.de
- About IrDA Compatible Data Transmission: Physical Layer, www.vishay.de
- Quality & Reliability Information, www.vishay.de
- IrDA Recommended Circuits, www.vishay.de
- IrDA Recommended Design Boards, www.vishay.de
- IrDA: Infrared Dongle Interface, www.vishay.de
- About IrDA Compatible Data Transmission: Software Protocol, www.vishay.de
- TFDx4x00 Serial Infrared Transceiver Module Family (SIR, 115.2Kbps), www.vishay.de
- TFDx5x02 Serial Infrared Transceiver Module Family (MIR, 1Mbps), www.vishay.de
- TFDx6x0x Serial Infrared Transceiver Module Family (FIR, 4Mbps), www.vishay.de
port – Максимальная потенциальная скорость для последовательного порта rs232
This goes back to the original IBM PC. The engineers that designed it needed a cheap way to generate a stable frequency. And turned to crystals that were widely in use at the time, used in any color TV in the USA. A crystal made to run an oscillator circuit at the color burst frequency in the NTSC television standard. Which is 315/88 = 3.579545 megahertz. From there, it first went through a programmable divider, the one you change to set the baudrate. The UART itself then divides it by 16 to generate the sub-sampling clock for the data line.
So the highest baudrate you can get is by setting the divider to the smallest value, 2. Which produces 3579545 / 2 / 16 = 111861 baud. A 2.3% error from the ideal baudrate. But close enough, the clock rate doesn’t have to be exact. The point of asynchronous signalling, the A in UART, the start bit always re-synchronizes the receiver.
Getting real RS-232 hardware running at 115200 baud reliably is a significant challenge. The electrical standard is very sensitive to noise, there is no attempt at canceling induced noise and no attempt at creating an impedance-matched transmission line. The maximum recommended cable length at 9600 baud is only 50 feet. At 115200 only very short cables will do in practice. To go further you need a different approach, like RS-422’s differential signals.
This is all ancient history and doesn’t exactly apply to modern hardware anymore. True serial hardware based on a UART chip like 16550 have been disappearing rapidly and replaced by USB emulators. Which have a custom driver to emulate a serial port. They do accept a baudrate selection but just ignore it for the USB bus itself, it only applies to the last half-inch in the dongle you plug in the device. Whether or not the driver accepts 115200 as the maximum value is a driver implementation detail, they usually accept higher values.
Обзор и сравнительный анализ последовательных интерфейсов передачи данных Текст научной статьи по специальности «Компьютерные и информационные науки»
В этой связи необходимо:
• Разработать дорожную карту по переходу и популяризации применения МСФО и повышению квалификации специалистов по международной отчетности на государственном уровне.
• Увеличить количество и доступность достоверной информации по МСФО, включающей в себя обобщение и анализ положительной практики применения МСФО российскими компаниями, адаптацию зарубежного опыта применения МСФО как на уровне государства в целом, так и положительного опыта иностранных компаний, а также разъяснения и комментарии к стандартам и практике их применения Минфина, других компетентных органов и профессионального сообщества; составить обобщение и анализ положительной практики применения МСФО российскими компаниями, а также разъяснений и комментариев к стандартам Минфина и других компетентных органов;
• разработать доступные широкому кругу специалистов программы обучения и повышения квалификации по МСФО, поддерживаемые государством и признаваемые на международном уровне.
Литература
1. Волкова О. Е., Дмитриева О. Ф., Соснин В. Н. Исследование «Перспективы и практика применения МСФО в России» // МСФО в России: особенности перехода и практика применения, Москва, 2013: материалы конференции.
2. Голова И. С. поправкой на менталитет. Российская Бизнес-газета. № 900 (22), 2013.
3. Сунгурова П. Методические аспекты перехода на МСФО // МСФО в России: особенности перехода и практика применения, Москва, 2013: материалы конференции.
4. Шишова Л. И., Пинясова И. А. МСФО в России: особенности перехода // Молодой ученый. № 4, 2013.
Обзор и сравнительный анализ последовательных интерфейсов
передачи данных Кислов А. Г.
Кислое Александр Геннадьевич /Kislov Aleksandr Gennad’evich – студент, кафедра вычислительной техники, факультет микроприборов и технической кибернетики, Национальный исследовательский университет Московский институт электронной техники, г. Зеленоград
Аннотация: в статье приводится краткий обзор используемых в настоящее время последовательных интерфейсов передачи данных, приводится таблица сравнения интерфейсов по нескольким критериям. Исходя из данных этой таблицы, делаются выводы о сферах использования данных интерфейсов.
Ключевые слова: UART, SPI, USB, Ethernet, скорость передачи данных, протокол передачи.
В настоящее время в процессе проектирования и разработки устройств одной из главных проблем является выбор интерфейса передачи данных, наиболее подходящего для выполнения устройством его функций и задач. Существует множество интерфейсов передачи данных. Каждый из них отличается от других по пропускной способности, способу передачи и принципу обмена информацией. В данной статье будет проведен обзор некоторых из этих интерфейсов, а также их сравнение.
илят
UART – это старейший и наиболее распространенный на сегодняшний день физический протокол передачи данных, предназначением которого является организация связи между цифровыми устройствами. Он преобразует передаваемые данные в последовательный вид для возможности передачи их по цифровой линии другому аналогичному устройству. Наиболее известной реализацией иЛБТ является интерфейсы RS-232, RS-422 и RS-485 [1, с. 18].
Данные в UART передаются последовательно по одному биту через равные промежутки времени. Этот временный промежуток задается скоростью UART, которая указывается в бодах. Существует ряд стандартных скоростей: 300, 600, 1 200, 2 400, 4 800, 9 600, 19 200, 38 400, 57 600, 115 200, 230 400, 460 800 и 921 600 бод. К примеру, максимальная скорость СОМ-порта компьютера составляет 115200 бод. Информационные биты для синхронизации обрамляются стартовым и стоповым битами, таким образом формируется минимальная посылка. Обычно посылка содержит в себе один байт информации, но существуют реализации UART, позволяющие передавать иное количество бит. Также для проверки целостности данных может присутствовать бит четности [1, с. 421].
Рис. 1. Передача данных по UART SPI
SPI – последовательный интерфейс передачи данных, разработанный компанией Motorola. Основным его предназначением является обеспечение простого и недорогого высокоскоростного сопряжения микроконтроллеров и периферии.
В SPI для соединения устройств используется конфигурация ведущий/ведомый. В схеме подключения всегда только один ведущий, количество ведомых может быть различным. В общем случае выход ведущего соединяется с входом ведомого, а выход ведомого соединяется с входом ведущего.
SPI является синхронным интерфейсом, в котором любая передача синхронизирована с общим тактовым сигналом, генерируемым ведущим устройством. Ведомая периферия синхронизирует прием битовой последовательности с тактовым сигналом.
Рис. 2. Схема подключения SPI
В SPI используются четыре сигнала: MOSI, служащий для последовательной передачи данных от ведущего устройства ведомому, MISO, предназначенный для последовательной передачи данных от ведомого устройства ведущему, последовательный тактовый сигнал SCLK и ChipSelect, использующийся для выбора ведомой микросхемы.
Передача данных по SPI осуществляется пакетами, длина которых, как правило, 8 бит. Для инициации связи ведущее устройство устанавливает низкий уровень на выводе сигнала того устройства, с которым необходимо установить соединение. При низком уровне сигнала ведомое устройство переходит в активное состояние, вывод сигнала MISO устанавливается в режим «выход», а сигнал SCLK начинает вызывать считывание на входе MOSI передаваемых значений битов от ведущего устройства. Данные по SPI передаются в полнодуплексном режиме, т.е. передача осуществляется в обоих направлениях одновременно.
В настоящее время интерфейс широко используется в микроконтроллерах наряду с UART.
USB
USB – интерфейс, предназначенный для подключения различных периферийных устройств к персональному компьютеру. Разрабатывался USB с целью унификации и простоты для пользователя. Под унификацией понимается замена множества «традиционных» интерфейсов одним, а простота для пользователя означает «горячее» подключение устройств.
На сегодняшний день актуальной версией спецификации интерфейса является USB 3.0. Интерфейс обеспечивает максимальную скорость передачи данных до 5 Гбит/с и значительно упрощает питание и зарядку многочисленных устройств.
Данные передаются посредством транзакций – неразрывными последовательностями из нескольких пакетов. Обмен данными происходит следующим образом. Инициатором обмена всегда является хост. Он передает короткий пакет, уведомляющий о начале новой транзакции. В этом пакете хост указывает направление транзакции и адрес устройства. Пакетов с данными может быть несколько в одной транзакции, если каждый из них имеет максимально допустимую для этого устройства длину данных. Окончание пересылки данных определяется по длине пакета, не равной максимальной. Как только приходит укороченный пакет, устройство немедленно передает ответный пакет-подтверждение, например, все успешно принято или не смог принять. Аналогично происходит передача данных от устройства к хосту.
Ethernet
Ethernet – проводной интерфейс передачи данных, который используется преимущественно для построения локальных компьютерных сетей.
Передача данных по Ethernet происходит с помощью стека протоколов TCP/IP. Название TCP/IP происходит из двух наиболее важных протоколов семейства -Transmission Control Protocol (TCP) и Internet Protocol (IP), которые были разработаны и описаны первыми в данном стандарте.
Данные по Ethernet передаются в виде коротких пакетов, называемых кадрами, между двумя и более станциями – узлами. В целях идентификации каждому узлу приписывается персональный номер, именуемый MAC – адресом.
В ходе обзора интерфейсов были выделены их преимущества и недостатки, которые представлены в таблице 1.
Характеристики UART SPI USB Ethernet
Скорость передачи данных низкая низкая высокая высокая
Сложность реализации протокола передачи низкая низкая высокая высокая
Возможность «горячего» подключения устройств – – + +
Дальность передачи данных маленькая очень маленькая маленькая большая
Электрическая изоляция устройств – +/- – +
Возможность построения распределенных систем – – – +
Интерфейсы UART и SPI имеют относительно низкую скорость передачи данных, но низкая сложность реализации протоколов передачи позволяет применять их для построения простых недорогих решений. Например, подключение низкоскоростной периферии к ПК или микроконтроллерам. USB и Ethernet в свою очередь обладают относительно высокой скоростью передачи данных, а также имеют возможность «горячего» подключения устройств, однако протоколы передачи данных интерфейсов довольно сложны. Поэтому USB используется для сопряжения высокоскоростной периферии (внешние носители данных, видеокамеры и т.д.) с ПК, а Ethernet применяется в ЛВС и системах распределенных вычислений.
Литература
1. Агуров П. В. Последовательные интерфейсы ПК. Практика программирования.
Санкт-Петербург: БХВ-Петербург, 2004. 472 с.
Возможно ли развитие России по сценарию Китая? Муравьева Я. И.
Муравьева Яна Игоревна /Muraveva Iana Igorevna – студент, факультет бизнеса и менеджмента, Национальный исследовательский университет «Высшая школа экономики», г. Москва
Аннотация: в статье рассматриваются основные этапы становления экономик России и Китая, а также приводится сравнение ключевых характеристик, предопределивших развитие стран.
Ключевые слова: монетарная политика Китая, экономика развитых стран, банковская система РФ и КНР.
На сегодняшний день такие страны, как Япония, Китай, Бразилия развиваются довольно быстро. Уже к началу двадцать первого века их экономика стала заметно расти. Известно, что в данный момент экономика Китая одна из передовых в мире, ее
Последовательная связь– learn.sparkfun.com
Добавлено в избранное Любимый 88Введение
Встроенная электроника – это объединение схем (процессоров или других интегральных схем) для создания симбиотической системы. Чтобы эти отдельные каналы могли обмениваться информацией, они должны использовать общий протокол связи. Для этого обмена данными определены сотни протоколов связи, каждый из которых можно разделить на две категории: параллельный или последовательный.
Параллельный и последовательный
Параллельные интерфейсы одновременно передают несколько битов. Обычно им требуется шин и данных – передача по восьми, шестнадцати или более проводам. Данные передаются огромными, грохочущими волнами единиц и нулей.
8-битная шина данных, управляемая часами, передающая байт за каждый тактовый импульс. Используется 9 проводов.
Последовательные интерфейсы передают свои данные по одному биту за раз. Эти интерфейсы могут работать всего с одним проводом, обычно не более четырех.
Пример последовательного интерфейса, передающего один бит за каждый тактовый импульс. Требуется всего 2 провода!
Думайте о двух интерфейсах как о потоке автомобилей: параллельный интерфейс будет представлять собой мегамагистраль с 8+ полосами движения, а последовательный интерфейс больше похож на двухполосную сельскую дорогу. По прошествии определенного времени мега-шоссе потенциально может доставить больше людей к месту назначения, но эта сельская двухполосная дорога служит своей цели и стоит лишь небольшую часть средств, чтобы построить.
Параллельная связь, безусловно, имеет свои преимущества. Это быстро, просто и относительно легко реализовать. Но для этого требуется гораздо больше линий ввода / вывода (I / O). Если вам когда-либо приходилось переносить проект с базового Arduino Uno на Mega, вы знаете, что линии ввода-вывода на микропроцессоре могут быть драгоценными и немногочисленными. Таким образом, мы часто выбираем последовательную связь, жертвуя потенциальной скоростью ради полезности контактов.
Асинхронный последовательный
За прошедшие годы были созданы десятки последовательных протоколов для удовлетворения конкретных потребностей встраиваемых систем.USB (универсальная шина serial ) и Ethernet – это пара наиболее известных компьютерных последовательных интерфейсов. Другие очень распространенные последовательные интерфейсы включают SPI, I 2 C и стандарт последовательного порта, о котором мы здесь поговорим сегодня. Каждый из этих последовательных интерфейсов можно разделить на две группы: синхронные или асинхронные.
Синхронный последовательный интерфейс всегда связывает свою линию (линии) данных с тактовым сигналом, поэтому все устройства на синхронной последовательной шине используют общие часы.Это упрощает и зачастую ускоряет последовательную передачу данных, но также требует как минимум одного дополнительного провода между взаимодействующими устройствами. Примеры синхронных интерфейсов включают SPI и I 2 C.
Асинхронный означает, что данные передаются без поддержки внешнего тактового сигнала . Этот метод передачи идеально подходит для минимизации необходимых проводов и контактов ввода / вывода, но это означает, что нам нужно приложить дополнительные усилия для надежной передачи и приема данных.Последовательный протокол, который мы будем обсуждать в этом руководстве, является наиболее распространенной формой асинхронной передачи. На самом деле это настолько распространено, что, когда большинство людей говорят «серийный», они говорят об этом протоколе (что вы, вероятно, заметите в этом руководстве).
Последовательный протокол без тактовой частоты, который мы обсудим в этом руководстве, широко используется во встроенной электронике. Если вы хотите добавить в свой проект модуль GPS, Bluetooth, XBee, ЖК-дисплеи с последовательным интерфейсом или многие другие внешние устройства, вам, вероятно, потребуется добавить несколько последовательных интерфейсов.
Рекомендуемая литература
Это руководство основано на нескольких концепциях электроники нижнего уровня, в том числе:
двоичный
Двоичная – это система счисления в электронике и программировании … поэтому важно научиться этому. Но что такое двоичный? Как это переводится в другие системы счисления, такие как десятичные?
Логические уровни
Узнайте разницу между 3.Устройства 3V и 5V и логические уровни.
Аналоговые и цифровые
В этом руководстве рассматривается концепция аналоговых и цифровых сигналов в их отношении к электронике.
Как читать схему
Обзор обозначений схем компонентов, а также советы и рекомендации для лучшего чтения схем. Щелкните здесь и станьте схематически грамотным уже сегодня!
Шестнадцатеричный
Как интерпретировать шестнадцатеричные числа и как преобразовать их в / из десятичных и двоичных чисел.
ASCII
Краткая история того, как появился ASCII, как он полезен для компьютеров, и некоторые полезные таблицы для преобразования чисел в символы.
Если вы не очень хорошо знакомы с какой-либо из этих концепций, подумайте о проверке этих ссылок.
А теперь давайте отправимся в серийное путешествие …
Правила серийного номера
Асинхронный последовательный протокол имеет ряд встроенных правил – механизмов, которые помогают обеспечить надежную и безошибочную передачу данных.Вот эти механизмы, которые мы получаем для исключения внешнего тактового сигнала:
- Биты данных,
- бит синхронизации,
- Биты четности,
- и скорость передачи.
Благодаря разнообразию этих сигнальных механизмов вы обнаружите, что не существует единого способа для последовательной передачи данных. Протокол легко настраивается. Важнейшей частью является обеспечение того, чтобы оба устройства на последовательной шине были настроены на использование одинаковых протоколов .
Скорость передачи
Скорость передачи определяет скорость передачи данных по последовательной линии.Обычно выражается в битах в секунду (бит / с). Если вы инвертируете скорость передачи, вы можете узнать, сколько времени требуется для передачи одного бита. Это значение определяет, как долго передатчик удерживает высокий / низкий уровень последовательной линии или в какой период принимающее устройство производит выборку своей линии.
Скорость передачи может быть практически любой в разумных пределах. Единственное требование – чтобы оба устройства работали с одинаковой скоростью. Одна из наиболее распространенных скоростей передачи, особенно для простых вещей, где скорость не критична, – 9600 бит / с .Другие «стандартные» скорости: 1200, 2400, 4800, 19200, 38400, 57600 и 115200.
Чем выше скорость передачи, тем быстрее отправляются / принимаются данные, но существуют ограничения на скорость передачи данных. Обычно вы не увидите скорости, превышающей 115200 – это быстро для большинства микроконтроллеров. Поднимитесь слишком высоко, и вы начнете видеть ошибки на принимающей стороне, поскольку часы и периоды выборки просто не успевают.
Обрамление данных
Каждый блок (обычно байт) передаваемых данных фактически отправляется в пакете или кадре бит.Кадры создаются путем добавления к нашим данным битов синхронизации и четности.
Серийный корпус. Некоторые символы в кадре имеют настраиваемый размер бит.
Давайте подробно рассмотрим каждую из этих частей рамы.
Блок данных
Настоящая суть каждого последовательного пакета – это данные, которые он несет. Мы неоднозначно называем этот блок данных чанком , потому что его размер специально не указан. Количество данных в каждом пакете может быть установлено от 5 до 9 бит.Конечно, стандартный размер данных – это ваш базовый 8-битный байт, но другие размеры имеют свое применение. 7-битный блок данных может быть более эффективным, чем 8-битный, особенно если вы просто передаете 7-битные символы ASCII.
После согласования длины символа оба последовательных устройства также должны согласовать порядок байтов своих данных. Отправляются ли данные из старшего разряда в младший или наоборот? Если не указано иное, обычно можно предположить, что данные передаются младших битов (LSB), сначала .
Биты синхронизации
Биты синхронизации – это два или три специальных бита, передаваемых с каждым блоком данных. Это стартовый бит и стоповый бит . Верные своему названию, эти биты отмечают начало и конец пакета. Всегда есть только один стартовый бит, но количество стоповых битов можно настроить на один или два (хотя обычно его оставляют равным одному).
Стартовый бит всегда указывается незанятой строкой данных, переходящей от 1 до 0, в то время как стоповый бит (ы) переходит обратно в состояние ожидания, удерживая строку на 1.
Биты четности
Четность – это форма очень простой низкоуровневой проверки ошибок. Он бывает двух видов: четный и нечетный. Для создания бита четности все 5-9 битов байта данных складываются, и четность суммы определяет, установлен ли бит или нет. Например, предполагая, что четность установлена на четность и добавляется к байту данных, например 0b01011101
, который имеет нечетное число 1
(5), бит четности будет установлен на 1
. И наоборот, если бы режим четности был установлен как нечетный, бит четности был бы 0
.
Четность – необязательный и не очень широко используется. Это может быть полезно для передачи через шумные среды, но это также немного замедлит вашу передачу данных и требует, чтобы отправитель и получатель реализовали обработку ошибок (обычно полученные данные, которые терпят неудачу, должны быть отправлены повторно).
9600 8Н1 (пример)
9600 8N1 – 9600 бод, 8 бит данных, без контроля четности и 1 стоповый бит – это один из наиболее часто используемых последовательных протоколов. Итак, как будут выглядеть один или два пакета данных 9600 8N1? Приведем пример!
Устройство, передающее символы ASCII «O» и «K», должно создать два пакета данных.Значение ASCII O (это верхний регистр) – 79, которое разбивается на 8-битное двоичное значение 01001111
, а двоичное значение K – 01001011
. Осталось только добавить биты синхронизации.
Это конкретно не указано, но предполагается, что данные передаются в первую очередь младшим битом. Обратите внимание, как каждый из двух байтов отправляется при чтении справа налево.
Поскольку мы осуществляем передачу со скоростью 9600 бит / с, время, затрачиваемое на поддержание высокого или низкого уровня каждого из этих битов, составляет 1 / (9600 бит / с) или 104 мкс на бит.
Для каждого переданного байта данных фактически отправляется 10 бит: стартовый бит, 8 бит данных и стоповый бит. Итак, при 9600 бит / с мы фактически отправляем 9600 бит в секунду или 960 (9600/10) байтов в секунду.
Теперь, когда вы знаете, как создавать последовательные пакеты, мы можем перейти к разделу оборудования. Там мы увидим, как эти единицы и нули, а также скорость передачи данных реализованы на уровне сигнала!
Электромонтаж и оборудование
Последовательная шина состоит всего из двух проводов – один для отправки данных, а другой для приема.Таким образом, последовательные устройства должны иметь два последовательных контакта: приемник RX и передатчик TX .
Важно отметить, что эти ярлыки RX и TX относятся к самому устройству. Таким образом, RX от одного устройства должен переходить в TX другого, и наоборот. Это странно, если вы привыкли подключать VCC к VCC, GND к GND, MOSI к MOSI и т. Д., Но это имеет смысл, если подумать. Передатчик должен разговаривать с приемником, а не с другим передатчиком.
Последовательный интерфейс, по которому оба устройства могут отправлять и получать данные, – это полнодуплексный или полудуплексный . Полнодуплексный режим означает, что оба устройства могут отправлять и получать одновременно. Полудуплексная связь означает, что последовательные устройства должны по очереди отправлять и получать.
Некоторые последовательные шины могут обходиться без единого соединения между отправляющим и принимающим устройством. Например, все наши ЖК-дисплеи с последовательным подключением – это уши, и на самом деле у них нет никаких данных, которые можно было бы передать обратно на управляющее устройство.Это так называемая симплексная последовательная связь . Все, что вам нужно, это один провод от TX ведущего устройства до RX линии слушателя.
Аппаратная реализация
Мы рассмотрели асинхронный последовательный порт с концептуальной стороны. Мы знаем, какие провода нам нужны. Но как на самом деле реализуется последовательная связь на уровне сигнала? На самом деле, разными способами. Существуют всевозможные стандарты для последовательной передачи сигналов. Давайте посмотрим на пару наиболее популярных аппаратных реализаций последовательного интерфейса: логического уровня (TTL) и RS-232.
Когда микроконтроллеры и другие низкоуровневые ИС взаимодействуют последовательно, они обычно делают это на уровне TTL (транзисторно-транзисторной логики). TTL serial сигналы существуют между диапазоном напряжения питания микроконтроллера – обычно от 0 В до 3,3 В или 5 В. Сигнал на уровне VCC (3,3 В, 5 В и т. Д.) Указывает либо на свободную линию, либо на бит со значением 1, либо на стоповый бит. Сигнал 0 В (GND) представляет либо стартовый бит, либо бит данных со значением 0.
RS-232, который можно найти на некоторых из более древних компьютеров и периферийных устройств, похож на TTL-последовательный порт, перевернутый с ног на голову.Сигналы RS-232 обычно находятся в диапазоне от -13 В до 13 В, хотя в спецификации допускается любое значение от +/- 3 В до +/- 25 В. В этих сигналах низкое напряжение (-5 В, -13 В и т. Д.) Указывает либо на свободную линию, либо на стоповый бит, либо на бит данных со значением 1. Высокий сигнал RS-232 означает либо стартовый бит, либо 0- бит данных значения. Это своего рода противоположность серийному TTL.
Между двумя стандартами последовательных сигналов, TTL намного проще реализовать во встроенных схемах. Однако низкие уровни напряжения более подвержены потерям на длинных линиях передачи.RS-232 или более сложные стандарты, такие как RS-485, лучше подходят для последовательной передачи на большие расстояния.
Когда вы соединяете два последовательных устройства вместе, важно убедиться, что их сигнальные напряжения совпадают. Вы не можете напрямую связать последовательное устройство TTL с шиной RS-232. Вам придется изменить эти сигналы!
Продолжая, мы рассмотрим инструменты, которые микроконтроллеры используют для преобразования своих данных по параллельной шине в последовательный интерфейс и обратно. UART!
УАПП
Последняя часть этой серийной головоломки – найти что-то для создания последовательных пакетов и управления этими физическими линиями оборудования.Введите UART.
Универсальный асинхронный приемник / передатчик (UART) – это блок схемы, отвечающий за реализацию последовательной связи. По сути, UART действует как посредник между параллельным и последовательным интерфейсами. На одном конце UART находится шина из восьми или около того линий данных (плюс несколько управляющих контактов), на другом – два последовательных провода – RX и TX.
Супер-упрощенный интерфейс UART. Параллельный на одном конце, последовательный на другом.
UART существуют как отдельные ИС, но чаще встречаются внутри микроконтроллеров.Вам нужно будет проверить техническое описание вашего микроконтроллера, чтобы узнать, есть ли у него какие-либо UART. У кого-то его нет, у кого-то есть, у кого-то много. Например, Arduino Uno, основанный на «старом верном» ATmega328, имеет только один UART, а Arduino Mega, построенный на ATmega2560, имеет целых четыре UART.
Как следует из аббревиатур R и T , UART отвечают как за отправку, так и за прием последовательных данных. На стороне передачи UART должен создать пакет данных – добавив биты синхронизации и четности – и отправить этот пакет по линии передачи с точным временем (в соответствии с установленной скоростью передачи).На стороне приема UART должен выполнить выборку линии RX со скоростью в соответствии с ожидаемой скоростью передачи, выбрать биты синхронизации и выдать данные.
Блок-схема внутреннего UART (любезно предоставлена таблицей данных Exar ST16C550)
Более продвинутые UART могут сбрасывать полученные данные в буфер , где они могут оставаться до тех пор, пока микроконтроллер не придет за ними. UART обычно выпускают свои буферизованные данные по принципу FIFO. Буферы могут иметь размер от нескольких бит до тысяч байтов.
Программные UART
Если микроконтроллер не имеет UART (или его не хватает), последовательный интерфейс может быть с битовой обработкой – напрямую управляется процессором. Это подход, который используют библиотеки Arduino, такие как SoftwareSerial. Bit-banging требует много ресурсов процессора и обычно не так точен, как UART, но в крайнем случае работает!
Общие ловушки
Вот и все, что касается последовательной связи. Я хотел бы оставить вас с несколькими типичными ошибками, которые легко сделать инженер с любым уровнем опыта:
RX-to-TX, TX-to-RX
Кажется достаточно простым, но я знаю, что это ошибка, которую я совершал более нескольких раз.Как бы вы ни хотели, чтобы их метки совпадали, всегда следите за тем, чтобы линии RX и TX пересекали линии между последовательными устройствами.
FTDI Базовое программирование Pro Mini. Обратите внимание на пересечение RX и TX!Вопреки тому, что предупреждал уважаемый доктор Эгон Шпенглер, пересекает ручьи .
Несоответствие скорости передачи
Скорость передачи аналогична языкам последовательной связи. Если два устройства не разговаривают с одинаковой скоростью, данные могут быть неправильно интерпретированы или полностью пропущены.Если все принимающее устройство видит на своей линии приема мусор, убедитесь, что скорости передачи совпадают.
Данные передаются со скоростью 9600 бит / с, но принимаются со скоростью 19200 бит / с. Несоответствие бода = мусор.
Конфликт между автобусами
Последовательная связь позволяет двум устройствам обмениваться данными по одной последовательной шине. Если несколько устройств пытаются передавать по одной и той же последовательной линии, вы можете столкнуться с конфликтом на шине. Дун Дун Дун ….
Например, если вы подключаете модуль GPS к Arduino, вы можете просто подключить линию TX этого модуля к линии RX Arduino.Но этот вывод Arduino RX уже подключен к выводу TX преобразователя USB-to-serial, который используется всякий раз, когда вы программируете Arduino или используете Serial Monitor . Это создает потенциальную ситуацию, когда и модуль GPS, и чип FTDI пытаются одновременно передавать данные по одной и той же линии.
Два передатчика, отправляющие сигнал одному приемнику, создают возможность конфликта на шине.
Два устройства пытаются передавать данные одновременно по одной линии – это плохо! В «лучшем» случае ни одно из устройств не сможет отправлять свои данные.В худшем случае обе линии передачи устройства выходят из строя (хотя это редко и обычно защищено от этого).
Подключение нескольких приемных устройств к одному передающему устройству может быть безопасным. Не совсем соответствует спецификациям и, вероятно, не одобряется закаленным инженером, но это сработает. Например, если вы подключаете последовательный ЖК-дисплей к Arduino, самым простым подходом может быть подключение линии RX ЖК-модуля к линии TX Arduino. TX Arduino уже подключен к линии RX USB-программатора, но это по-прежнему оставляет только одно устройство, контролирующее линию передачи.
Такое распределение линии передачи может быть опасным с точки зрения прошивки, потому что вы не можете выбрать, какое устройство слышит какую передачу. ЖК-дисплей в конечном итоге получит данные, не предназначенные для него, что может заставить его перейти в неизвестное состояние.
В общем – одна последовательная шина, два последовательных устройства!
Ресурсы и дальнейшее развитие
Благодаря этим блестящим новым знаниям о последовательной связи есть множество новых концепций, проектов и технологий, которые необходимо изучить.
Хотите узнать больше о других стандартах связи? Может что-то синхронное? Ознакомьтесь со следующими протоколами связи.
I2C
Введение в I2C, один из основных используемых сегодня протоколов встроенной связи.
AST-CAN485 Руководство по подключению
AST CAN485 – это миниатюрная Arduino в компактном форм-факторе ProMini.В дополнение ко всем обычным функциям он имеет встроенные порты CAN и RS485, позволяющие быстро и легко взаимодействовать с множеством промышленных устройств.
Многие технологии широко используют последовательную связь:
А может, хотите посмотреть сериал в действии?
Микроконтроллер– факторы ограничения скорости UART?
В вашей настройке есть несколько ограничений на скорость передачи UART:
- Скорость переключения сигналов.Выходы UART представляют собой обычные цифровые сигналы. Они могут работать довольно быстро на одной и той же плате, но не подходят для высокой скорости вне платы в их исходной форме.
- Микросхемы преобразователя RS-232. Микроконтроллер будет выдавать обычные цифровые сигналы, тогда как COM-порт ПК требует уровней сигнала RS-232. Обычные микросхемы преобразователя обычно имеют верхний предел скорости в диапазоне 250 кбод. Это не значит, что вы не можете создать свою собственную схему, которая работает быстрее, но вы не сможете просто использовать готовый чип.
- Цепочка скорости передачи на микр. Большинство микроконтроллеров позволяют вам разделить их внутренние часы на некоторое целое число, и результат будет в 16 раз больше скорости передачи данных. Например, если бы у вас был микроконтроллер, работающий на частоте 30 МГц, то самая быстрая скорость передачи, вероятно, была бы 1,875 МБод.
Некоторые микросхемы имеют «высокоскоростной» режим, в котором используется меньшее кратное, чем 16. Это дает вам более высокую скорость за счет надежности. Это в лучшем случае редкость, а зачастую и вовсе не лучшая идея.
- Скорости передачи, доступные в ПК .Вероятно, это самый ограничивающий критерий. ПК может использовать только те скорости передачи данных, которые доступны для кода пользователя, в зависимости от того, что может делать оборудование UART на ПК, и политик, закодированных в драйвере.
Суть в том, что UART и COM-порты ПК просто не предназначены для достижения желаемых скоростей, даже близко. Если вы попытаетесь превысить 115,2 кбод, вы где-то напроситесь.
Найдите лучший способ передачи данных с микроконтроллера на ПК.
Тем не менее, подумайте о том, что это означает на микро-конце.Вы хотите отправлять или получать новый байт каждые 33 нс. Многие микроконтроллеры не могут выполнить даже одну инструкцию за это время. Даже на высокопроизводительных микросхемах это в лучшем случае всего несколько инструкций. Подумайте, что вам нужно делать с этими данными или откуда микроконтроллер должен их получить, используя 3-5 инструкций для обработки каждого байта.
Ваша общая архитектура кажется неуместной. Вероятно, вам следует подумать об использовании FPGA или найти лучший способ решить проблему на высоком уровне.
В чем разница между анализаторами протокола SPI и UART?
Если вы работаете со встроенными системами, важно понимать различия между различными технологиями и протоколами, которые используют эти системы. UART и SPI являются важными аспектами проектирования и разработки встроенных систем, и понимание различий между ними поможет вам лучше понять, как работают системы, которые их используют. В этой статье мы объясним, что такое UART и SPI, объясним различия между UART и SPI, обсудим некоторые распространенные приложения, использующие UART и SPI, и предоставим вам информацию, которая поможет вам начать отладку и программирование встроенных систем, использующих UART. или SPI.
Что такое UART?UART – это универсальный асинхронный приемный передатчик. На высоком уровне UART – это просто микрочип, который обеспечивает связь между вычислительным устройством (ПК, встроенная система и т. Д.) И другим оборудованием.
Чтобы понять, что делает UART более подробно, полезно понять последовательную связь и параллельную связь. Здесь мы проведем ускоренный курс по этим двум темам.
Простыми словами, последовательная связь – это посылка данных по одному биту за раз по заданной коммуникационной шине. Хотя RS-232 (обратите внимание, что UART обычно используется для RS-232) и RS-485 – это два протокола, которые мы чаще всего ассоциируем с термином «последовательная связь», многие другие современные технологии, такие как USB (универсальная последовательная шина), SATA (Serial ATA) и Firewire / IEEE 1394 также являются последовательными протоколами. Одним из преимуществ последовательной связи является то, что данные могут передаваться с более высокими частотами, что увеличивает объем данных, которые могут быть отправлены, несмотря на то, что за один раз отправляется меньше данных по сравнению с параллельной связью.
Параллельная связь, с другой стороны, отправляет несколько бит данных одновременно по заданной коммуникационной шине. Например, 32-битный параллельный коммуникационный носитель, такой как обычный PCI (Peripheral Component Interconnect), будет отправлять 32-битные данные за такт. Хотя можно было бы подумать, что это даст параллельную связь значительные преимущества в скорости по сравнению с последовательным, на практике последовательный интерфейс быстрее, потому что он может выдерживать больше тактовых циклов в секунду (например, скорости ГГц).
Итак, какое именно отношение это имеет к UART? Проще говоря, микросхемы UART используются для преобразования входящих последовательных данных в параллельные данные для чтения системой и, наоборот, преобразования исходящих параллельных данных в последовательные перед их отправкой в другие системы. Другими словами, UART позволяет системе действовать как DTE (оконечное оборудование данных).
Прежде чем мы перейдем к SPI, давайте быстро рассмотрим еще несколько важных деталей о связи UART:
- UART использует 2 провода: 1 для передачи (или Tx) и один для приема (или Rx) Связь по UART
- является асинхронной, что означает, что она не синхронизируется с использованием часов
- UART имеет максимальное расстояние связи 15 метров
- UART использует регистры сдвига для преобразования последовательной связи в параллельную
- UART обычно используется в качестве «последовательного порта» на компьютерах или в микроконтроллерах.
- UART поддерживает полнодуплексную связь
SPI (Serial Peripheral Interface) – это протокол последовательной связи, изначально разработанный Motorola, который обеспечивает связь практически между любым электронным устройством, поддерживающим синхронизированные последовательные потоки.SPI использует для связи метод «ведущий-ведомый», который обеспечивает высокоскоростную потоковую передачу данных.
В отличие от использования двух проводов, SPI должен использовать как минимум 4 провода. Поскольку в реализации SPI может быть несколько подчиненных устройств, фактическое количество используемых проводов или трасс будет равно n + 3, где n = количество используемых подчиненных устройств.
Несколько дополнительных ключевых деталей по SPI, прежде чем мы продолжим:
- SPI синхронный
- SPI – простой протокол с небольшими накладными расходами
- SPI поддерживает полнодуплексную связь
- Связь SPI не имеет средств для подтверждения или управления потоком
- SPI не занимает много места на плате
Чтобы узнать больше о SPI, ознакомьтесь с нашей статьей базы знаний об истории SPI, теории работы SPI и другими подробностями о SPI.
Различия между UART и SPIХотя и UART, и SPI поддерживают полнодуплексную связь, оба в некотором роде используют «последовательную» связь, и оба они подходят только для случаев использования на коротких расстояниях, помимо этого не так много общего. Итак, в чем разница между UART и SPI? Ответ – их много; мы рассмотрим некоторые из них здесь.
Аппаратное обеспечение и протоколОдно из самых больших различий заключается в том, что UART – это тип оборудования, а SPI – это протокол.Когда вы сталкиваетесь с нюансами работы во встроенной системе, это легко упустить из виду. Однако UART – это фактическая часть оборудования (микрочип), а SPI – это протокол или спецификация для связи.
Количество выводовUART используют только два контакта, в то время как устройствам SPI требуется как минимум 4. При проектировании системы это означает, что, если контактов / дорожек мало, SPI может быть непривлекательным решением.
Количество подключаемых устройствКак следствие, количество контактов, UART и устройства SPI поддерживают разное количество устройств.UART, использующий только Tx и Rx для исходящей связи, эффективно ограничивает связь 1: 1. SPI, с другой стороны, может использовать свою парадигму ведущий / ведомый, чтобы обеспечить слишком много коммуникаций.
Скорость передачи данныхSPI значительно быстрее, чем UART. В некоторых случаях решение SPI может быть в три раза быстрее, чем решение UART.
ЦенаВ любом инженерном начинании стоимость конкретного решения является важным фактором выбора.Вообще говоря, SPI дешевле, чем UART.
Асинхронный и синхронныйКак вы можете видеть из описаний этих двух ранее, еще одним важным отличием при сравнении UART и SPI является то, что связь UART является асинхронной, а SPI – синхронной.
РазмерВообще говоря, устройства SPI занимают относительно меньше места, чем микросхемы UART. Это означает, что для случаев использования с ограниченным пространством на плате SPI может лучше обслуживать.
Технологии | Тип передачи | Количество проводов / контактов | Скорость передачи данных @Distance | Стоимость | Масштабируемость | Случаи использования |
UART | Асинхронный | 2 | 20 кбит / с на 15 м | Умеренно дорого | Плохо (точка-точка) | Диагностические дисплеи |
SPI | Синхронный | 4+ | 250 Мбит / с @.1 мес. | Сравнительно недорого | Умеренный | Высокоскоростное соединение микросхемы с микросхемой |
Не существует универсального ответа на вопрос «UART vs SPI: что мне использовать?» вопрос. Однако с информацией, которую мы вам здесь предоставили, теперь вы можете принять обоснованное решение о том, какое решение лучше всего подходит для конкретного приложения, над которым вы, возможно, работаете.
Вообще говоря, SPI предпочтительнее в приложениях, требующих более высокой скорости обмена данными между микросхемами или приложениями, требующими связи между несколькими устройствами.С другой стороны, UART может лучше подходить для приложений, которые должны преодолевать немного большее расстояние, таких как диагностические дисплеи или другие приложения, требующие поддержки RS-232.
Инструменты для отладки и разработки UART и SPIЗдесь, в Total Phase, мы производим решения, предназначенные для отладки и разработки встроенных систем. Учитывая преобладание SPI во встроенных системах, неудивительно, что у нас есть множество решений, которые могут помочь при отладке и разработке систем, использующих SPI.
Например, наш SPI Development Kit позволяет разработчикам тестировать целевые устройства в качестве главного устройства, моделировать главное устройство, программировать флэш-устройства, основанные на SPI, и контролировать шину SPI с детализацией до 20 наносекунд.
В качестве альтернативы, если вам нужно отладить данные, идущие к или от UART, может оказаться полезным анализатор протокола Total Phase. Например, ознакомьтесь с этой статьей, в которой рассказывается, как контролировать данные UART по RS232 с помощью анализатора протокола питания Beagle USB 480.
Вопросы по отладке или разработке встроенных систем? Свяжитесь с нами сегодня!Надеемся, вам понравилась наша статья о UART и SPI. Если вы хотите узнать больше о решениях, предлагаемых Total Phase, свяжитесь с нами по адресу [email protected]. Чтобы просмотреть обзор наших продуктов, щелкните здесь.
UART против I2C против SPI – протоколы связи и их использование
Когда мы говорим о протоколах связи, UART, SPI и I2C являются общими аппаратными интерфейсами, которые люди используют при разработке микроконтроллеров.
В этой статье сравнивается различные интерфейсы: UART, SPI и I2C и их отличия. Мы будем сравнивая их с различными факторами через их протоколы, преимущества и недостатки каждого интерфейса и т. д., и мы предоставим несколько примеров того, как эти интерфейсы используются в микроконтроллерах.
Интерфейс UART
Что такое UART?
- означает Универсальный асинхронный прием и передача (UART).
- Простой протокол последовательной связи, который позволяет хосту обмениваться данными с дополнительным устройством.
- UART поддерживает двунаправленную, асинхронную и последовательную передачу данных.
- Он имеет две линии данных, одна для передачи (TX), а другая для приема (RX), которая используется для связи через цифровой контакт 0, цифровой контакт 1.
- TX и RX подключены между двумя устройствами. (например, USB и компьютер)
- UART также может обрабатывать проблемы управления синхронизацией между компьютерами и внешними последовательными устройствами.
Как это работает?
- Он может работать между устройствами тремя способами:
- Симплекс = передача данных в одном направлении
- Полудуплекс = передача данных в любом направлении, но не одновременно
- Полный дуплекс = передача данных в обоих направлениях одновременно
- После подключения данные передаются от TX к RX принимающего UART.
- Поскольку UART является асинхронной последовательной передачей = Нет часов
- Передача UART преобразует параллельные данные от ведущего устройства (например, CPU) в последовательную форму и передает их последовательно в принимающий UART. Затем он преобразует последовательные данные обратно в параллельные данные для принимающего устройства.
- Поскольку UART не имеет часов, UART добавляет стартовые и стоповые биты, которые передаются.
- Это помогает принимающему UART узнать, когда начинать чтение битов, поскольку биты представляют начало и конец пакета данных.Когда принимающий UART обнаруживает стартовый бит, он будет читать биты со скоростью BAUD.
- Скорость передачи данных UART называется скоростью передачи данных в формате BAUD и по умолчанию установлена на 115200 (скорость передачи данных в формате BAUD основана на скорости передачи символов, но аналогична скорости передачи в битах).
- Оба UART должны работать примерно с одинаковой скоростью передачи. Если разница в скорости передачи данных в формате BAUD превышает 10%, синхронизация битов может быть отключена, и пользователь должен убедиться, что UART настроены для передачи и приема из одного и того же пакета данных.
Рабочий протокол UART
- UART передача данных будет получать данные из данных шина, по которой шина данных будет отправлять данные в UART другим устройством (например, CPU).
- После передачи UART получает параллельные данные из шины данных, он добавит стартовый бит, четность бит и стоповый бит для создания пакета данных.
- Пакет данных затем передается на выводе Tx, где принимающий UART будет читать пакет данных на его штифт Rx. Данные отправляются до тех пор, пока в передающем UART не останется данных.
Передача данных и получение
- После передачи данных по передающему FIFO флаг FIFO «BUSY» будет установлен и активен во время процесса.
- FIFO = первым пришел – первым ушел. Это буфер UART, который заставляет каждый байт передачи передаваться принимающему UART.
- Бит «BUSY» будет неактивен только после завершения передачи данных, когда FIFO станет пустым и был передан каждый бит, включая стоповый бит.
- Когда приемник UART находится в режиме ожидания и если после получения стартового бита на входе низкий уровень данных, счетчик приема начинает работать, и данные находятся в 8-м цикле Baud16.
- Если Rx все еще остается низким в течение 8-го цикла Baud16, когда стартовый бит действителен, он будет обработан как неправильный стартовый бит и проигнорирован.
- Если стартовый бит действителен, биты данных выбираются каждый 16-й цикл Baud16 в зависимости от длины символа данных. Если включен режим четности, также определяется бит четности.
- Если Rx высокий, будет подтвержден действительный стоповый бит. В противном случае произойдет ошибка кадрирования.
- Когда получен полный пакет данных, данные сохраняются в принимающем FIFO.
Управление прерыванием
- Целью прерываний является автоматическая отправка содержимого буфера.
- Пользователь может использовать прерывания в следующих случаях:
- Ошибка разрыва строки (сигнал RX остается 0, включая контрольный и стоповый бит.)
- Ошибка кадра (стоповый бит не 1)
- Тайм-аут приема ( приемный FIFO имеет данные, но не полные, и последующие данные не передаются)
Операция FIFO
- Модуль UART семейства ARM Stellaris содержит два 16-байтовых FIFO: один для передачи и один для приема.
- Их можно настроить на запуск прерываний на разной глубине. Например, глубина 1/8, 1/4, 1/2, 3/4 и 7/8. Если принимающий FIFO запускает прерывание на 1/4, прерывание приема запускается, когда UART получает 4 данных.
- Рабочий процесс передачи FIFO:
- Процесс запускается сразу после ввода данных. Передача занимает много времени, поэтому другие данные, которые необходимо отправить, можно продолжать вводить в передающий FIFO.
- Когда передающий FIFO заполнится, пользователю придется подождать, иначе вы потеряете свои данные.
- Передающий FIFO будет посылать данные бит за битом, пока передающий FIFO не станет полностью пустым. После очистки переданных данных в передающий FIFO будет добавлен дополнительный слот.
- Рабочий процесс получения FIFO:
- Когда оборудование получает данные, они будут сохранены в принимающем FIFO.Программа автоматически сотрет данные в принимающем FIFO, поэтому в принимающем FIFO останется место. Если данные в принимающем FIFO не стираются, а принимающий FIFO заполнен, данные будут потеряны.
- FIFO приемопередатчика предназначен для решения проблемы, связанной с неэффективностью ЦП и слишком частым прерыванием работы приемопередатчика UART. Используя связь UART, режим прерывания проще и эффективнее, чем метод опроса. Без FIFO приемопередатчика все данные будут прерваны один раз, и это будет неэффективно.С FIFO приемопередатчика он может генерировать прерывание и постоянно передавать и принимать данные (до 14), что повышает эффективность передачи и приема.
- Потеря данных не будет вызвана FIFO, поскольку он уже предвидел какие-либо проблемы в процессе отправки и получения. Пока UART инициализирован, процедура прерывания будет делать все автоматически.
Петля
- UART имеет внутреннюю функцию обратной петли для диагностики или отладки, когда данные отправленный от Tx будет получен входом Rx.
Последовательный инфракрасный порт протокол
- UART имеет последовательный порт IrDA Модуль инфракрасного (SIR) кодера / декодера. Модуль IrDA SIR переводит между асинхронным потоком данных UART и полудуплексным последовательным интерфейсом SIR.
- Используется для обеспечения цифровой кодированный выход и декодированный вход для UART. Сигнальный контакт UART может быть подключен к инфракрасному трансиверу для физического уровня IrDA SIR связь.
Преимущества использования UART
- Проста в эксплуатации, хорошо задокументировано, поскольку это широко используемый метод с большим количеством ресурсов в Интернете.
- Часы не требуются
- Бит четности для обеспечения проверка ошибок
Недостатки использования UART
- Размер кадра данных ограничен только 9 битами
- Невозможно использовать несколько главных систем и подчиненных
- Скорости передачи каждого UART должны быть в пределах 10% друг от друга, чтобы предотвратить потерю данных.
- Низкая скорость
Примеры UART в микроконтроллерах:
USB CP2102 Последовательный преобразователь
- Высокоинтегрированный контроллер моста USB-UART, обеспечивающий простое решение для обновления конструкций RS-232 до USB с использованием минимального количества компонентов и места на печатной плате. Он обеспечивает USB-подключение к устройствам с интерфейсом UART.
- Он использует стандартный USB-штекер типа A и 6-контактный разъем TTL.
- Этот последовательный преобразователь USB CP2102 представляет собой небольшой адаптер для платы Arduino / Seeeduino для приема обновлений прошивки с компьютера.
FT232r USB UART / USB к UART 5 В
- Seeed предлагает аналогичный продукт: USB-UART 5V
- Это USB-последовательный интерфейс UART, который упрощает USB-порт для последовательного подключения.
- Уменьшает количество внешних компонентов, при этом эффективно работая с хост-контроллером USB, используя как можно меньше общей доступной полосы пропускания USB.
- Для USB в UART 5V он основан на Ch440, который представляет собой микросхему преобразования шины USB и может реализовать преобразование USB в последовательный интерфейс.
- Этот USB-порт преобразуется в инфракрасный порт IrDA или USB-преобразователь в интерфейс принтера, а также может использоваться для загрузки кода или связи с микроконтроллерами.
UART Seeeduino V4.2
- Все платы Arduino имеют как минимум один последовательный порт (UART), который обменивается данными на цифровых выводах 0 (RX) и 1 (TX), а также с компьютером через USB.
- Это Arduino-совместимая плата, основанная на микроконтроллере ATmga328P. С ATMEGA16U2 в качестве преобразователя UART-USB, плата может в основном работать как микросхема FTDI, и ее можно программировать через кабель micro-USB.
Базовый щит V2
- Arduino Uno – самая популярная плата Arduino на данный момент, однако иногда бывает неприятно, когда вашему проекту требуется много датчиков или светодиодов, а ваши перемычки находятся в беспорядке.
- Назначение этого продукта – избавиться от макетной платы и соединительных проводов. Благодаря богатым разъемам Grove на плинтусе вы можете очень удобно добавлять все модули Grove в Arduino Uno!
- Эти устройства могут быть подключены через UART и I2C (следующее коммуникационное периферийное устройство, которого я собираюсь коснуться!)
Интерфейс I2C
Что такое I2C?
- Означает Межинтегральная схема (I2C)
- Это протокол последовательной связи, аналогичный UART, но не используется для связи между ПК и устройствами, но используется с модулями и датчиками.
- Это простая двунаправленная двухпроводная синхронная последовательная шина, для которой требуется только два провода для передачи информации между устройствами, подключенными к шине.
- Они полезны для проектов, требующих совместной работы множества различных частей (например, датчиков, выводов, расширений и драйверов), поскольку они могут подключать до 128 устройств к материнской плате, сохраняя при этом четкий канал связи!
- Это похоже на то, что I2C использует адресную систему и общую шину = множество различных устройств могут быть подключены с использованием одних и тех же проводов, и все данные передаются по одному проводу и имеют небольшое количество контактов.Однако недостатком этого упрощенного подключения является то, что он медленнее, чем SPI.
- Скорость I2C также зависит от скорости передачи данных, качества проводов и внешнего шума.
- Протокол I2C также используется для двухпроводного интерфейса для подключения низкоскоростных устройств, таких как микроконтроллеры, EEPROM, аналого-цифровые и цифро-аналоговые преобразователи, Интерфейсы ввода-вывода и другие подобные периферийные устройства во встроенных системах.
Как это работает?
- Он имеет 2 линии: SCL (последовательная линия синхронизации) и SDA (порт приема последовательной линии данных).
- CL – линия синхронизации для синхронизации передачи.SDA – это линия данных, по которой отправляются или принимаются биты данных.
- Ведущее устройство инициирует передачу данных по шине и генерирует часы, чтобы открыть переданное устройство, и любое адресуемое устройство считается ведомым устройством.
- Взаимосвязь между ведущим и ведомым устройствами, передающими и принимающими по шине, непостоянна. Это зависит от направления передачи данных в данный момент.
- Если ведущее устройство хочет отправить данные ведомому устройству, оно должно сначала обратиться к ведомому, прежде чем отправлять какие-либо данные.
- Мастер завершит передачу данных. Если ведущий хочет получить данные от ведомого, ведущий должен снова сначала обратиться к ведомому.
- Затем хост принимает данные, отправленные подчиненным, и, наконец, получатель завершает процесс приема. Хост также отвечает за генерацию тактовых импульсов и прекращение передачи данных.
- Также необходимо подключить питание через подтягивающий резистор. Когда шина простаивает, обе линии на высоком уровне мощности.
- Емкость линии влияет на скорость передачи данных по шине. Поскольку текущая мощность на шине мала, слишком большая емкость может вызвать ошибки передачи. Таким образом, его нагрузочная способность должна составлять 400 пФ, чтобы можно было оценить допустимую длину шины и количество подключенных устройств.
Рабочий протокол I2C
Передача данных метод
- Ведущее устройство отправляет сигнал передачи каждому подключенному ведомому устройству, переключая линию SDA с высокого уровня напряжения на низкий уровень напряжения и линию SCL с высокого на низкий уровень после переключения линии SDA.
- Ведущее устройство отправляет каждому ведомому устройству 7 или 10-битный адрес ведомого устройства и бит чтения / записи ведомому устройству, с которым он хочет связаться.
- Затем ведомое устройство сравнит адрес со своим собственным. Если адрес совпадает, ведомое устройство возвращает бит ACK, который переключает линию SDA на низкий уровень на один бит. Если адрес не совпадает с его адресом, ведомое устройство оставляет линию SDA высоким.
- Затем ведущее устройство отправляет или принимает фрейм данных. После передачи каждого кадра данных принимающее устройство возвращает отправителю еще один бит ACK, чтобы подтвердить успешную передачу.
- Чтобы остановить передачу данных, ведущее устройство отправляет сигнал остановки ведомому, переключая высокий уровень SCL перед переключением высокого уровня SDA
Синхронизация часов
- Все мастера генерируют свои собственные часы на линии SCL для передачи сообщений на Шина I2C.
- Данные действительно только в высокий период времени.
- Часы синхронизация осуществляется подключением интерфейса I2C к линии SCL где переключатель идет с высокого на низкий. Когда часы устройства идут на низком уровне, он удерживает линию SCL в этом состоянии до тех пор, пока не достигнет высокого уровня Часы.
- Если другие часы все еще находятся в низком периоде, переключатель низкого-высокого не изменяется состояние линии SCL. На линии SCL всегда поддерживается низкий уровень сигнала. самый длительный низкий период. На этот раз устройство с коротким и низким период перейдет в состояние высокого и ожидания.
- Когда все соответствующие устройства завершили свой низкий период, линия часов идет высоко.
- После что нет разницы в состоянии часов устройства и линии SCL, и все устройства начинают отсчитывать свой высокий период.Устройство, которое первое завершение периода максимума снова потянет за минимум линии SCL.
- низкий период синхронных часов SCL определяется устройством с самый длинный низкий тактовый период, в то время как высокий период определяется устройством с самым коротким высоким тактовым периодом.
Режим передачи
Быстро режим:
- Устройства быстрого режима могут принимать и передавать со скоростью 400 кбит / с. Они должны быть способны синхронизироваться с передачей 400 кбит / с и увеличивать низкий период сигнала SCL, чтобы замедлить передачу.
- Устройства быстрого режима обратно совместимы и могут обмениваться данными с устройствами стандартного режима от 0 до 100 кбит / с шинными системами I2C. Однако, поскольку устройства в стандартном режиме несовместимы снизу вверх, они не могут работать в системе быстрой шины I2C. Спецификация шины I2C для быстрого режима имеет следующие характеристики по сравнению со стандартным режимом:
- Максимальная скорость передачи данных увеличена до 400 кбит / с;
- Отрегулирована синхронизация сигналов последовательных данных (SDA) и последовательных часов (SCL).
- Имеет функцию подавления сбоев, а входы SDA и SCL имеют триггеры Шмитта.
- Выходной буфер имеет функцию управления крутизной спада сигналов SDA и SCL.
- После отключения питания устройства быстрого режима контакты ввода-вывода SDA и SCL должны быть остался без дела и не может заблокировать автобус.
- Внешнее подтягивающее устройство, подключенное к шине, должно быть настроено на максимально короткое максимально допустимое время нарастания шины I2C в быстром режиме.Для шин с максимальной нагрузкой 200 пФ подтягивающим устройством каждой шины может быть резистор. Для шины с нагрузкой от 200 пФ до 400 пФ подтягивающим устройством может быть источник тока (максимум 3 мА) или цепь переключаемого резистора.
Высокоскоростной режим:
- Устройства в режиме Hs могут передавать информацию со скоростью до 3,4 Мбит / с и оставаться полностью обратно совместимыми с устройствами в быстром режиме или стандартном режиме (режим F / S), которые могут обмениваться данными в двух направлениях в системе со смешанной скоростью.
- Передача в режиме Hs имеет тот же принцип последовательной шины и формат данных, что и система в режиме F / S, за исключением арбитража и тактовой синхронизации, которые не выполняются.
- Спецификация шины I2C в высокоскоростном режиме выглядит следующим образом:
- В высокоскоростном режиме (Hs) ведущее устройство имеет выходной буфер с открытым стоком для высокоскоростного сигнала (SDAH) и вытягивание с открытым стоком. – цепь понижения и повышения напряжения источника тока на выходе высокоскоростной последовательной синхронизации (SCLH). Это сокращает время нарастания сигнала SCLH, и в любой момент активен только один источник тока хоста;
- В режиме Hs системы с несколькими ведущими не выполняются арбитраж и тактовая синхронизация для ускорения возможности обработки битов.Процесс арбитража обычно заканчивается после того, как код хоста передан в режиме F / S.
- Ведущее устройство в режиме Hs генерирует последовательный тактовый сигнал высокого и низкого уровня с соотношением 1: 2, что устраняет временные требования для времени установки и удержания.
- Устройство, работающее в режиме HS, может иметь встроенный мост. Во время передачи в режиме Hs линии SDAH и SCLH устройства в режиме Hs отделены от линий SDA и SCL, что снижает емкостную нагрузку линий SDAH и SCLH и ускоряет рост и падение.
- Разница между подчиненными устройствами в режиме Hs и подчиненными устройствами F / S заключается в скорости, с которой они работают.
- Устройство режима Hs может подавлять выбросы, а выходы SDAH и SCLH также имеют триггер Шмитта;
- Выходной буфер устройства режима Hs имеет функцию управления крутизной спада для сигналов SDAH и SCLH.
Преимущества использования I2C
- Имеет небольшое количество выводов / сигналов даже при наличии большого количества устройств на шине.
- Гибкость, поскольку он поддерживает связь с несколькими ведущими и несколькими ведомыми устройствами.
- Просто, поскольку для установления связи между несколькими устройствами используются только 2 двунаправленных провода.
- Приспосабливаемый, поскольку он может адаптироваться к потребностям различных ведомых устройств.
- Поддержка нескольких мастеров.
Недостатки использования I2C
- Более низкая скорость, поскольку для этого требуются подтягивающие резисторы, а не двухтактные резисторы, используемые SPI. Он также имеет конструкцию с открытым стоком = ограниченная скорость.
- Требуется больше места, поскольку резисторы занимают ценное пространство на печатной плате.
- Может усложняться по мере увеличения количества устройств.
Примеры использования I2C в микроконтроллерах
Grove – концентратор I2C (6 портов)
- I2C – очень популярный протокол связи. В системе Grove I2C используется более чем 80 датчиками для связи, 19 из которых связаны с мониторингом окружающей среды.
- Сегодня все больше и больше микроконтроллеров используют уровни связи 3,3 В, но традиционный ArduinoUno по-прежнему использует 5 В, что приводит к необходимости выравнивания многих модулей, особенно сенсорных модулей, при их использовании.
- Мы действительно работали над этой областью, и теперь большинство сенсорных модулей Grove имеют функцию сдвига уровня, и пользователям не нужно учитывать использование микроконтроллера 3,3 В или 5 В при его использовании. Это соответствует девизу Гроув: плагин, и используйте его, это так просто. Для более подробного обзора совместимости датчиков вы можете просмотреть наше Руководство по выбору Grove.
4-канальный 16-разрядный АЦП для Raspberry Pi (ADS1115)
- Этот продукт от Seeed полностью совместим с Raspberry Pi.
- Он используется для Raspberry Pi без аналого-цифрового преобразователя или когда вам нужен более точный АЦП.
- Мы предоставляем 4-канальный 16-разрядный АЦП для Raspberry Pi (ADS1115) через I2C, 4-канальный АЦП на базе Texas Instrument ADS1115, который представляет собой высокоточный 16-разрядный чип АЦП с низким энергопотреблением.
I2C Arduino
- Связь I2C также может использоваться между двумя платами Arduino.
- Используется только для связи на короткие расстояния и использует синхронизированный тактовый импульс.
- В основном используется для связи с датчиками или другими устройствами, которые должны отправлять информацию мастеру.
Драйвер I2C / Легко управляемый адаптер Устройства I2C
- Драйвер I²C – это простой в использовании инструмент с открытым исходным кодом для управления устройствами I²C. Он работает с Windows, Mac и Linux и имеет встроенный цветной экран, на котором в реальном времени отображается вся деятельность I²C.
- Благодаря встроенному дисплею, отображающему тепловую карту всех активных сетевых узлов, вы можете наблюдать из сети I²C с несколькими устройствами, какие из них являются наиболее активными.
- Когда драйвер I²C подключен к существующей шине I²C, он «отслеживает» трафик и отображает его на экране.
- Это отличный инструмент для отладки проблем с I²C, потому что вы можете подслушивать разговор, когда он происходит.
MCP 23017
Ссылка: Electronicwings, 16-разрядный расширитель GPIO MCP23017.- 16-битное расширение параллельного ввода-вывода общего назначения для шины I2C. Аналогичен MCP23S17, за исключением разницы в последовательном интерфейсе.(I2C и SPI).
- Расширитель портов, который предоставляет пользователю практически идентичные порты по сравнению со стандартными микроконтроллерами.
PCF 8574
Ссылка: PCF8574 Плата модуля последовательного интерфейса, преобразователь ЖК-дисплея.- Обеспечивает расширение удаленного ввода-вывода общего назначения через двухпроводную двунаправленную шину I2C (последовательные часы (SCL), последовательные данные (SDA)).
- Seeed будет использовать это в наших будущих продуктах, будьте начеку!
Grove Base Hat для Raspberry Pi
- Что такое роща?
- Это модульная стандартизированная система прототипирования соединителей.Grove использует подход к сборке электроники с использованием строительных блоков. что упрощает подключение, экспериментирование и создание, а также упрощает систему обучения.
- Сегодня серия датчиков, исполнительных механизмов и дисплеев Grove выросла в большое семейство, и сегодня мы представляем Raspberry Pi для всей системы Grove.
- Шляпа Grove Base Hat для Raspberry Pi предоставляет цифровой / аналоговый / I2C / PWM / UART порт для удовлетворения всех ваших потребностей.
- С помощью встроенного MCU для Raspberry Pi также доступен 12-битный 8-канальный АЦП.В настоящее время более 60 Groves поддержали Grove Base Hat для Raspberry Pi.
Интерфейс SPI
Что такое SPI?
- Обозначает последовательный периферийный интерфейс (SPI)
- Он похож на I2C и представляет собой другую форму протокола последовательной связи, специально разработанную для подключения микроконтроллеров.
- Работает в полнодуплексном режиме, когда данные можно отправлять и получать одновременно.
- Работать на более высоких скоростях передачи данных = 8 Мбит или больше
- Обычно это быстрее, чем I2C из-за простого протокола.Даже если линии данных / часов используются совместно между устройствами, каждому устройству потребуется уникальный адресный провод.
- Используется там, где важна скорость. (например, SD-карты, модули дисплея или когда информация обновляется и меняется быстро, как термометры)
Как это работает?
- Двусторонняя связь »
- Первый – это выбор каждого устройства в строке выбора микросхемы. Для каждого устройства требуется отдельная строка Chip Select. Это наиболее распространенный в настоящее время способ использования SPI в RPi.
- Второй – через шлейфовое соединение, когда каждое устройство подключается друг к другу через свои данные, передаваемые в строку следующего.
- Количество подключаемых устройств SPI не ограничено. Однако существуют практические ограничения из-за количества линий выбора оборудования, доступных на главном устройстве с помощью метода выбора микросхемы, или сложности передачи данных через устройства в методе последовательного подключения.
- При двухточечной связи интерфейс SPI не требует операций адресации и является полнодуплексным, что является простым и эффективным.
Рабочий протокол SPI
- SPI обменивается данными через 4 порта, а именно:
- MOSI – вывод основных данных, ввод данных ведомого
- MISO – ввод данных ведущего, вывод данных ведомого
- SCLK – тактовый сигнал, генерируемый ведущим устройством, до fPCLK / 2, частота ведомого режима до fCPU / 2
- NSS – сигнал с включенным ведомым устройством, управляемый ведущим устройством, некоторые ИС будут помечены как CS (выбор микросхемы)
- В мульти-ведомом В системе каждое ведомое устройство требует отдельного разрешающего сигнала, что немного сложнее с точки зрения оборудования, чем система I2C.
- Интерфейс SPI на самом деле представляет собой два простых сдвиговых регистра во внутреннем оборудовании. Передаваемые данные 8 бит. Он передается бит за битом под сигналом включения ведомого и импульсом сдвига, генерируемым ведущим устройством. Старший бит находится спереди, а младший – сзади.
- Интерфейс SPI – это синхронная последовательная передача данных между ЦП и периферийным низкоскоростным устройством. Под импульсом сдвига ведущего устройства данные передаются бит за битом. Старший бит находится спереди, а младший – сзади.Это полнодуплексная связь, и скорость передачи данных в целом выше, чем у шины I2C, и может достигать скорости в несколько Мбит / с.
Преимущества использования SPI
- Протокол прост, поскольку нет сложной системы адресации ведомых устройств, такой как I2C.
- Это самый быстрый протокол по сравнению с UART и I2C.
- Нет стартовых и стоповых битов, в отличие от UART, что означает, что данные могут передаваться непрерывно без прерывания
- Отдельные линии MISO и MOSI, что означает, что данные могут передаваться и приниматься одновременно
Недостатки использования SPI
- Больше портов Pin занято, практическое ограничение на количество устройств.
- Не указано управление потоком и механизм подтверждения, подтверждающий, получены ли данные, в отличие от I2C
- Использует четыре линии – MOSI, MISO, NCLK, NSS
- Нет формы проверки ошибок в отличие от UART (с использованием бита четности) Всего 1 мастер
Примеры SPI в микроконтроллерах:
MCP 3008 / Grove I2C АЦП
- Seeed предлагает аналогичный продукт, который имеет те же функции: Grove I2C ADC, но его коммуникационная периферия – I2C.
- Это 10-битный 8-канальный аналого-цифровой преобразователь (АЦП).
- Для MCP 3008 он подключается к Raspberry Pi через последовательное соединение SPI. Выполняется с помощью аппаратной шины SPI или любых четырех контактов GPIO и программного SPI для подключения к MCP 3008.
Последовательный модуль CAN-BUS на базе MCP2551 и MCP2515
- Этот видимый продукт: Модуль последовательной шины CAN предоставляет вашему Arduino возможности шины CAN и позволяет взломать ваш автомобиль.Он позволяет читать и записывать сообщения на шину CAN.
- CAN-шина – это система протокола обмена сообщениями, которая позволяет различным микроконтроллерам и датчикам в автомобиле общаться друг с другом. CAN обеспечивает междугородную, среднюю скорость передачи данных и высокую надежность.
- Этот модуль последовательной шины CAN также может быть подключен к вашей Arduino через встроенный разъем Grove.
- Интерфейсы с микроконтроллерами через SPI.
SPI Seeeduino V4.2
- Последовательная связь SPI может использоваться с Arduino для связи между двумя Arduino, где один Arduino будет действовать как ведущий, а другой – как ведомый.
- Используется для связи на короткие расстояния на высокой скорости.
- Это тот же продукт: Arduino v4.2 из приведенного выше примера UART
ENC28J60 НАКЛАДКА ДЛЯ Raspberry pi
- Этот продукт от Seeed, Pi zero ENC28J60 – это простой сетевой адаптер для Pi zero, который очень легко собрать и настроить.
- Это позволяет вашему Raspberry Pi zero беспрепятственно получать доступ к сети, а также легко выполнять обновления системы и операции по установке программного обеспечения.
- Microchip ENC28J60 – это 28-контактный автономный контроллер Ethernet 10BASE-T с интерфейсом SPI.
- Интерфейс SPI служит каналом связи между хост-контроллером и ENC28J60.
Драйвер SPI / Легкий адаптер для устройств SPI
- Это аналогичный продукт I2C Driver / Adapter-Easy Driver I2C Device, но для SPI. Это простой в использовании инструмент для управления устройствами SPI. Он работает с Windows, Mac и Linux и имеет встроенный цветной экран, на котором в реальном времени отображается логический анализатор всего трафика SPI.
- Точно так же он использует стандартный последовательный USB-чип FTDI для связи с ПК, поэтому установка специальных драйверов не требуется. На плате имеются блоки питания 3,3 и 5 В с контролем напряжения и тока.
- Флэш-память SPI очень распространена, и с помощью тестового зажима SPIDriver позволяет удобно считывать и записывать флэш-память SPI в цепи. Короткий скрипт – это все, что нужно для чтения или записи вспышки Atmel, а светодиодные ленты SPI также легко подключить к драйверу SPI. Вы также можете управлять ими напрямую, что делает их намного более увлекательными!
- Этого достаточно, чтобы плавно анимировать длинные полосы и добиться эффектов POV.Короткие полоски могут питаться напрямую от мощного встроенного источника питания SPIDriver 470 мА.
Итак, какое из этих коммуникационных периферийных устройств является «лучшим»? UART SPI или I2C?
К сожалению, «лучшей» коммуникационной периферии не существует. У каждого коммуникационного периферийного устройства есть свои преимущества и недостатки.
Таким образом, пользователь должен выбрать коммуникационное периферийное устройство, наиболее подходящее для вашего проекта.Например, вам нужно самое быстрое периферийное устройство связи, SPI будет идеальным выбором. С другой стороны, если пользователь хочет подключить много устройств, не слишком сложное, I2C будет идеальным выбором, поскольку он может подключать до 127 устройств и прост в управлении.
Сводка
Таким образом, я собрал все преимущества / недостатки и функции различных коммуникационных периферийных устройств и сравнил их, чтобы вы могли легко выбрать, что лучше всего для вашего проекта. Имейте в виду, что используемое вами устройство должно также поддерживать коммуникационную периферию.
UART | I2C | SPI | |
Сложность | Простой | Легко объединить в цепочку множество устройств. | Комплекс как устройство увеличивается |
Скорость | Самая медленная | Быстрее UART | Самая быстрая |
Количество устройств | До 2 устройств | До 127 , но может усложняться по мере увеличения количества устройств | Многие, но есть практических ограничений, и может усложниться |
Количество проводов | 1 | 2 | 4 |
Дуплекс | Полнодуплекс | Полудуплекс | Полнодуплекс |
Количество мастеров и рабов | Нет нескольких подчиненных и главных | Несколько подчиненных и главных | Только 1 главный, но может иметь несколько подчиненных. |
Эксклюзивное предложение !
Seeed предлагает одну бесплатную макетную плату для каждого покупателя. Примените код BREADBOARD, чтобы получить одну бесплатную макетную плату (стоимостью 4,90 доллара США) в Seeed!
Следите за нами и ставьте лайки:
Продолжить чтение
Скорость передачиUART: насколько она должна быть точной?
Эта статья поможет вам определить максимально допустимую разницу между скоростями передачи передатчика и приемника UART.
Связанная информация
Я очень ценю удобство, предлагаемое микроконтроллерами с внутренним генератором довольно высокой точности. Но эти генераторы никогда не бывают такими точными, как кристаллы, поэтому всегда остается сомнение – достаточно ли точен внутренний генератор для всех функций синхронизации, которые могут мне понадобиться?
Одной из наиболее распространенных задач, чувствительных к времени, является связь по UART. В интерфейсе отсутствует внешняя синхронизация, и устройства Tx и Rx могут надежно обмениваться данными, только если их внутренние скорости передачи данных равны.
Но, конечно, «равный» – не совсем инженерное слово – мы всегда должны учитывать шум, ошибки и вариации, а в случае внутреннего генератора микроконтроллера мы не говорим о нескольких частях на миллион. По моему опыту, микроконтроллеры редко предлагают внутренний генератор с точностью выше ± 1,5%. Два микроконтроллера с источниками синхросигнала ± 1,5% будут иметь разную скорость передачи данных на целых 3%. Этого достаточно?
Скорость передачи, битовый период и дискретизация
( Примечание: Для оставшегося анализа мы будем использовать устройство Tx в качестве эталона; другими словами, мы предположим, что устройство Tx всегда имеет номинальную скорость передачи, а устройство Rx имеет неточную скорость передачи данных. .)
Первое, что нужно иметь в виду, это то, что единственная значимая ошибка – это разница между скоростью передачи данных передатчика и приемника (в отличие от разницы между ожидаемой скоростью передачи и фактической скоростью передачи). Например, у вас не будет проблем с передачей данных, если оба ваших устройства связи работают со скоростью 9800 бод, даже если ожидаемая скорость (исходя из номинальной тактовой частоты) составляет 9600 бод.
На следующей диаграмме показана основная процедура синхронизации, используемая для приема UART.Если скорость передачи данных приемника полностью совпадает со скоростью передачи данных передатчика и первый бит дискретизируется точно в середине периода битов, последний бит данных также будет дискретизирован точно в середине периода битов.
Если скорости передачи (и, следовательно, битовые периоды) разные, каждая точка выборки будет постепенно приближаться к битовому переходу. Другими словами, последний бит данных – это тот, на который больше всего влияет несоответствие скорости передачи. Примечание: Для удобства мы всегда будем предполагать, что битовый период Rx длиннее, чем битовый период Tx; результат был бы таким же, если бы мы предположили более короткий период бита Rx.
Устранение максимально допустимой ошибки: более простая версия
Основываясь на этом наблюдении, мы можем сначала предложить следующее: скорости передачи будут достаточно точными, если последний бит данных будет выбран до перехода от последнего бита данных к стоповому биту.(Здесь мы предполагаем, что система может допускать неправильную выборку стопового бита.) Но мы не хотим производить выборку за одну наносекунду до ожидаемого перехода; нам нужен запас. Я думаю, что разумный запас составляет 20%, то есть последний бит должен быть дискретизирован по крайней мере 20% битового периода до перехода от последнего бита данных к стоповому биту.
Битовый период для устройства Tx определяется следующим образом:
$$ T_ {TX} = \ frac {1} {скорость передачи} $$
Если мы используем E для обозначения абсолютного значения процентной разницы между скоростью передачи приемника и скоростью передачи передатчика, то для дополнительного времени битового периода на стороне Rx имеем следующее:
$$ \ Delta T_ {RX} = T_ {TX} \ cdot \ left (\ frac {E} {100} \ right) $$
Для этого первого анализа мы упростим, предположив, что процедура синхронизации начинается точно в середине стартового бита.Таким образом, для интерфейса с восемью битами данных время выборки для последнего бита данных будет отключено на 8ΔT RX . Таким образом, наше условие – достаточно точного – следующее:
$$ 8 \ Delta T_ {RX} <0,30T_ {TX} $$
, потому что мы сказали, что допустимое окно выборки для последнего бита данных составляет от 50% (идеальное значение) до 80% (настолько близко к переходу, насколько мы готовы пойти), а 80% – 50% = 30% = 0,3.
Мы можем решить для максимально допустимого E следующим образом:
$$ 8 \ Delta T_ {RX} <0.30T_ {TX} $
$$ \ Rightarrow8 \ left (\ frac {E} {100} T_ {TX} \ right) <0,30T_ {TX} $$
$$ \ Rightarrow E <3.75 $$
Итак, исходя из этого упрощенного анализа, восьмиразрядная связь UART должна быть надежной, если разница между скоростью передачи данных передатчика и приемника составляет менее 3,75%.
Максимально допустимая ошибка: полный анализ
В предыдущем разделе дается практическое правило для любой восьмиразрядной системы UART, которая может допускать ошибки кадра (т.е.е., ошибки, указывающие на неправильно выбранный стоповый бит). В этом разделе мы разработаем комплексное уравнение, которое может дать более точную и индивидуальную оценку.
Для этого мы добавим следующее:
- переменное расположение выборки стартового бита
- переменное количество бит данных
- переменный запас для выборки последнего бита
- наличие или отсутствие бита четности
- Допуск кадровой ошибки
Из предыдущего раздела у нас
$$ 8 \ Delta T_ {RX} <0.30T_ {TX} $
Теперь наш запас окончательной битовой выборки является переменной; мы будем использовать M (ранее мы использовали 20%). Как видно из следующего уравнения, M необходимо вводить в виде десятичной дроби, а не в процентах.
$$ 8 \ Delta T_ {RX} <\ left ((1-M) -0,5 \ right) T_ {TX} $$
$$ 8 \ Delta T_ {RX} <\ left (0,5-M \ right) T_ {TX} $$
У нас все еще есть 8 перед ΔT RX. Нам нужно это изменить, потому что теперь количество бит данных (обозначенное N) является переменной. Мы также включим переменную для бита четности (P) и стопового бита (S).Если у вас есть бит четности, используйте 1 для P; в противном случае используйте 0. Если вы хотите убедиться, что стоповый бит выбран правильно, используйте 1 для S; в противном случае используйте 0.
$$ (N + P + S) \ Delta T_ {RX} <\ left (0,5-M \ right) T_ {TX} $$
Последнее, что нам нужно, это переменная, которая учитывает фактическую позицию, в которой выбирается стартовый бит. Уравнение в его текущей форме предполагает 50% (т.е. точную середину битового периода). Это идеальная позиция. Любое отклонение от идеала может привести к тому, что позиция выборки последующих битов будет ближе к переходу (и, следовательно, ближе к ошибке).Мы включим это в уравнение, добавив в левую часть следующий член:
$$ D_ {SB} T_ {RX} $$
Этот термин относится к отклонению от идеальной позиции выборки стартового бита, выраженному как десятичное число, умноженное на битовый период приемника. Так, например, если стартовый бит дискретизируется на 60% времени битового периода, этот член будет | (50% – 60%) | T RX = 0,1T RX . Вы не можете легко определить точное значение этого термина, но если вы знаете подробности низкоуровневой функциональности вашего UART, вы можете сделать разумную оценку наихудшего случая.
Теперь наше уравнение –
.$$ D_ {SB} T_ {RX} + (N + P + S) \ Delta T_ {RX} <\ left (0,5-M \ right) T_ {TX} $$
Если мы вспомним, что период бита Rx равен периоду бита Tx плюс дополнительное время, соответствующее проценту ошибки, наше окончательное уравнение будет следующим:
$$ D_ {SB} \ left (\ left (1+ \ frac {E} {100} \ right) T_ {TX} \ right) + (N + P + S) \ left (\ frac {E} { 100} T_ {TX} \ right) <\ left (0,5-M \ right) T_ {TX} $$
Пример и вывод
Рассмотрим следующую систему:
- наценка 30%
- Отклонение выборки стартового бита в наихудшем случае составляет 5%
- восемь бит данных
- ошибки кадра не допускаются
- используется бит четности
Таким образом, имеем
$$ 0.05 \ left (\ left (1+ \ frac {E} {100} \ right) T_ {TX} \ right) + (8 + 1 + 1) \ left (\ frac {E} {100} T_ {TX} \ right) <\ left (0.5-0.3 \ right) T_ {TX} $$
$$ \ Rightarrow \ \ \ left (0,05+ \ frac {0,05E} {100} \ right) + \ left (\ frac {10E} {100} \ right) <0,2 $$
$$ \ Rightarrow \ \ E <1.49 $$
Я надеюсь, что эта статья поможет вам с любыми будущими проблемами точности скорости передачи данных, и помните, что тщательный анализ скорости передачи данных может показать, что вы можете уверенно отказаться от внешнего кристалла, даже если ваш внутренний генератор не так точен, как вам хотелось бы. .
High Speed UART Silicon Labs
В этой заметке по применению показано, как достичь скорости последовательной передачи данных 400 Кбайт / с или более между двумя устройствами Gecko OS под управлением Gecko OS.
Это приложение использует два устройства с ОС Gecko и скрипт Python, работающий на ПК.
- Модули 1 и 2 настроены для использования интерфейса WLAN и функции сервера TCP.
- Оба модуля работают в потоковом режиме и связаны друг с другом через UART.
- Сценарий Python использует отдельные TCP-соединения с TCP-сервером, работающим в каждом модуле.
- Все модули и компьютер, на котором запущен скрипт python, подключаются к одной беспроводной сети.
Поток данных выглядит следующим образом:
- Скрипт Python передает данные в модуль 1 через Wi-Fi (сокет TCP)
- Модуль 1 пересылает данные в модуль 2 через UART
- Модуль 2 пересылает данные в скрипт Python через Wi-Fi (сокет TCP)
- Скрипт Python проверяет полученные данные и вычисляет пропускную способность.
На схеме ниже показан поток данных:
Модуль 1 – Настройки
Команды ОС Gecko (Модуль 1) | Описание |
---|---|
| |
Модуль 2 - Настройки
Команды ОС Gecko (Модуль 2) | Описание |
---|---|
| |
Примечания к настройкам
- Модуль, получающий данные из сети (Модуль 1), имеет свою сеть.buffer.rxtx_ratio устанавливает HIGH, чтобы больший процент сетевого буфера выделялся пулу пакетов RX.
- Модуль, передающий данные в сеть (Модуль 2), имеет свой network.buffer.rxtx_ratio установленный LOW, поэтому больший процент сетевого буфера выделяется пулу пакетов TX.
- Для обоих модулей:
- Bus.stream. flush_time установлено в 0. Это позволяет «нулевое копирование» памяти между сетевым интерфейсом и шиной.
- Включено аппаратное управление потоком UART.Это абсолютно , по сути, поэтому байты данных не сбрасываются.
- Удаленный терминал включен. Это позволяет удаленно настраивать модули через Wi-Fi. Используйте стандартный клиент telnet для подключения и выполнения команд ОС Gecko
- Функция широковещательной передачи UDP в ОС Gecko позволяет сценарию Python динамически определять IP-адрес каждого модуля
Использование Soft AP модуля 1
Вы можете подключиться устройства Gecko OS и компьютер через любую доступную сеть Wi-Fi.Как показано на схеме выше, также можно использовать программную точку доступа на модуле 1 для создания беспроводной сети между модулями и ПК. Чтобы использовать эту настройку (а не отдельную точку доступа Wi-Fi), добавьте следующее в настройки модуля 1, перечисленные выше:
Команды ОС Gecko (модуль 1) - позволяет использовать softAP модуля 1 |
---|
набор softap.auto_start 1
установить softap network.default_interface
установить трансляцию.интерфейс по умолчанию
установить tcp.server.auto_interface по умолчанию
Обратите внимание, что настройки для broadcast.interface и tcp.server.auto_interface не нужны, если эти переменные не были изменены по сравнению с их заводскими значениями по умолчанию.
Задайте для модуля 2 wlan.ssid
и wlan.passkey
в соответствии с настройками модуля 1 для softap.ssid и softap.passkey.
IP-адреса назначаются подключенным устройствам DHCP-сервером программной точки доступа Module 1, если он запущен, в соответствии с настройками программной карты.Статический IP. Подключите компьютер к программной точке доступа Module 1 перед запуском скрипта Python.
Инструкции по установке
Чтобы запустить этот пример, выполните следующие действия.
Обновить настройки
Скопируйте и вставьте указанные выше настройки в терминал, подключенный к каждому соответствующему модулю. Обратите внимание, что после перезагрузки модуля модуль больше не будет реагировать на команды терминала, так как аппаратное управление потоком включено, а скорость передачи UART установлена на 10 Мбит / с.
Используйте удаленный терминал, если необходимо обновить настройки, или выполните сброс модуля до заводских настроек с помощью внешнего GPIO.
Подключите UART
Подключите сигналы модуля UART. Сигналы связаны с кроссовером Rx / Tx и кроссовером RTS / CTS следующим образом. Показанные контакты заголовка являются примерами. Используйте контакты, соответствующие вашей оценочной плате:
Модуль 1 Сигнал UART1 | Модуль 1 Контакт h3 | Модуль 2 Сигнал UART1 | Модуль 2 h3 Контакт | TX | 17 |
---|---|---|---|
TX | 17 | RX | 18 |
RTS | 16 | CTS | 15 |
Запустить сценарий Python
Скопируйте следующий сценарий Python на свой компьютер.
highspeed_uart.py
Выполнить скрипт Python. Вы должны увидеть следующее:
Прослушивание широковещательных пакетов UDP модуля ...
Процедура сценария Python:
- Подождите, пока сервер не получит широковещательный пакет UDP от каждого модуля
- Когда пакет будет получен, проанализируйте его на IP-адрес соответствующего модуля.
- Подключитесь к TCP-серверу каждого модуля. модуль
- Начало передачи и приема данных
- Отображение полученных неожиданных символов
- Отображение скорости загрузки / выгрузки данных
Вывод сценария аналогичен следующему:
Поддержка версий ОС Gecko
Журнал изменений
Изменено | Изменено |
---|---|
2019-01-01 | Создано |
Вопросы и ответы: «Какая самая высокая скорость передачи данных UART может использоваться для обеспечения надежной связи?» - Документы - Микроконтроллеры сверхнизкого энергопотребления
В ADuCM302x и ADuCM4050 скорость передачи UART выводится из частоты PCLK (Peripheral Clock) в соответствии с приведенным ниже уравнением.
Генератор дробной скорости передачи, как указано в приведенном выше уравнении, обеспечивает возможность настройки точной скорости передачи. Однако на мгновение давайте рассмотрим упрощенное уравнение, минуя генератор дробной скорости передачи.
Это уравнение дает нам символ UART / скорость передачи. Если вам нужна пропускная способность данных, это будет зависеть от количества бит данных (от 5 до 8 бит), а также от количества используемых битов четности и стоповых бит.Диапазон результирующего размера слова (данные + четность + стартовые и стоповые биты) будет от 7 до 12 бит. Например, для скорости передачи 1,5 Мбит / с пропускная способность будет 150 тыс. Слов в секунду для 10-битового слова, состоящего из 8 бит данных, 1 стартового бита и 1 стопового бита без контроля четности.
Для максимальных частот PCLK 26 МГц (максимальная частота PCLK в случае ADuCM302x) и 52 МГц (максимальная частота PCLK в случае ADuCM4050) и параметров OSR = 0 и DIV = 1 упрощенное уравнение, приведенное выше, фактически соответствует максимальной скорости передачи данных UART, равной 6. .5 Мбит / с и 13 Мбит / с для ADuCM302x и ADuCM4050 соответственно. Теперь важно отметить, что это теоретические максимальные скорости передачи данных. Практическая скорость передачи данных UART, которая может быть достигнута в системе, будет зависеть от нескольких факторов, некоторые из которых перечислены ниже для вашего рассмотрения.
1. MCU Емкость обработки данных
Это зависит от того, сколько каналов DMA вы можете использовать. Или, если вы используете режим прерывания для передачи пакетов данных, может ли ядро MCU обрабатывать прерывания вовремя, чтобы избежать потери данных.
2. Вместимость приемника UART
Скорость передачи, которую вы можете использовать, зависит от максимальной скорости передачи, которую может поддерживать приемник UART. Например, если вы используете адаптер UART-USB на базе микросхемы FTDI для записи данных UART на ПК, вам также необходимо учитывать максимальную скорость передачи данных UART, поддерживаемую микросхемой FTDI.
3. Бюджет ошибок, точность источника тактовой частоты и передискретизация
- Для типичного слова размером 10 бит, баланс ошибок с точки зрения точности выборки данных UART составляет +/- 5%.Этот бюджет ошибок распределяется между передатчиком и приемником UART. Это означает, что при условии равной точности с обеих сторон бюджет ошибки фактически составляет +/- 2,5% с обеих сторон. Фактически, сохраняя некоторый запас, может быть лучше стрелять в +/- 4%, и поэтому бюджет ошибок тогда будет +/- 2% с каждой стороны.
- Есть два источника ошибок - точность источника тактовых импульсов и точность вычисленной скорости передачи на основе частоты источника тактовых импульсов (из-за используемого целочисленного / дробного деления).В первом случае мы бы посмотрели на характеристики источника тактовых импульсов (например, точность внешнего кристалла или внутреннего генератора), в то время как для второго нам нужно было бы оценить теоретическую ошибку (для справки см. Таблицу 17-1 в раздел UART HRM). Однако главным фактором, определяющим ошибку, обычно остается точность источника тактовых импульсов. В качестве примера, если бы единственным источником ошибок в системе был источник синхронизации, нам бы потребовался бы один с точностью лучше, чем +/- 2% для работы с фиксированной скоростью передачи в системе, где и UART Tx, и Rx имеют такая же точность.
- На бюджет ошибок также влияет коэффициент передискретизации. Использование более высокого коэффициента передискретизации лучше для повышения точности (нужно ли вам это или нет, будет зависеть от доступного бюджета ошибок и точности вашего источника синхронизации). Упрощенное уравнение для определения бюджета ошибок (общий, приемник + передатчик) для 10-битных слов без четности:
, где «S» - коэффициент передискретизации.