Последовательный ввод и вывод информации, что это такое
Обновлено: 20.11.2024
В моем предыдущем сообщении в блоге об обновлении содержимого инициализации ОЗУ Intel FPGA я упомянул, что почти во все свои разработки включаю небольшой ЦП для таких вещей, как управление низкоскоростным интерфейсом, инициализация регистров, общее управление потоком данных и т. д.< /p>
Еще один важный элемент в моем наборе инструментов для проектирования — JTAG UART.
Наверное, все знакомы с обычным UART — последовательным интерфейсом, который восходит к 70-м годам и присутствует во всех системах, от встроенных микроконтроллеров с самой низкой производительностью до высокоуровневых маршрутизаторов и серверов, где он используется в качестве консольного интерфейса. для ввода команд или вывода сообщений журнала.
Это простой протокол, который легко реализовать на ПЛИС с помощью всего нескольких комбинационных логических элементов и триггеров.
И все же я почти никогда не использую его.
Это связано с тем, что при всей его простоте все же требуется дополнительный кабель от моей платы FPGA к моему хост-компьютеру и как минимум 2 контакта FPGA. Если бы UART был единственным способом быстро реализовать консоль в моих проектах, я бы использовал его, но есть альтернатива: JTAG UART.
JTAG UART предлагает преимущества UART без недостатка дополнительного кабеля: он использует уже существующее соединение JTAG для загрузки новых битовых потоков в FPGA или для программирования флэш-памяти конфигурации FPGA.
JTAG UART можно добавить ко всем FPGA, имеющим тестовый порт доступа JTAG (TAG), но их особенно легко использовать на Intel FPGA. И поскольку именно эти ПЛИС я использую для разработки всех своих проектов, именно об этом и будет этот пост в блоге.
Для встроенного программного процессора внутри FPGA JTAG UART ведет себя так же, как и обычный UART: блок с несколькими регистрами управления и состояния для записи байтов в передающий FIFO, чтения байтов из приемного FIFO и чтобы проверить, заполнены ли эти FIFO или пусты.
Но с другой стороны, вместо части логики, которая сериализует данные на некоторые внешние выводы ввода-вывода и обратно, она подключена к JTAG TAP FPGA.
На ПК есть обычный драйвер низкого уровня для управления ключом JTAG и некоторое программное обеспечение более высокого уровня, которое отправляет правильные команды JTAG, устанавливает биты управления, проверяет биты состояния и передает данные.
Преимущества перед обычным UART
- Дополнительный кабель между платой FPGA и ПК не требуется.
- Не требует дополнительных функциональных контактов ввода-вывода.
- Возможно несколько JTAG UART на FPGA, например. по одному на ядро ЦП, через одно и то же соединение JTAG.
- Возможно более высокая скорость передачи данных в зависимости от тактовой частоты JTAG.
Недостатки
Нет стандарта JTAG UART.
Xilinx и Intel используют JTAG UART, но их реализации очень разные и несовместимы друг с другом.
Спецификация протокола JTAG UART отсутствует.
Поскольку низкоуровневые инструкции JTAG для взаимодействия с JTAG UART не публикуются, вы не можете написать собственный драйвер для взаимодействия с JTAG UART на Xilinx или Intel FPGA.
Для управления требуются инструменты с закрытым исходным кодом.
Intel и Xilinx предоставляют инструменты для взаимодействия с JTAG UART. Я знаком только с инструментами Intel, и инструмент интерактивного терминала работает достаточно хорошо, но взаимодействовать с JTAG UART по сценарию невероятно сложно.
Почти во всех своих проектах я использую JTAG UART только для ввода некоторых команд и получения отладочной информации без необходимости написания сценариев. Для этого вполне достаточно инструментов Intel.
Если JTAG UART так хорош, почему нет альтернативы с открытым исходным кодом?
Оказывается, есть! В мире OpenRisc OR1K он называется «последовательный порт JTAG». Он даже имеет основную поддержку в OpenOCD, с поддержкой Intel Virtual JTAG TAP, Xilinx BSCAN TAP и так называемого «Mohor» TAP (я думаю, что это общий JTAG TAP, реализованный Игорем Мохором).
Однако информации об этом очень мало, и хотя где-то должен быть RTL для этого блока, я не смог его найти.
Тем не менее, наличие официального программного драйвера в OpenOCD имеет большое значение, поэтому, если кто-то хочет закрыть эту дыру в экосистеме FPGA с открытым исходным кодом: дерзайте!
Xilinx и некоторые Lattice FPGA имеют способ связи с собственным JTAG TAP путем создания экземпляра конкретной примитивной ячейки JTAG, но не существует общей структуры для добавления произвольного количества клиентов JTAG.
Решение Intel совершенно другое: оно предлагает виртуальный JTAG, систему, в которой до 254 клиентов, связанных с JTAG, могут быть подключены к родному JTAG TAP. У каждого клиента JTAG есть собственный регистр инструкций и регистры данных.
Все это является частью инфраструктуры Intel System Level Debug (SLD).(При компиляции проекта с помощью Quartus вы можете увидеть компилируемые модули, начинающиеся с sld_ . Скорее всего, это связано с виртуальным JTAG.)
Виртуальная система JTAG имеет центральный концентратор, который предлагает функции обнаружения: вам не нужно заранее знать и указывать, какие клиенты JTAG находятся в конструкции FPGA, инструменты Intel сами определят это, перечислив клиенты, подключенные к концентратору.
Вот несколько примеров собственных клиентов Intel:
- JTAG-UART
- Сигналкап
- Внутрисистемные источники и зонды
- Отладчик процессора Nios2
Пользователь также может создавать свои собственные клиенты. При добавлении к Intel FPGA таким клиентом может стать ранее упомянутый последовательный порт OpenRisc JTAG.
В рамках этой записи в блоге не рассматриваются детали низкого уровня. Если вам интересно, вы можете прочитать об этом в Руководстве пользователя Intel Virtual JTAG.
Intel JTAG UART не сложен.
С одной стороны, он подключен к виртуальному концентратору JTAG. Существует приемо-передающий FIFO для буферизации всплесков трафика. Что касается пользовательской логики, у него есть шина Intel Avalon с доступом к 2 регистрам, данным и управлению:
Самый распространенный способ добавить JTAG UART в ваш проект — это добавить его в систему Nios2 SOC в Intel Platform Designer (ранее известном как Qsys). В этом случае это так же просто, как перетаскивание, и RTL, программный драйвер и все остальное автоматически создаются для вас.
Вместо этого я расширим дизайн мини-процессора на основе VexRiscv, описанный в моем предыдущем посте в блоге, с помощью JTAG UART.
Полный проект, работающий на FPGA Arrow DECA, можно найти в этом репозитории jtag_uart_example на GitHub.
Intel FPGA уже много лет поддерживает JTAG UART. Перенос проекта на другую ПЛИС, такую как плата разработки EP2C5T144 на основе Cyclone II, является тривиальной задачей. А когда приходит время запустить проект на FPGA другой марки, я просто комментирую это:
Шаг 1. Создайте примитив JTAG UART
Хорошо, я солгал. Если вы не копируете код из моего примера проекта, вам нужно будет использовать Platform Designer один раз, чтобы создать модуль jtag_uart, который вы сможете использовать в своем проекте.
Создайте систему, используя только JTAG UART:
Количество доступных для выбора параметров ограничено некоторыми настройками FIFO, связанными с TX и RX:
Сохраните файл Qsys и создайте всю логику в его собственном каталоге jtag_uart внутри каталога intel_models. Все эти файлы добавлены в репозиторий GitHub. Я могу повторно использовать их из одного проекта в другой без повторного запуска Platform Designer, даже если я перейду на другой тип Intel FPGA.
Шаг 2. Добавьте JTAG UART в свой проект
Файл jtag_uart_bb.v содержит все порты модуля jtag_uart:
Есть часы и сброс, шина Intel Avalon, которую необходимо подключить к шине ЦП, и прерывание, если вам это нужно. (обычно нет.)
Поведение шины Avalon похоже на поведение шины ARM APB, и ее легко подключить, если вы готовы иметь дело с циклами ожидания.
На диаграмме выше показаны сигналы чтения и записи, тогда как модуль JTAG UART имеет read_n и write_n . Это потому, что создатели спецификации интерфейса Avalon не могли определиться и решили поддерживать оба варианта.
Если вы используете SpinalHDL, код для его работы с реальной шиной APB будет выглядеть примерно так:
Но в моем примере дизайна Verilog я подключаю его к разделенной шине команды/ответа VexRiscv:
Шаг 3. Создайте небольшой программный драйвер
Вместо программного драйвера Intel я буду обращаться к оборудованию напрямую через свой крошечный драйвер:
Основной API состоит всего из трех вызовов функций:
Возможно, вы захотите расширить это с помощью пользовательской функции printf, но этого достаточно для данного примера.
Шаг 4. Добавьте в прошивку поддержку JTAG UART
Остальное зависит от вашего воображения.
Я расширил свой пример переключения светодиодов, добавив команду r, которая меняет порядок переключения светодиодов на обратный.
При нажатии другого символа вместо этого распечатывается справочное сообщение.
Шаг 5. Добавьте заглушку моделирования тестового стенда
Мне нужна скелетная версия JTAG UART, чтобы убедиться, что тестовый стенд компилируется без ошибок и может запускать код процессора без зависаний.
Этот код мог бы быть намного умнее! Прямо сейчас все, что он делает, это возвращает «1» в 16-м бите. Это заставляет FW ЦП полагать, что данные доступны в FIFO записи, поэтому он не попадет в бесконечный цикл, опрашивая это поле, когда захочет. написать передать символ.
После компиляции программного обеспечения и синтеза проекта в битовый поток остается только загрузить битовый поток в FPGA и подключиться к JTAG UART.
Для последнего шага я использую терминал nios2. Он поставляется с установкой Quartus.
Если в вашем проекте есть только 1 JTAG UART, а каталог Quartus ./bin является частью вашего PATH, просто запустите:
Он должен ответить примерно так:
Наличие консоли для управления проектом FPGA может значительно повысить производительность. Нажатием клавиши вы можете перепрограммировать поведение вашего проекта, чтобы протестировать различные режимы, распечатать внутренний регистр состояния и т. д.
Если у вас уже есть крошечная система ЦП как часть проекта, дополнительные затраты на добавление JTAG UART тривиальны: несколько триггеров, 2 ОЗУ для FIFO и, в этом случае, 100 байт дополнительное место для кода.
Взаимодействие с JTAG UART с помощью языка сценариев, такого как Python, настолько болезненно, что я просто избегаю этого. Но для тех, кому это нужно, вот несколько советов для начала.
Общение происходит через системную консоль Quartus. Системная консоль обеспечивает доступ ко всем ресурсам отладки внутри FPGA через сервисы. JTAG UART — это служба байтового потока. Ознакомьтесь с руководством здесь.
Системная консоль использует TCL, самый жалкий из всех когда-либо изобретенных языков сценариев.
-
Запустите системную консоль из основного графического интерфейса Quartus с помощью [Инструменты] -> [Инструменты отладки системы] -> [Системная консоль].
Разверните иерархическое дерево в левом верхнем окне в разделе "устройства".
В моем проекте под «JTAG» есть только 2 экземпляра: виртуальный концентратор JTAG (ID 110:0 v6) и JTAG UART (ID 110:128 v1). Если бы я добавил SignalTap или несколько JTAG UART, все они появились бы в этом списке.
Введите следующие команды TCL в нижнем правом окне команд:
Это делает следующее:
Получите ссылку на JTAG UART.
«0» относится к первому JTAG UART в проекте. В нашем случае только 1.
Запросить JTAG UART для эксклюзивного использования.
Эта команда завершится ошибкой, если у вас уже запущен nios2-терминал, поэтому сначала остановите его.
Создайте список байтов для отправки на этот JTAG UART.
114 — это код ASCII для «r», команды для изменения порядка переключения светодиодов в моей конструкции.
Отправить список байтов в JTAG UART.
Вы должны увидеть, как последовательность светодиодов меняется в противоположном направлении.
Чтобы сделать вещи надежными, вам придется получить ответ JTAG UART и т. д. А чтобы иметь возможность использовать не вызывающий отвращения язык сценариев, такой как Python, вам понадобится какой-то серверный код, соединяющий TCL и Мир Python.
Intel Edison — это очень мощный компьютер в миниатюрном форм-факторе. Сам по себе он не больше почтовой марки. Спецификации Edison включают двухъядерный процессор Intel Atom с частотой 500 МГц, 1 ГБ памяти, Wi-Fi, Bluetooth, USB и кучу GPIO. По сути, это целый компьютер без порта дисплея. Что самое интересное, так это то, что в отличие от наиболее распространенного сегодня оборудования IoT, Edison работает на архитектуре x86, которая, вероятно, является процессором того же типа в вашем ноутбуке. Это открывает мир возможностей с точки зрения того, какое программное обеспечение может запускать Edison.
Лучший способ начать работу — приобрести комплект Arduino для Edison. Эта плата предоставляет все входы/выходы гораздо более удобным способом. Я бы также порекомендовал приобрести Grove Starter Kit, чтобы легко получить доступ к некоторым простым датчикам, хотя это может не потребоваться в зависимости от вашего конкретного случая использования.Подключить Edison к комплекту Arduino очень просто. Просто вставьте вычислительный модуль в разъем и закрепите его с помощью прилагаемых гаек.
Как прошить Intel Edison
Edison поставляется с предустановленной Yocto Linux. Поскольку Edison новый и разработка идет быстрыми темпами, возможно, стоит прошить его самым последним образом.
1. Скачайте и установите Flash Utility
Если вы работаете в Windows, первое, что вам нужно сделать, это установить правильные драйверы. Затем вам потребуется установить утилиту флэш-памяти, следуя инструкциям для Windows, Mac или Linux.
2. Загрузите прошивку Edison
Следующий шаг — загрузка микропрограммы на компьютер. Вы захотите загрузить последнюю версию полного образа Yocto. На момент написания этой статьи это была версия 2.1.
3. Вспышка Эдисона
Если вы уже подключили Edison к сети, отключите его сейчас. Откройте утилиту флэш-памяти и перейдите к извлеченной прошивке. Внутри извлеченного содержимого будет файл с именем FlashEdison.json. Это то, что вам нужно.
Не отключайте Edison от сети и нажмите кнопку "Начать прошивку".
Сразу после того, как вы нажмете "Start to Flash", интерфейс предложит вам подключить Edison.
Edison имеет два порта USB. Правильный порт для перепрошивки — ближайший к входу питания, помечен J16. Другой порт предназначен для последовательной связи, о которой мы поговорим позже в этом руководстве.
Если вы используете меньший комплект коммутационной платы, правильный порт — ближайший к низу, который также помечен J16.
После того, как вы подключите Edison, утилита начнет отображать ход выполнения.
У нас было несколько проблем с работой этой утилиты в Windows 10 и OS X El Capitan. Он хорошо работает на OS X Yosemite. Я предполагаю, что Intel скоро обновит инструменты для решения этой проблемы.
Как подключиться к Edison через последовательный порт
Следующее, что вам нужно сделать, это получить доступ к оболочке для использования и настройки Edison. Именно здесь появляется второй USB-порт. Когда вы подключаете его к компьютеру, он предоставляет USB-устройство с последовательным интерфейсом, через которое мы можем обмениваться данными.
На приведенном выше рисунке красный USB-кабель подключен к последовательному USB-порту Edison.
Как подключиться к Edison Serial с помощью Mac
Когда вы подключаете последовательный порт к вашему Mac, он монтируется как устройство в /dev. Чтобы найти нужное устройство, я обычно использую терминал для поиска в папке /dev, чтобы найти последовательное USB-устройство.На Mac у меня иногда возникают проблемы с отображением устройства, поэтому мне приходится менять порты USB и отключать/переподключать, пока оно не заработает.
После того, как устройство появится, вы можете использовать встроенную утилиту «экран», чтобы подключиться к нему с помощью последовательного порта.
При первом подключении вы увидите пустой экран. Нажмите Enter один раз, чтобы вывод начал отображаться. В этот момент мне иногда предлагают ввести пароль. Просто нажмите Enter еще раз, чтобы вызвать приглашение для входа в систему. Пользователь по умолчанию для входа в Edison — «root». Введите это и нажмите Enter. По умолчанию пароль отсутствует, поэтому вы сразу же попадете в подсказку. Теперь у вас есть доступ к оболочке вашего Intel Edison.
Как подключиться к Edison Serial с помощью Windows
Когда вы подключаете Edison к компьютеру с Windows, он монтируется как последовательное USB-устройство. Чтобы найти устройство, откройте Диспетчер устройств и разверните раздел «Порты (COM и LPT)». Устройство и его COM-порт будут перечислены.
На моем компьютере с Windows Edison монтировался как COM5. Этот номер будет меняться почти каждый раз, когда вы подключаете устройство, поэтому вам придется каждый раз проверять его.
В Windows вам потребуется загрузить внешний инструмент для подключения к последовательным устройствам. Лучшим инструментом для этой работы является Putty, который представляет собой автономный исполняемый файл. Просто скачайте и запустите его.
После запуска Putty выберите переключатель «Серийный», введите номер COM, который вы нашли в диспетчере устройств, и установите скорость 115200. После ввода данных нажмите «Открыть». Вам может быть представлен пустой экран, нажмите Enter один раз, чтобы увидеть результат.
При первом подключении вы увидите пустой экран. Нажмите Enter один раз, чтобы вывод начал отображаться. В этот момент мне иногда предлагают ввести пароль. Просто нажмите Enter еще раз, чтобы вызвать приглашение для входа в систему. Пользователь по умолчанию для входа в Edison — «root». Введите это и нажмите Enter. По умолчанию пароль отсутствует, поэтому вы сразу же попадете в подсказку. Теперь у вас есть доступ к оболочке вашего Intel Edison.
Как подключить Edison к Wi-Fi
После того, как вы успешно подключились к Edison с помощью последовательного порта, теперь вы можете запустить встроенный инструмент настройки, чтобы установить пароль пользователя и добавить Edison в свою сеть Wi-Fi.
Это запустит инструмент командной строки, который проведет вас через различные этапы настройки. Вопросы просты, а конфигурация проста для понимания.
После того, как вы завершите этап настройки Wi-Fi, вам будет показан IP-адрес Edison. Вы можете запросить это в браузере вашего компьютера, чтобы проверить, правильно ли настроен Edison.
Если вам нужно настроить только Wi-Fi, не используя весь инструмент настройки, вы можете запустить его с параметром --wifi.
Как подключиться к Edison по SSH
По умолчанию Edison поставляется с отключенным SSH. После того, как вы пройдете процесс настройки, описанный выше, и установите пароль для учетной записи root, он автоматически активирует SSH для вас.
В приведенном выше примере показано, как подключиться к Edison по SSH с помощью Mac. IP-адрес отображается Edison в конце этапа настройки Wi-Fi. Вводимый вами пароль — это тот же пароль, который вы указали для Edison во время настройки. Если вы пропустили настройку пароля, SSH все равно будет отключен.
Если вы используете Windows, я бы рекомендовал использовать Putty для SSH в Edison.
Блок Arduino для Edison предоставляет Intel(R) Edison прямую последовательную связь с микропроцессором ATmega328, совместимым с Arduino.
Зачем вам нужен Arduino, подключенный к вашему Edison? Разве он не достаточно мощный, чтобы справиться со всем, что может быть брошено на него? В том-то и проблема - он почти слишком мощный. Поскольку он работает под управлением операционной системы, он не способен к обработке данных в реальном времени — хлеб с маслом для небольших микроконтроллеров, таких как ATmega328. Компоненты, требующие точной синхронизации, например светодиоды WS2812 или серводвигатели, могут быть несовместимы с Edison, поскольку он не может надежно генерировать тактовые сигналы.
Блок Arduino позволяет Edison разгрузить аппаратные задачи более низкого уровня. Кроме того, если вы уже написали код Arduino для внешнего компонента, вам не нужно портировать этот код на Edison — просто запустите его на блоке Arduino!
Рекомендуемое чтение
Если вы не знакомы с блоками, ознакомьтесь с общим руководством по блокам Sparkfun для Intel Edison.
Другие учебные пособия, которые могут помочь вам в вашем приключении с Arduino Block, включают:
Обзор доски
- Разъем расширения. 70-контактный разъем расширения раскрывает функциональность Intel Edison. Этот заголовок также передает сигналы и питание по всему стеку. Они работают так же, как Arduino Shield.
- Контакты ввода-вывода Arduino. Все контакты ввода-вывода Arduino разбиты на пару разъемов (плюс пара между ними). Размер этого разъема точно соответствует корпусу Arduino Pro Mini — если у вас есть какие-либо экраны Mini, они должны точно соответствовать этому разъему.
- Разъем программирования Arduino. Стандартный 6-контактный разъем FTDI используется для программирования последовательного загрузчика Arduino. Подключите 3,3 В FTDI Basic, чтобы запрограммировать Arduino.
- Светодиод D13. Каждому хорошему Arduino нужен светодиод! Этот маленький зеленый светодиод подключен к 13-му контакту Arduino. Он отлично подходит для мигания «Hello, world» или отладки.
- Индикатор питания. Блок Arduino имеет встроенный регулятор напряжения 3,3 В, и этот светодиод привязан к выходу этого стабилизатора.
- Кнопка сброса Arduino. Эта кнопка сброса привязана к линии сброса Arduino. Это только перезагрузит Arduino; это не влияет на Edison.
Обзор схемы
Блок Arduino соединяет ATmega328 с вашим Edison через один из двух UART. Плата по умолчанию подключает Arduino к Edison через UART1. Перемычки (подробнее см. ниже) позволяют выбрать UART2, если этого требует ваше приложение. Однако будьте осторожны при использовании UART2, его утилита по умолчанию предназначена для консольного доступа к Edison.
Блок Arduino имеет встроенный регулятор напряжения 3,3 В, который получает вход от шины VSYS Edison. Поскольку Arduino работает при напряжении 3,3 В, его тактовая частота ограничена 8 МГц.
Если вы хотите более подробно ознакомиться со схемой, загрузите PDF-файл здесь.
Перемычки
На задней стороне блока Arduino есть несколько перемычек, которые придают плате дополнительную полезность.
Три двусторонних перемычки — для RX, TX и DTR — позволяют выбирать между UART1 (по умолчанию) и UART2. Чтобы переключить эти перемычки, возьмите канцелярский нож, отрежьте дорожки по умолчанию и поместите каплю припоя между средней контактной площадкой и внешней контактной площадкой по вашему выбору.
Перемычка с надписью VIN/VSYS позволяет отключить линию VSYS от питания блока Arduino. Это удобно, если вам нужно изолировать источник питания блока Arduino от Edison. В этом случае вам потребуется внешнее питание (3,3–12 В) через контакт "VIN".
Использование блока Arduino
Чтобы использовать блок Arduino, подключите его либо к Edison, либо добавьте к стопке других блоков SparkFun.
Для подачи питания на ваш Edison вам понадобится как минимум один дополнительный блок в вашем стеке. Например, вы можете использовать базовый блок или аккумуляторный блок.
Программирование Arduino
Arduino на блоке Arduino можно запрограммировать, когда он включен или выключен из Edison. Однако в зависимости от вашего приложения рекомендуется загружать код на Arduino, пока он отключен от стека Edison, прежде чем добавлять его в остальную часть системы.
Если вы когда-либо загружали скетч Arduino в Arduino Pro или Pro Mini, вы уже знакомы с загрузкой кода в блок Arduino. Подключите FTDI Basic 3,3 В к 6-контактному разъему FTDI на плате.
В Arduino (версия Arduino, отличная от Edison!), выберите «Arduino Pro или Pro Mini 3,3 В/8 МГц» в меню «Инструменты» > «Плата». Если вы используете последнюю версию Arduino (1.6 или более позднюю), сначала выберите Arduino Pro или Pro Mini в меню «Плата».
Затем выберите ATmega328 (3,3 В, 8 МГц) в меню "Процессор".
Тогда загрузите!
Использование выводов Arduino
Все контакты ввода-вывода Arduino разделены на пару разъемов. Эти разъемы точно соответствуют Arduino Pro Mini. Если у вас есть какие-либо экраны или дополнительные платы для Pro Mini, они должны без проблем работать с блоком Arduino.
К этим контактам можно припаять разъемы, провода или любые другие разъемы.
Если вы припаиваете разъемы к контактам, будьте особенно внимательны при выборе стороны припайки. В зависимости от остальной части вашего стека Edison эти разъемы могут мешать разъемам на других платах (в частности, разъемам USB на базовом и консольном блоках).
Подключение Edison к Arduino
Блок Arduino соединяет Arduino с Edison через последовательное соединение (UART). Перемычки на обратной стороне платы позволяют вам выбрать, какой из двух UART Edison соединяется с Arduino. Если вы не можете избежать этого, мы рекомендуем оставить перемычки в конфигурации по умолчанию — UART2 Edison обычно предназначен для доступа к консоли.
Чтобы запрограммировать Edison для управления и взаимодействия с Arduino, вам потребуется использовать UART для установления протокола связи между устройствами. В следующем разделе приведен простой пример связи UART между Arduino и Edison.
Управление блоком Arduino с помощью Firmata
Firmata — это общепризнанный протокол, популярный в среде Arduino для приложений, которым требуется отдельная машина (обычно компьютер) для управления Arduino. Это последовательный протокол, который использует определенные сообщения для установки цифровых выводов, считывания аналоговых выводов и всего остального, к чему вы привыкли в Arduino.
Firmata настолько полезна, что стандартная среда разработки Arduino IDE даже поставляется с библиотекой Firmata. Вот пример того, как можно использовать Edison для управления и взаимодействия с Arduino под управлением Firmata.
Загрузить StandardFirmata в Arduino
Прежде чем загружать какой-либо код в Edison, давайте загрузим что-нибудь в Arduino. Как только код Firmata запустится на вашем Arduino, вам, возможно, больше никогда не придется загружать туда код.
Используя стандартную среду разработки Arduino (т. е. не среду разработки, созданную для Edison), загрузите скетч «StandardFirmata», выбрав «Файл» > «Примеры» > «Firmata» > «StandardFirmata».
Загрузив прошивку Firmata, вы можете отключить FTDI Basic и подключить блок Arduino к вашему стеку Edison.
Edison Firmata для клиента Arduino
Самая сложная часть этого уравнения — написать что-то, что выполняется на Edison и взаимодействует с нашей Arduino под управлением Firmata. В профиле Firmata GitHub есть множество отличных примеров клиентов, но ничего не создано для Edison.
На основе примера обработки Firmata мы написали этот скетч для реализации клиента Edison Firmata.
Предупреждение о версии Arduino! Этот скетч Arduino предназначен для работы на Edison. Вам нужно будет загрузить Edison Arduino IDE и использовать его для загрузки этого кода в ваш Edison. Для получения дополнительной помощи по программированию Edison в Arduino ознакомьтесь с нашим руководством по началу работы с Edison.
Вот эскиз. Скопируйте/вставьте снизу или возьмите последнюю версию из Gist:
После загрузки этого скетча в Edison ваш блок Arduino должен начать мигать на выводе D13. Вы также можете открыть Serial Monitor, чтобы увидеть, какие значения считывает ваш блок Arduino на D4 и A0.
Это простой клиент Firmata для Edison, но его легко расширять.Попробуйте использовать любую из этих функций (определенных в нижних частях эскиза), чтобы добавить дополнительные функции в ваш клиент Edison Firmata:
- firmata_pinMode([pin], [mode]) — Как и в любом скетче Arduino, установка режима вывода имеет решающее значение. Firmata требует дополнительной информации. Используйте любой вывод Arduino для переменной [pin]. Для переменной [mode] используйте MODE_INPUT, MODE_OUTPUT, MODE_ANALOG, MODE_PWM, MODE_SERVO или MODE_SHIFT.
- firmata_digitalRead([pin]) -- считывает цифровое значение вывода. Эта функция вернет значение от 0 до 1. Этот контакт должен быть установлен как MODE_INPUT перед вызовом этой функции.
- firmata_analogRead([pin]) -- считывает значение аналогового вывода. Эта функция вернет значение от 0 до 1023. Перед чтением выводы должны быть установлены как MODE_ANALOG.
- firmata_digitalWrite([pin], [value]) -- Запишите цифровой контакт либо HIGH, либо LOW. Пин должен быть установлен как MODE_OUTPUT перед вызовом функции.
- firmata_analogWrite([pin], [value]) -- Запишите на контакт аналогового выхода значение от 0 до 255. Контакт должен быть с поддержкой PWM -- это означает, что контакт 3, 5, 6, 9, 10 или 11. И он должен быть предварительно настроен как MODE_PWM.
- firmata_servoWrite([pin], [value]) -- Установите вывод для вывода сервосигнала. Значение здесь представляет собой угол между 0 и любым максимальным углом вашего сервопривода. Не забудьте установить вывод в MODE_SERVO перед вызовом этой функции!
Не думайте, что вам нужно использовать Firmata при использовании блока Arduino с вашим Edison. Тем не менее, это отличное место для начала, если вы ищете простой протокол связи через последовательный интерфейс.
Ресурсы и дальнейшее развитие
Теперь, когда у вас есть краткий обзор блока Arduino, взгляните на некоторые из этих других руководств. Эти руководства охватывают программирование, стекирование блоков и взаимодействие с экосистемами Intel Edison.
Драйвер последовательного ввода-вывода Intel требуется для таких хост-контроллеров, как I2C, UART и GPIO. Вы можете найти это в диспетчере устройств на вашем ПК. … Основная цель UART — передавать и получать последовательные данные. UART, который будет передавать данные, получает данные от шины данных.
Нужен ли мне Intel Serial IO? Драйвер Intel Serial IO требуется, если вы планируете использовать хост-контроллеры I2C, UART или GPIO. Если вы их не используете, скорее всего, вы этого и не заметите.
Кроме того, что такое последовательный ввод-вывод?, последовательный ввод-вывод (SIO) Метод передачи данных между устройствами, обычно компьютером и его периферийными устройствами, при этом отдельные биты данных отправляются последовательно. … Асинхронная последовательная связь более гибкая, тогда как синхронная последовательная связь лучше использует доступную полосу пропускания.
Наконец, для чего нужен драйвер последовательного ввода-вывода? Драйвер последовательного ввода-вывода Intel обеспечивает связь и передачу данных между подключенными устройствами и системой. …
Часто задаваемые вопросы:
Как найти драйвер последовательного ввода-вывода?
Способ 1. Получите драйвер с официального сайта Intel
- 1) Перейдите на официальный веб-сайт Intel и выполните поиск «драйвер последовательного ввода-вывода».
- 2) Перейдите на страницу загрузки этого драйвера, затем загрузите его правильную и последнюю версию.
Что такое драйвер последовательного ввода-вывода?
Драйвер последовательного ввода-вывода Intel обеспечивает связь и передачу данных между подключенными устройствами и системой. …
Как загрузить драйверы последовательного ввода-вывода?
Вот как это сделать:
- 1) Перейдите на официальный веб-сайт Intel и выполните поиск «драйвер последовательного ввода-вывода».
- 2) Перейдите на страницу загрузки этого драйвера, затем загрузите его правильную и последнюю версию.
- 3) Откройте загруженный файл и следуйте инструкциям на экране, чтобы установить драйвер на свой компьютер.
Что такое драйвер Intel Serial IO UART?
Основной целью UART является передача и получение последовательных данных. UART, который будет передавать данные, получает данные от шины данных. Шина данных используется для отправки данных в UART другим устройством, таким как ЦП, память или микроконтроллер.
Нужны ли драйверы Intel Serial IO?
Драйвер Intel Serial IO требуется, если вы планируете использовать хост-контроллеры I2C, UART или GPIO. Если вы их не используете, скорее всего, вы этого и не заметите.
Нужны ли драйверы последовательного ввода-вывода?
Драйвер Intel Serial IO требуется, если вы планируете использовать хост-контроллеры I2C, UART или GPIO. Если вы их не используете, скорее всего, вы этого и не заметите.
Что такое последовательный ввод-вывод?
последовательный ввод/вывод (SIO) Метод передачи данных между устройствами, обычно компьютером и его периферийными устройствами, при этом отдельные биты данных отправляются последовательно. … Асинхронная последовательная связь более гибкая, тогда как синхронная последовательная связь лучше использует доступную полосу пропускания.
Должен ли я удалить Intel Serial IO?
Можно ли их удалить?Intel Management Engine — это набор инструментов для расширенного и безопасного удаленного управления. Если вы не находитесь в какой-то корпоративной среде, маловероятно, что вам это понадобится. Intel Serial IO выглядит так, как будто он предназначен специально для линейки компьютеров NUC.
Как найти драйвер последовательного ввода-вывода?
Способ 1. Получите драйвер с официального сайта Intel
- 1) Перейдите на официальный веб-сайт Intel и выполните поиск «драйвер последовательного ввода-вывода».
- 2) Перейдите на страницу загрузки этого драйвера, затем загрузите его правильную и последнюю версию.
Что такое Intel Serial IO?
Драйвер последовательного ввода-вывода Intel требуется для таких хост-контроллеров, как I2C, UART и GPIO. Вы можете найти это в диспетчере устройств на вашем ПК. … Основная цель UART — передавать и получать последовательные данные. UART, который будет передавать данные, получает данные от шины данных.
Должен ли я удалить Intel Serial IO?
Можно ли их удалить? Intel Management Engine — это набор инструментов для расширенного и безопасного удаленного управления. Если вы не находитесь в какой-то корпоративной среде, маловероятно, что вам это понадобится. Intel Serial IO выглядит так, как будто он предназначен специально для линейки компьютеров NUC.
Для чего используется драйвер последовательного ввода-вывода?
Драйвер последовательного ввода-вывода Intel обеспечивает связь и передачу данных между подключенными устройствами и системой.
Нужен ли Intel Serial IO?
Драйвер Intel Serial IO требуется, если вы планируете использовать хост-контроллеры I2C, UART или GPIO. Если вы их не используете, скорее всего, вы этого и не заметите.
Что такое Intel Serial IO?
Драйвер последовательного ввода-вывода Intel обеспечивает связь и передачу данных между подключенными устройствами и системой. …
Должен ли я удалить Intel Serial IO?
Можно ли их удалить? Intel Management Engine — это набор инструментов для расширенного и безопасного удаленного управления. Если вы не находитесь в какой-то корпоративной среде, маловероятно, что вам это понадобится. Intel Serial IO выглядит так, как будто он предназначен специально для линейки компьютеров NUC.
Для чего используется драйвер последовательного ввода-вывода?
Драйвер последовательного ввода-вывода Intel обеспечивает связь и передачу данных между подключенными устройствами и системой.
Что такое последовательный хост-контроллер Intel?
Драйвер ввода-вывода отвечает за возможность соединения между хост-контроллером и различным оборудованием и операционной системой. Это отдельный, но обязательный компонент пакета информации о наборе микросхем Intel для многих систем.
Читайте также: