Lufa библиотека: Библиотека LUFA: как добавить поддержку собственной платы с чипом AVR USB | avr-working-with-usb

LUFA — бесплатная библиотека USB для микроконтроллеров Atmel AVR | avr-working-with-usb

LUFA переводится как Lightweight USB Framework for AVRs, т. е. «облегченная рабочая среда USB для микроконтроллеров AVR» (старое название библиотеки MyUSB). Это библиотека и примеры программ (все с открытыми исходными кодами, разрешающая лицензия MIT), реализующие полный стек протоколов USB на микроконтроллерах ATmel, которые имеют аппаратную поддержку интерфейса USB — серии AT90USBxxxx and ATMEGAxxUx, например AT90USB162. Поддерживаются все известные Atmel USB AVR и отладочные платы USB AVR.

Библиотека в настоящий момент имеет стабильные релизы, доступные для загрузки и использования в проектах пользователей. Поддерживается работа в режиме USB устройства и USB хоста (режим хоста имеет некоторые ограничения).

Библиотека LUFA написана специально для бесплатного компилятора AVR-GCC и использует некоторые выражения языка, специфичные только для GCC — чтобы сделать интерфейс

API библиотеки более наглядным и упрощенным. В среде Windows для использования AVR-GCC можно свободно скачать и использовать пакет WinAVR.

В архив библиотеки LUFA добавлены многочисленные примеры демонстрационных программ, которые показывают, как использовать библиотеку. Примеры разработаны для макетных плат USBKEY, STK525, STK526, EVK527, XPLAIN и RZUSBSTICK (в большинстве случаев в двух вариантах — Low Level API и USB Class Driver). Вот список примеров:

    * USB хост аксессуара Android
    * USB устройство Audio In
    * USB хост Audio In
    * USB устройство Audio Out
    * USB хост Audio Out
    * Bulk Vendor Device
    * USB устройство двухканального MIDI (Dual MIDI Device)
    * USB устройство двухканального виртуального COM-порта (Dual

Virtual Serial Device)
    * Стандартное устройство USB HID (Generic HID Device)
    * Хост стандартного устройства USB HID (Generic HID Host)
    * USB джойстик
    * USB хост джойстика
    * USB клавиатура
    * USB устройство клавиатура/мышь
    * USB хост клавиатуры
    * USB клавиатура в двойном режиме (хост или устройство)
    * устройство памяти USB («флешка», MSD, Mass Storage Device)
    * USB устройство Mass Storage/клавиатура
    * USB хост Mass Storage
    * USB устройство MIDI Device
    * USB хост MIDI
    * USB мышь
    * USB хост мыши
    * USB хост принтера
    * USB устройство Ethernet RNDIS (CDC)
    * Хост Ethernet RNDIS (CDC)
    * Хост Still Image
    * USB устройство виртуального последовательного порта
    * USB устройство виртуального последовательного порта и мыши
    * Комбинированное USB устройство Virtual Serial / Mass Storage Device
    * USB хост виртуального последовательного порта

Пакет библиотеки LUFA также содержит загрузчики программного кода (bootloader) для следующих классов USB:

    * Класс CDC, протокол совместим с AVR109 (AVRDude)
    * Класс DFU, протокол совместим с Atmel DFU (Atmel FLIP, программатор DFU)
    * Класс HID, протокол Teensy (Teensy Loader)
    * Класс Printer, который использует драйверы USB, встроенные в операционную систему
    * Класс Mass Storage, который использует драйверы USB, встроенные в операционную систему

В пакете библиотеки LUFA имеются также следующие проекты с открытым исходным кодом:

    * Адаптер программатора Arduino для макетной платы Benito board
    * Клон программатора AVRISP-MKII, совместимого со средой программирования AVR Studio (поддерживаются протоколы ISP, PDI и TPI) [6]

    * USB хост пусковой установки ракет от Дейва Флетчера
    * Считывающее устройство для магнитной полосы, совместимый Stripe Snoop от Денвера Джинджерича
    * HID Device Report viewer
    * Проект светодиодной (LED) напоминалки, с несколькими примерами для . NET хоста
    * Контроллер медиа-плеера
    * Тональный генератор MIDI
    * Проект контроллера для управления реле (OBinou Relay Board)
    * Переходник USB — последовательный порт
    * Логгер данных температуры, который записывает данные в собственную память Dataflash, в дисковый раздел FAT
    * Веб-сервер с использованием uIP, работающий через подключенное устройство RNDIS
    * Программатор XPLAIN PDI, основанный на мосте UART — USB

[Отличия LUFA от стека библиотек Atmel

]

Atmel предоставляет официальный стек библиотек USB AVR stack, который может использоваться в пользовательских проектах и продуктах. Так как и LUFA, и стек Atmel предназначен для одной и той же цели и функциональности в проектировании устройств USB, то часто спрашивают — чем лучше LUFA по  сравнению с официальным стеком библиотек Atmel USB stack. Ниже описаны некоторые из преимуществ LUFA по отношению к официальному стеку.

Лицензирование: LUFA выпущен в соответствии с очень либеральной лицензией MIT (см. Source Code License), в то время как стек Atmel вводит несколько ограничений относительно того, как и где её библиотека может использоваться. Лицензирование LUFA одинаково хорошо подходит и для коммерческих и для некоммерческих объектов.

Демонстрационные примеры и проекты: в отличие от стека Atmel, LUFA поставляется со многими демонстрационными примерами для режима устройства USB и режима хоста USB в проектах, готовых для немедленного запуска. У Atmel отдельные примеры разбросаны по разным местам демонстрационных примеров AVR USB, что требует большего количества времени для поиска и предлагает меньше вариантов конечному пользователю. LUFA также содержит несколько загрузчиков (bootloader CDC и DFU) с открытым исходным кодом, которые могут быть изменены в соответствии с пожеланиями пользователя вместо того, чтобы быть вынужденным использовать единственный предварительно созданный загрузчик DFU Atmel (с закрытым исходным кодом).

Central Library Code: LUFA разработан, чтобы позволить коду ядра центральной библиотеки быть совместно использованным среди нескольких проектов (при условии очистки make clean скомпилированных объектных файлов между различными проектами). Это находится на прямом контрасте по отношению к библиотеке Atmel — библиотека Atmel строго связана с проектом, в который интегрирована. LUFA позволяет использовать только одну копию ядра библиотеки, которое будет необходимо для всех приложений, и делает обновление библиотеки используемым во всех проектах тривиальный процессом copy-and-paste.

Чистый API: одна из основных целей проекта LUFA состоит в том, чтобы сделать API удобным. В то время как LUFA — гибкий проект, который подвергся многим усовершенствованиям API, то его проще использовать и легче понять, чем эквивалентный код стека Atmel. API LUFA более полон, чем стек Atmel, и содержит много функций, чтобы ускорить разработку приложений.

Полная поддержка аппаратных средств: LUFA поддерживает весь ряд микроконтроллеров AVR USB Atmel (см.

«Device and Hardware Support» в документации LUFA), с портированием между микросхемами, являющимися во многих случаях столь же простым, как единственный переключатель компиляции (makefile -> MCU). Стек Atmel требует, чтобы различные библиотеки использовались на основании определенной серии микроконтроллера AVR USB, что усложняет процесс перемещения между моделями AVR USB. Кроме того, LUFA содержит драйверы для всех аппаратных средств, содержащихся на базовых макетных платах AVR USB Atmel (и многих популярных платах других производителей), благодаря чему Вы можете быстро и легко начать программировать на LUFA.

Лучшая поддержка Библиотеки: так как множество людей теперь используют LUFA, вокруг этой библиотеки появилось сообщество. Вы можете быстро получить ответы на вопросы, связанные с LUFA электронной почтой от автора библиотеки, или отправив запрос на официальный LUFA support mailing list.

LUFA не единственный (хотя наверное, наилучший) стек, доступный для AVR USB. Здесь перечислены другие известные стеки AVR USB.

[Проекты, основанные на библиотеке LUFA]

LUFA в настоящий момент используется повсюду в мире, во многих приложениях — коммерческих и некоммерческих. Ниже приведен список (состояние на начало 2011 года) известных публичных проектов, основанных на LUFA, использующих библиотеку LUFA разными способами. Для получения дополнительной информации о каждом проекте посетите их домашнюю страницу. Если у Вас есть проект, который Вы хотели бы добавить в этот список, напишите автору библиотеки LUFA.

Платы для разработки (Development Boards) AVR-USB, использующие LUFA

В следующем списке — известные платы для разработки программ с микроконтроллерами AVR USB, с которыми рекомендуется использовать LUFA для стека USB. Некоторые из них имеют открытый дизайн, и все доступны для приобретения как полноценные макетные платы для разработки.

— AVR-USB-162 site:olimex.com, похожая на USBKEY плата разработки для чипа AT90USB162
— Duce Benito site:dorkbotpdx. org, простейшая плата USB
— JM-DB-U2, плата разработки на чипе ATMEGA32U2, MT-DB-U2 (MT-DB-U1) site:u2.mattair.net ATmega32U2 (AT90USB162) USB Dev Board
— Micropendous site:micropendous.org, набор плат разработчика AVR USB с открытым дизайном и исходниками
— Макетная плата Microsin AVR-USB162, DIY-плата разработчика на чипе AT90USB162
— Minimus USB site:minimususb.com — плата, специально разработанная для PSGroove
— Nanduino, самодельная плата на чипе AT90USB162

— Teensy, Teensy++ site:pjrc.com, две другие платы разработчика AVR USB
— U2DIL/U4DIL site:reworld.eu, набор плат USB AVR с разводкой DIP
— USBFOO V2 — AVR USB Device site:kernelconcepts.de, плата разработчика, основанная на чипе AT90USB162

Хобби-проекты с использованием LUFA

Далее идут известные хобби-проекты, использующие библиотеку LUFA. Многие открыты (open source), и показывают интересные  способы, с которыми библиотека LUFA может быть интегрирована в многие приложения.

— Arduino + accelerometer as joystick for Second Life site:cjdavies.org, игровой джойстик с акселерометром
— USB Arcade Joystick using a Minimus 32 site:jamie.lentin.co.uk, аркадный контроллер
— avrusbmodem site:code.google.com, модем AVR USB, беспроводной хост модема 3G
— bicycleledpov site:code.google.com, Bicycle POV — анимационные изображения на крутящемся колесе велосипеда
— bus-ninja AVR Bus-Pirate-a-like site:github.com, AVR-клон популярного проекта BusPirate
— CAMTRIG Camera trigger device with precise timing and analog input site:code.astraw.com, дистанционное устройство триггера камеры
— USB CD Emulation site:cdemu.blogspot.com — донгл эмулятор драйвера CD для файлов ISO
— clock-tamer site:code.google.com, ClockTamer, конфигурируемый тактовый генератор
— EMuSer (previously called EmuComBox) site:users.skynet.be, адаптер USB-RS422 для семплеров E-Mu Emax
— Estick JTAG site:code.google.com, ARM JTAG отладчик
— MIDI Fingerlicking Wingdinger site:noisybox. net, контроллер MIDI
— garmin-transmogrifier site:github.com — транслятор последовательных выражений Garmin GPS USB в стандарт NMEA
— Generic HID — DIY USB HID site:generichid.sourceforge.net, генератор стандартных устройств HID (Generic HID Device Creator)
— Ghetto Drum site:noisybox.net, контроллер MIDI барабана
— Hacking a USB Infrared receiver site:netzhansa.blogspot.com — декодер посылок инфракрасного пульта (IR Remote) в нажатия клавиатуры
— Panels Controller site:projects.peterpolidoro.net — контроллер светодиодной панели (LED Panel controller)
— PSGroove site:github.com, доморощенный донгл для взлома Playstation 3
— Bumble-b control a LED matrix site:guysoft.wordpress.com — одиночный символьный индикатор, матричный светодиодный дисплей (Single LED Matrix Display)
— TomMD / teensy site:github.com — донгл защищенного хранилища Linux (Linux Secure Storage Dongle)
— MakeTV Episode Dispenser
— Midi Monster site:dorkbotpdx.org, плата шлюза USB-MIDI
— Mobo 4. 3 Project site:sites.google.com, управляемый по USB вседиапазонный (160..10 метров) трансивер HF SDR
— Nintendo NES controller as a USB joystick site:projects.peterpolidoro.net, USB-модификация контроллера NES
— Opendous-JTAG, open source отладчик ARM JTAG
— OpenKubus site:code.google.com, аппаратный open source донгл для аутентификации
— Orbee — USB controlled glowing orb Orbee site:franksworkshop.com.au, a USB connected RGB Orb for notifications
— Pan-Galactic Gargantuan Gargle Brain (PG3B) site:code.google.com — программируемый контроллер XBOX
— Reprap LUFA site:code.google.com, основанный на LUFA 3D-принтер
— Teensy2 USB Mass Storage with an SD card site:elasticsheep.com — ридер карт SD
— UMDKv1, UMDKv2 site:makestuff.eu — картридж SEGA Megadrive/Genesis Development
— Stripe Snoop USB Adapter site:ossguy.com, ридер магнитных карт
— Teensy2 USB WAV player site:elasticsheep.com — проигрыватель WAV-файлов на карте SD
— Touchscreen USB site:capnstech. blogspot.ru — сенсорный экран (Touchscreen Input Device)
— Интерфейс USB для устройств Playstation Portable
— Userial, конвертер USB <—> Serial с поддержкой протоколов SPI, I2C и других
— XUM1541 firmware for the ZoomFloppy site:root.org, адаптер для Commodore 64 — драйв floppy в USB

Коммерческие проекты на библиотеке LUFA

Следующий список показывает известные коммерческие продукты на библиотеке LUFA. Некоторые из них — открытый исходный код, хотя многие — «черный ящик», без предоставленного исходного кода.

— Arduino Uno site:arduino.cc, официальная плата Arduino
— Digital Survey Instruments site:indiamart.com — магнитометр и указатель
— Penguino AVR, плата Arduino со встроенным отладчиком/программатором, основанном на LUFA
— PIR-1 site:promixis.com, интерфейс инфракрасного управления для потребительской электроники
— busware.de projects site:busware.de — множество продуктов компании Busware
— MIDIFighter site:midifighter. com, контроллер USB-MIDI
— Retrode site:retrode.org, USB ридер картриджа игровой консоли (USB Games Console Cartridge Reader)
— USBTiny MkII Programmer site:tom-itx.dyndns.org, клон программатора AVRISP-MKII
— xmega site:xmega.mattair.net — плата разработки на XMEGA, использующая LUFA на встроенном программаторе

[Альтернативные стеки библиотек USB AVR — Аппаратные стеки (Hardware USB AVR Stacks)]

Это известные альтернативные стеки USB, которые разработаны для и выполнены исключительно на серийных микроконтроллерах AVR USB, которые содержат аппаратные средства контроллера USB на микросхеме — с целью получения максимальной скорости и наибольшего количества функций.

Name: Atmel USB AVR Stack (Atmel Inc.)
Стоимость: Free (бесплатно)
License: ограниченная лицензия Atmel (Atmel Limited License, подробности см. в Atmel download)
Website: http://atmel.com/dyn/products/app_notes.asp?family_id=607#USB
Описание: официальный стек AVR USB Atmel для их 8-разрядной линейки AVR USB. Каждая серия AVR USB разделена на отдельный стек библиотеки для загрузки, который является совместимым и для AVR-GCC и и для IAR.

Name: Dr. Stefan Salewski’s AT90USB1287 Stack (Dr. Stefan Salewski)
Стоимость: Free (бесплатно)
License: GPL
Website: http://www.ssalewski.de/AT90USB_firmware.html.en
Описание: GPL-библиотека, специально предназначенная для AT90USB1287, написанная доктором Штефаном Салевским, немецким Физиком. Компилируется для AVR-GCC и потенциально может быть изменена, чтобы работать над другими моделями AVR USB.

Name: PJRC Teensy Stack (Paul Stoffregen)
Стоимость: Free (бесплатно)
License: BSD
Website: http://www.pjrc.com/teensy/usb_debug_only.html
Описание: несколько неполный стек в виде как набора демонстрационных примеров USB, эта библиотека специально предназначена для линейки PJRC Teensy AVR USB и должна быть изменена для использования с другими микроконтроллерами AVR USB. Эти минимальные примеры кода показывают внутреннее функционирование контроллера USB без абстракции, существующей в большинстве других стеков AVR USB.

[Альтернативные стеки библиотек USB AVR — программные стеки(Software AVR Stacks)]

Известные альтернативные стеки USB, которые могут работать на обычных (без аппаратной поддержки USB) моделях AVR. Используется bit-banged (эмулированная) версия протокола USB. Стек ограничен в возможностях из-за циклов, требуемых для выделения поддержкой шины USB, но предлагает дешевый способ реализовать функциональность USB в проекте.

Name: AVR309: Software USB (Atmel)
Стоимость: Free (бесплатно)
License: не установлена (None Stated)
Website: http://www.atmel.com/dyn/Products/app_notes.asp?family_id=607
Описание: официальная программная реализация USB от Atmel, в виде апноута, содержащего работу Igor Cesko. Минимальная реализация на языке ассемблера, обеспечивающая только работу USB HID. Меньше опций компиляции, чем у библиотеки V-USB (см. ниже).

Name: V-USB (Objective Development)
Стоимость: бесплатно (Free) для некоторых пользователей, см. описание лицензии на сайте Objective Development
License: Dual GPL2/Custom
Website: http://www.obdev.at/products/vusb/index.html
Описание: хорошо реализованный и полный USB 1.1 стек программного обеспечения для нескольких моделей AVR. В основном реализовывается Низкоскоростной HID. Используется во многих коммерческих и некоммерческих проектах, с представленными пользователем проектами, доступными для просмотра на веб-сайте компании. Применяет код языка C использованием кода ассемблера для секций, строго ограниченных по времени выполнения.

[Ссылки]

1. LUFA site:fourwalledcubicle.com — тут можно найти ссылки на закачку последнего стабильного релиза, а также предыдущих релизов.
2. WinAVR site:sourceforge.net — бесплатная среда разработки для AVR на платформе Windows.
3. AVR-USB162 — макетная плата с чипом Atmel AT90USB162.
4. Переведенная на русский язык документация Doxygen по библиотеке LUFA.
5. 110626LUFA101122.ZIP — пакет с русифицированной библиотекой LUFA (переведены комментарии в файлах и документация, добавлена поддержка платы AVR-USB162MU).
6. AVR-USB162MU: макетирование и изготовление программатора AVRISP-MKII в домашних условиях.

Обзор одной российской RTOS / Habr

Здравствуйте!

Мной подготовлена серия статей, посвященных конкретной российской ОСРВ, одним из создателей которой я являюсь. Получилась своеобразная «Книга знаний», неформальное руководство для программиста, которое, надеюсь, поможет тем, кто эту ОСРВ использует.

Я расскажу об особенностях работы этой ОСРВ. Если о чём-то другом, то только потому, что без этого будут непонятны особенности.

Ниже я расскажу об особенностях ОСРВ вообще, и об особенностях ОСРВ МАКС в частности. Представлю ее архитектуру.

В дальнейшем я буду регулярно размещать новые публикации: вторая будет посвящена ядру системы, в последующих я представлю структуру простейшей программы, работающей под управлением ОСРВ МАКС с элементами кода, расскажу, как настроить ОСРВ МАКС для работы, затрону вопросы строгой типизации и драйверов.

Часть 1. Общие сведения (настоящая статья)
Часть 2. Ядро ОСРВ МАКС
Часть 3. Структура простейшей программы
Часть 4. Полезная теория
Часть 5. Первое приложение
Часть 6. Средства синхронизации потоков
Часть 7. Средства обмена данными между задачами
Часть 8. Работа с прерываниями

Что такое операционные системы реального времени и особенности новой ОСРВ МАКС

Удивительно, но под термином «операционная система реального времени» многие понимают совсем не то, что надо. Они смотрят на термин «Операционная система» через призму тех ОС, с которыми им доводилось работать, а работать им доводилось на PC или более ранних компьютерах. Не раз и не два после рассказа о том, какую ОС мы начали проектировать, доводилось слышать предложения, которые было просто невозможно внедрить. Все собеседники шли по следующей цепочке: «Это операционная система, но для слабеньких (относительно современных PC) процессоров, значит, это что-то типа ДОС», и дальше шли предложения, исходящие из этого неверного посыла.

А неверно там всё.

Начнём с того, что время однозадачных ОС (какой была ДОС) ушло в прошлое. Если не требуется многозадачность, то необходимо и достаточно взять какую-либо штатную библиотеку для контроллеров. К STM32 прилагается несколько альтернативных библиотек от производителя (HAL, Cube MX и т.п.), для AVR также имеются библиотеки LUFA, Arduino и многие другие. Все они, наряду с открытыми библиотеками TCP/IP, FAT, USB, EmWin и прочими, полностью перекрывают функции ДОС (кто помнит — Int 21h, Int 13h, Int 10h). ОС для этого не требуется.

Таким образом, чтобы быть хоть как-то нужной:
Современная ОС должна быть многозадачной.

Рассмотрим, где эта ОС должна работать. А работать она будет не на компьютере общего назначения, а в каком-то конечном изделии, будь то робот, станок, интеллектуальный выключатель или что-то подобное.

Следовательно:

  • в изделии не требуется запускать или выгружать программы. Набор программ — постоянный. Включили изделие — они запустились. Пока изделие работает, они также работают;
  • ОС не получает никаких команд от оператора. Самой ОС не требуется никакой консоли. Всё взаимодействие с пользователем осуществляют прикладные программы. При этом зачастую средства интерфейса могут быть специфическими (кнопки, лампы), но может быть и сенсорный экран;
  • в компьютере общего пользования задержка исполнения того или иного потока, да и вообще того или иного процесса на десятые доли секунды не создаст никаких проблем. В работе с оборудованием такие задержки неприемлемы. Масса аппаратных вещей требует миллисекундных реакций — поддержка скорости работы двигателя, отслеживание работы датчиков, генерация шаговых импульсов, и многое другое: малейшая задержка приведёт к сбою работы всей аппаратной системы. Именно поэтому ОС для работы с аппаратурой называются «операционными системами реального времени». В такой ОС все потоки обязаны получать гарантированное процессорное время за гарантированный промежуток времени. Иными словами, в правильно спроектированной программе будет соблюдаться гарантированное время реакции на те или иные события.

Кроме того, ОСРВ МАКС в текущей реализации предназначена для работы на недорогих микроконтроллерах. В них не предусмотрено средств виртуализации памяти (блока MMU). Кроме того, у этих контроллеров имеется большой объём флэш-памяти, иногда — специально адаптированной на быстрое исполнение программ. Объём ОЗУ в самом контроллере обычно невелик, а исполнение программ во внешнем ОЗУ медленнее, чем во встроенной флэш-памяти.

Поэтому:

  • в ОСРВ МАКС нет понятия «процесс». Их невозможно изолировать друг от друга (нет соответствующей аппаратуры), правда, потом будет показано, что понятие «процесс» может быть реализовано за счёт особенностей ОСРВ МАКС при исполнении в нескольких контроллерах одновременно, но в пределах одного микроконтроллера изолированные процессы запустить невозможно;
  • ОС компилируется и компонуется монолитно, вместе с программой пользователя. Они обе располагаются во флэш-памяти, так как исполнение в ОЗУ на некоторых контроллерах снижает производительность, а в некоторых случаях — просто невозможно (если в системе нет внешней микросхемы ОЗУ).

Собственно, основные особенности всех ОС, исполняемых на подобной аппаратуре, мы рассмотрели. В принципе, если воспользоваться поисковой системой, то в Интернете можно быстро найти несколько готовых ОСРВ, которые также придерживаются тех же принципов.

Зачем же было делать ещё одну?

Начнём с того, что все найденные на момент начала работ операционные системы — процедурно ориентированы. Процедурные программы плохо структурированы, их сложно сопровождать, в них проще допускать досадные ошибки, но не буду долго останавливаться на преимуществах объектно-ориентированного подхода. Сошлюсь только на то, что гиганты вроде Microsoft давно стараются переводить свои системы на объектно-ориентированный подход, внедряя .NET.

Нельзя сказать, что процедурно-ориентированный подход в существовавших ОСРВ вызван особенностями аппаратуры. Объектно-ориентированная библиотека Arduino прекрасно используется на 8-битных микроконтроллерах. Результирующий ассемблерный код нельзя назвать неповоротливым. Объектно-ориентированная библиотека mcucpp Константина Чижова, на тех же восьми-битных контроллерах, показывает такие чудеса оптимизации ассемблерного кода, какие сложно получить даже вручную. А уж в 32-х-битной среде, для которой предназначена ОСРВ МАКС, о проигрыше объектно-ориентированного подхода и совсем нельзя говорить.

Следовательно, процедурная ориентированность других ОС — это скорее тяжёлое наследие. Начав разработку в 90-м году, очень сложно бросить старые наработки. Проще сделать новую ОС. Чем, собственно, мы и занялись.

Кроме того, в ОСРВ МАКС заранее заложены функции прозрачного взаимодействия между изделиями, но этому будет посвящена отдельная статья.

Общие сведения об ОСРВ МАКС

Рассмотрим более подробно архитектуру ОСРВ МАКС. На рисунке приведена общая архитектура системы.


Приложение — это собственно программа пользователя.

Ядро осуществляет планирование и взаимодействие потоков программы пользователя друг с другом. Правда, слово «поток» было приведено для преемственности с понятиями из операционных систем общего пользования. В рамках ОСРВ МАКС они называются задачами. Поэтому правильнее будет сказать, что ядро осуществляет планирование и взаимодействие задач программы пользователя.

Если заняться совсем буквоедством, то следует писать не «ядро», а «микроядро». Функции у этих двух сущностей похожие, но в ядрах операционных систем общего пользования тысячи функций, а в микроядре — хорошо, если сотни, а может — даже десятки. Микроядро по своей структуре крайне простое.

Сервисы ОС отделены от ядра. По своей сути они являются библиотеками, которые унифицируют обращение программы пользователя к аппаратуре. Эти сервисы могут обращаться к ядру как обычные программы, а могут даже и не обращаться. В частности, драйверы нижнего уровня не имеют никакой зависимости от ядра ОС. В этом состоит отличие ОСРВ МАКС от операционных систем общего пользования, где драйверы являются частью ядра.

В следующей статье я расскажу про ядро ОСРВ МАКС и приоритет задач.

Введение в LUFA

Универсальная последовательная шина (USB) в настоящее время является общей и обширной платформой для последовательной связи. Интерфейс не только обеспечивает последовательную связь, но и работает как электронный источник питания. К счастью, популярные микроконтроллеры AVR имеют интерфейс USB и могут быть запрограммированы для создания USB-устройств. Спецификация USB длинная и пугающая. Написание USB-драйвера для конкретного устройства может оказаться непростой задачей.

К счастью, Dean Camera выступила с инициативой для сообщества AVR и создала среду USB с открытым исходным кодом для микроконтроллеров Atmel AVR8 и (некоторых) AVR32 с поддержкой USB. Фреймворк называется Lightweight USB Framework для AVR (LUFA), и на данный момент опубликована четвертая версия фреймворка. Фреймворк был выпущен под разрешающей лицензией MIT. Библиотека с открытым исходным кодом поддерживает все USB-ресиверы и платы USB-ресиверов Atmel.

Интерфейс USB обеспечивает одноранговую связь. Устройство, которое управляет передачей данных через USB, называется хостом, а другое устройство, которым управляют, называется ведомым или периферийным устройством. Хост управляет передачей данных, отправляя запросы, на которые периферийное устройство отвечает дескрипторами. Самый первый запрос, который хост отправляет периферийному устройству в событии присоединения, предназначен для перечисления. Во время перечисления запрос хоста на перечисление и периферийное устройство отправляет собственное описание, после чего хост назначает адрес и номер конечной точки периферийному устройству. Периферийные USB-устройства классифицируются по классам. Ниже приведен список классов в соответствии со спецификацией USB – :

1. Аудио

2. Связь и управление CDC

3. Устройство пользовательского интерфейса (HID)

4. Класс физического устройства

5. Фотосъемка

6. Принтер

0.0 Mass Storage . Hub

9. CDC-DATA

10. Смарт-карта

11. Безопасность контента

12. Видео

13. Персональное здравоохранение

14. Аудио/видеоустройства

15. Устройство щита. Мостовое USB-устройство типа C

17. Диагностическое устройство

18. Беспроводной контроллер

19. Разное устройство

20. Специальное устройство

21. Специальное устройство производителя

формат данных для различных типов устройств может быть определен специально. Каждый класс USB имеет подклассы (дальнейшие разветвляющиеся типы устройств) и соответствует определенным спецификациям USB в рамках протокола USB. Подобно устройству Audio Class, оно будет соответствовать Спецификации класса Audio Device в протоколе USB. Посетите веб-сайт форума разработчиков USB, чтобы узнать о классах USB и связанных с ними спецификациях протоколов. В настоящее время в среде LUFA есть драйверы, написанные для следующих классов USB.

1. Устройство пользовательского интерфейса (HID), класс

2. Связь и управление CDC

3. Принтер

4. Запоминающее устройство

5. Обновление микропрограммы устройства (DFU) Подкласс класса

инфраструктуру можно использовать для создания периферийных устройств USB HID, CDC, принтеров и запоминающих устройств или для реализации хост-драйвера для вышеупомянутых классов USB. Это наиболее распространенные периферийные устройства, которые используются с персональными компьютерами. Платформа также поставляется с большим количеством демонстрационных проектов, которые включают демонстрационные проекты устройств USB HID, таких как мышь, клавиатура и джойстик, демонстрационные проекты устройств класса CDC, таких как аудиовход, аудиовыход, устройство Ethernet и виртуальное последовательное устройство и т. д. Эти демонстрационные проекты используют специфичные для класса драйверы, написанные в среде для реализации конкретных функций устройства. Как и демонстрационный проект для клавиатуры, используется драйвер класса HID для работы в качестве универсальной клавиатуры HID. Платформа была написана в соответствии со спецификацией USB 2.0 и имеет драйверы как хоста, так и устройства для вышеупомянутых классов USB-устройств. Драйверы, включенные в структуру, поддерживают режимы Low Speed, Full Speed ​​и High Speed ​​USB.

На прикладном уровне протокола USB передача данных осуществляется посредством отчетов об использовании и данных (входных или выходных). Платформа LUFA имеет API-интерфейсы высокого уровня, т. е. функции, которые самостоятельно обрабатывают отправку отчетов о данных или отчетов об использовании, а также API-интерфейсы низкого уровня, которые реализуют протокол USB для класса USB на самом низком уровне реализации конкретного протокола.

Теперь должно быть ясно, что

1. LUFA следует использовать для сборки периферийных устройств USB на микроконтроллерах AVR.

2. LUFA можно использовать для создания периферийных USB-устройств HID, CDC, запоминающих устройств, принтеров и приложений.

3. LUFA включает универсальные драйверы как для хоста, так и для периферийных устройств, поэтому драйверы хоста USB для вышеупомянутых классов USB также могут быть реализованы с помощью LUFA.

4. LUFA включает демонстрационные проекты, иллюстрирующие использование специфичных для класса драйверов для создания определенных периферийных устройств USB или реализации драйвера USB на стороне хоста.

Давайте загрузим структуру LUFA и начнем изучать файлы библиотеки. При распаковке библиотеки в ней есть следующие файлы и папки.

Рис. 1: Скриншот папки LUFA

Папка загрузчика — Любое периферийное USB-устройство управляется хостом, поэтому микроконтроллер на периферийном устройстве должен содержать загрузчик для инициализации с хостом. Папка Bootloader содержит файлы загрузчика для устройств класса HID, CDC, Mass Storage, Printer и DFU USB в отдельных папках.

Рис. 2: Скриншот папки загрузчика в LUFA

Папка BuildTests — Папка содержит шаблоны драйверов платы и модули тестов сборки для загрузчика.

Рис. 3. Скриншот папки BuildTests в LUFA

Папка Demos — Папка содержит демонстрационные проекты, иллюстрирующие использование драйверов определенного класса для создания определенных периферийных устройств USB или реализации хост-драйвера.

Рис. 4: Скриншот папки Demos в LUFA

Папка содержит три папки -:

Устройство – Демонстрационные проекты для устройств, которые работают только как периферийное устройство USB.

DualRole – Демонстрационные проекты для устройств, которые работают и как периферийные, и как хост.

Хост — Демонстрационные проекты, иллюстрирующие реализацию драйверов хоста для конкретных устройств.

Существуют демонстрационные проекты, использующие библиотечный драйвер класса USB (внутри папки ClassDriver), а также низкоуровневые API (внутри папки LowLevel). Демонстрационный проект внутри папок ClassDriver получает доступ к библиотечным драйверам, специфичным для класса USB (таким как HID, CDC, принтер и т. д.), через доступные API, поэтому низкоуровневый код, специфичный для устройства, абстрагируется функциями, обрабатывающими сами отчеты данных. Демонстрационные проекты в папке LowLevel получают доступ к драйверам библиотеки через функции, которые напрямую обрабатывают USB-соединение для определенного класса устройств.

Папка LUFA — Эта папка содержит фактические модули драйверов, которые используются для реализации протокола USB для различных классов USB. Папка содержит файлы шаблонов, файлы конфигурации и пакет deoxygen.

Рис. 5: Скриншот папки LUFA

Модули драйверов находятся конкретно в папке Drivers. В папке есть следующие папки.

Рис. 6: Скриншот папки Drivers в LUFA

Папка Board содержит драйверы плат для микроконтроллеров USB AVR. В папке Misc находятся разные драйверы. В папке Peripheral находятся драйверы для реализации специальных кодов AVR для интерфейсов ADC, SPI, TWI, Rs-232 и Serial SPI. Общие модули драйверов USB, которые фактически реализуют протокол USB в среде LUFA, находятся в папке USB. Папка USB содержит специальные модули драйверов класса USB (такие как HID, CDC, принтер и т. д.) в папке Class и имеет низкоуровневые USB-модули в основной папке. У него есть файл USB.h, который импортируется во все демонстрационные проекты и должен быть импортирован в любой проект, построенный с использованием LUFA. Заголовочный файл USB.h дополнительно импортирует специальные модули драйверов класса USB (например, HID, CDC, принтер и т. д.) с возможностью импорта модуля драйвера на стороне устройства или на стороне хоста.

Папка платформы — Папка платформы содержит драйверы аппаратной платформы для конкретной архитектуры.

Как использовать LUFA

LUFA поставляется с большим количеством демонстрационных проектов. Демонстрационные проекты предварительно настроены для правильной сборки и работы на микроконтроллере AVR AT90USB1287, смонтированном на плате Atmel USBKEY и работающем на основной частоте 8 МГц. Демонстрационные проекты представлены в вариантах ClassDriver и LowLevel.

Было бы разумно начать с демонстрационных проектов в папке ClassDriver, поскольку они используют готовые драйверы классов USB для упрощения использования стандартных классов USB (например, HID, CDC и т. д.) в пользовательских приложениях. В этих демонстрационных проектах специфический для проекта модуль и заголовочный файл могут быть изменены или переписаны для реализации нового проекта. Например, демонстрационный проект для клавиатуры в папке LUFA-Source-FolderDemosDemosDeviceClassDriverKeyboard содержит модули Keyboard.c и Keyboard.h, которые можно изменить для создания пользовательского устройства HID-клавиатуры. Модули в этих демонстрационных проектах используют функции, принадлежащие API высокого уровня, которые напрямую обрабатывают отчеты об использовании или данные, характерные для класса USB-устройств.

Как и в Keyboard.c, функция CALLBACK_HID_Device_CreateHIDReport() обрабатывает отчет о вводе данных, а функция CALLBACK_HID_Device_ProcessHIDReport() обрабатывает отчет о выводе данных. Данные и отчеты об использовании являются функциями прикладного уровня протокола USB.

При использовании микроконтроллера, отличного от AT90USB1287, нужно изменить Makefile в той же папке, чтобы настроить код для конкретного контроллера AVR и его тактовой частоты. Можно использовать только контроллеры AVR, драйверы плат которых написаны и включены в фреймворк.

Для полного контроля над реализацией определенного класса USB (например, HID, CDC, принтера и т. д.) можно изменить демонстрационные проекты низкого уровня. В демонстрационных проектах низкого уровня требуемый класс USB реализуется напрямую с помощью API самого низкого уровня. Для изменения этих проектов потребуется глубокое понимание протокола USB и его реализации для конкретного класса USB (например, HID, CDC и т. д.). Если работа над этими демонстрационными проектами потребует от инженера по встраиваемым системам мозгового штурма по спецификациям класса USB, это не будет сюрпризом. Таким образом, при прохождении этих демонстрационных проектов будет обнаружено, как на самом деле реализован драйвер устройства или хоста, специфичный для класса USB.

Более того, платформа имеет открытый исходный код, и инженер по встраиваемым системам может попытаться написать драйвер платы (в настоящее время недоступен в рамках платформы) или написать код драйвера (хост и устройство) для дополнительного класса USB.


Filed Under: More Editor’s Picks, Tutorials

 




Установка LUFA для Arduino USB Development При работе в обычном режиме Arduino ATmega328P взаимодействует с внешними устройствами, а ATmega32U2 действует как преобразователь TTL в USB.

Оба работают вместе как плата Arduino UNO.

Поскольку контакты ввода-вывода ATmega32U2 выведены на соединительные точки макетной платы STEMTera™, мы можем полностью использовать выводы ввода-вывода ATmega32U2 и использовать его в качестве независимого микроконтроллера. ATmega32U2 — очень полезный микроконтроллер для разработки USB-устройств из-за его собственных возможностей USB. Чтобы использовать возможности USB ATmega32U2 внутри макетной платы STEMTera™, нам необходимо установить инфраструктуру LUFA.

Установка USB-фреймворка LUFA для Arduino состоит из 6 шагов:

  • Шаг 1. Установите набор инструментов AVR
  • Шаг 2. Установите программатор DFU
  • Шаг 3. Установите драйвер DFU
  • Шаг 4. Установите MinGW
  • Шаг 5. Установите LUFA
  • Шаг 6. Компиляция и выполнение демонстрационной макетной платы STEMTera™ HID Keyboard
  • Шаг 7. Восстановление макетной платы STEMTera™ до заводских настроек по умолчанию

В этом руководстве мы рассмотрим все этапы настройки среды разработки LUFA для ATmega32U2.

Шаг 1. Установите AVR Toolchain

Чтобы скомпилировать исходный код LUFA, нам понадобится AVR Toolchain от Atmel. Рекомендуется использовать Atmel AVR 8-bit и 32-bit Toolchain 3.4.1, поскольку в этой версии есть все необходимые инструменты.

Загрузите рекомендованный AVR Toolchain из

Atmel AVR 8-bit и 32-bit Toolchain 3.4.1

После завершения загрузки запустите EXE-файл и продолжите установку. Когда вас попросят выбрать функции и папку, просто нажмите Далее , чтобы продолжить выбор по умолчанию.

После завершения установки введите

Win + r

В открывшемся диалоговом окне введите

cmd

, затем нажмите OK. Появится окно командной строки . В командной строке тип окна ,

avr-gcc -v

Вы должны увидеть настройки среды avr-gcc и номер версии, как показано ниже:

AVR Toolchain теперь установлен на вашем компьютере.

Если вы не видите результат, аналогичный приведенному выше, AVR Toolchain не был правильно установлен. Пожалуйста, повторите шаг 1.

Шаг 2. Установка DFU Programmer

dfu-programmer — это многоплатформенный программатор командной строки для микроконтроллеров Atmel с загрузчиком USB Device Firmware Upgrade (DFU). ATmega32U2 внутри макетной платы STEMTera™ поставляется с предварительно запрограммированным загрузчиком USB DFU.

Загрузите dfu-programmer из

DFU Programmer 0.7.2

Для Linux/Mac загрузите исходный код tar gz для dfu-programmer из Linux/Mac DFU Programmer 0.7.2

После загрузки завершено, разархивируйте пакет во временное место. Скопируйте dfu-programmer.exe в папку bin AVR Toolchain (папка bin AVR Toolchain по умолчанию находится в C:\Program Files (x86)\Atmel\AVR Tools\AVR Toolchain\bin )

При правильном копировании вы можете видеть, что dfu-programmer. exe находится в той же папке, что и другие инструменты, такие как date.exe , dd.exe , df.exe , echo.exe и т. д.

dfu-programmer теперь устанавливается вместе с AVR Toolchain.

Не удаляйте разархивированные файлы dfu-программатора , они нужны для установки драйвера DFU в дальнейшем.

Шаг 3. Установите драйвер DFU

Когда ATmega32U2 макетной платы STEMTera™ работает в режиме DFU, для правильной работы требуется драйвер DFU.

Подключите макетную плату STEMTera™ к компьютеру. Если вы ранее не подключали макетную плату STEMTera™ к компьютеру, см. раздел «Руководство для начинающих» макетной платы STEMTera™ «Подключение макетной платы STEMTera™».

Для запуска диспетчера устройств введите следующее:

Win + r

В открывшемся диалоговом окне введите

devmgmt.msc

затем нажмите OK. Диспетчер устройств будет запущен и отобразит список устройств, подключенных к компьютеру. Дважды щелкните Порты (COM и LPT) , и имя последовательного порта макетной платы STEMTera™ должно выглядеть так: Arduino Uno (COMx)

Теперь нам нужно заставить ATmega32U2 работать в режиме DFU. Для этого используйте перемычку, подключите один конец перемычки к GND , а другой конец к RST2 9.0214 . Пока перемычка все еще подключена к GND и RST2 , вы заметите, что последовательный порт макетной платы STEMTera™ исчез из диспетчера устройств.

Удалите перемычку, и Windows выведет всплывающее сообщение о том, что найдено новое устройство, и попытается найти драйвер для него. Поскольку драйвера DFU официально нет в репозитории драйверов Windows, поиск драйвера, скорее всего, не увенчается успехом.

Когда это произойдет, вы увидите устройство с именем Arduino Uno DFU с восклицательным знаком, показанным под Другие устройства в диспетчере устройств.

Щелкните правой кнопкой мыши на этом устройстве и выберите Обновить драйвер .

В окне Обновить драйвер выберите Просмотреть на моем компьютере программное обеспечение драйвера . Нажмите кнопку Browse и перейдите к папке dfu-programmer , которая была ранее разархивирована на ШАГЕ 2. Имя папки выглядит следующим образом:

 dfu-programmer-win-0.7.2\dfu-prog-usb-1.2.2
 

Нажмите «Далее» после выбора вышеуказанной папки, и Windows начнет установку драйвера. Нажмите Установить , когда программа установки драйвера спросит: « Хотите установить программное обеспечение для этого устройства?» » Если установка прошла успешно, вы увидите следующий экран.

Щелкните Закройте , и установка драйвера DFU завершена.

Шаг 4. Установите MinGW

MinGW, сокращение от «Minimalist GNU for Windows», представляет собой среду разработки программного обеспечения с открытым исходным кодом для Windows. Он включает в себя порт коллекции компиляторов GNU (GCC), GNU Binutils для Windows и различные утилиты.

Загрузите программу установки MinGW с

Программа установки MinGW

После завершения загрузки запустите программу установки mingw-get-setup.exe . Нажмите Установить , затем Продолжить , чтобы установить по умолчанию. Программа установки начнет скачивать и обновлять необходимые файлы каталога. После завершения этого процесса нажмите Продолжить .

Экран диспетчера установки MinGW будет отображаться следующим образом:

Нажмите mingw32-base и выберите Отметить для установки .

Нажмите msys-base и выберите Отметить для установки .

При правильной маркировке для установки флажок рядом с выбранным элементом показывает стрелку, похожую на букву C .

Щелкните меню Установка , затем выберите Применить изменения . Когда окно Расписание ожидающих действий спросит ОК, чтобы продолжить? , нажмите Применить и программа установки начнет скачивать необходимые файлы. Подождите, пока установщик покажет Все изменения успешно применены; Теперь вы можете закрыть этот диалог. , затем нажмите Закрыть . Нажмите X в Менеджере установки MinGW , чтобы выйти.

Установка MinGW завершена.

Шаг 5. Установите LUFA

Загрузите LUFA-151115 из

Файлы разработки STEMTera LUFA

Разархивируйте STEMTera-Breadboard-B328-LUFA-Demo-Project-master.zip на рабочий стол. Результирующая должна иметь структуру папок, как показано ниже:

 C:\Users\[имя пользователя]\Desktop\STEMTera-Breadboard-B328-LUFA-Demo-Project-master
 

Вы можете использовать git для клонирования проекта, если хотите. Git проекта https://github.com/STEMTera/STEMTera-Breadboard-B328-LUFA-Demo-Project.git

LUFA теперь установлен на вашем рабочем столе.

Шаг 6. Скомпилируйте и выполните демонстрацию STEMTera™ Breadboard HID Keyboard

Введите

Win + r

В открывшемся диалоговом окне введите

cmd

, затем нажмите OK. Появится окно командной строки . В командной строке тип окна ,

cd "Desktop\STEMTera-Breadboard-B328-LUFA-Demo-Project-master\Demos\Device\ClassDriver\Keyboard"

Type

dir 9020 должны увидеть следующие файлы в каталоге:

 Каталог C:\Users\jplie\Desktop\STEMTera-Breadboard-B328-LUFA-Demo-Project-master\Demos\Device\ClassDriver\Keyboard
10.20.2017 14:13  .
10.20.2017 14:13  ..
10.20.2017 14:04 2472 asf.xml
10.20.2017 14:04  Конфигурация
10.20.2017 14:04 8 256 Descriptors.c
10.20.2017 14:13 12 672 дескриптора.d
10.20.2017 14:04 3 368 Descriptors.h
10.20.2017 14:13 10 720 Descriptors.o
10.02.2017 14:04 104 419доксифайл
10.20.2017 14:13 4 328 Keyboard.bin
10.20.2017 14:04 7,895 Keyboard.c
10.20.2017 14:13 13,916 Keyboard.d
10.20.2017 14:13 13 Keyboard.eep
10.20.2017 14:13 128,022 Keyboard.elf
10.20.2017 14:04 3,321 Keyboard.h
10.20.2017 14:13 12 192 Keyboard.hex
10.20.2017 14:13 165,766 Keyboard. lss
10.20.2017 14:13 112,252 Keyboard.map
10.20.2017 14:13 13,628 Keyboard.o
10.20.2017 14:13 7,552 Keyboard.sym
10.20.2017 14:04 2 444 Keyboard.txt
10.02.2017 14:04 1067 makefile
              19Файл(ы) 614 303 байта
               3 Dir(s) 135 728 353 280 байт свободно
 

Type

make

и make начнут компилировать демо-версию STEMTera™ Breadboard HID Keyboard. После завершения компиляции будут отображаться следующие сообщения make .

 ../../../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o -o Keyboard.elf -lm -Wl,-Map=Keyboard.map,--cref -Wl, --gc-sections -Wl,--relax -mmcu=atmega32u2
 [OBJCPY]: извлечение данных HEX-файла из «Keyboard.elf».
avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature Keyboard.elf Keyboard.hex
 [OBJCPY]: извлечение данных файла EEP из «Keyboard.elf».
avr-objcopy -O ihex -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings Keyboard. elf Keyboard.eep || выход 0
 [OBJCPY]: извлечение данных файла BIN из «Keyboard.elf».
avr-objcopy -O binary -R .eeprom -R .fuse -R .lock -R .signature Keyboard.elf Keyboard.bin
 [OBJDMP]: извлечение данных файла LSS из «Keyboard.elf».
avr-objdump -h -d -S -z Keyboard.elf > Keyboard.lss
 [NM]: извлечение данных SYM-файла из «Keyboard.elf».
avr-nm -n Keyboard.elf > Keyboard.sym
 [РАЗМЕР]: определение размера «Keyboard.elf».
avr-size --mcu=atmega32u2 --format=avr Keyboard.elf
Использование памяти AVR
----------------
Устройство: atmega32u2
Программа: 4328 байт (заполнено на 13,2 %).
(.текст + .данные + .загрузчик)
Данные: 53 байта (5,2 % заполнения)
(.данные + .bss + .noinit)
 [ИНФО] : Завершен строительный проект "Клавиатура".
C:\Users\jplie\Desktop\STEMTera-Breadboard-B328-LUFA-Demo-Project-master\Demos\Device\ClassDriver\Keyboard>
 

Если процесс make прошел успешно, вы увидите

 [INFO]: Завершенный проект сборки «Клавиатура».
 

сообщает вам, что демо «Клавиатура» скомпилировано и готово.

Чтобы установить демо-версию «Клавиатура» на макетную плату STEMTera™, введите

make dfu-launch

make запустит dfu-programmer для прошивки «Keyboard.hex» на макетную плату STEMTera™. Успешная перепрошивка будет иметь сообщения, похожие на:

 [DFU] : Программирование FLASH с помощью dfu-программатора с использованием «Keyboard.hex»
dfu-программатор atmega32u2 стереть
Проверка памяти от 0x0 до 0x6FFF... Не пусто в 0x1.
Стирание вспышки... Успех
make: [dfu-launch] Ошибка 5 (игнорируется)
dfu-программатор atmega32u2 flash Keyboard.hex
Проверка памяти от 0x0 до 0x10FF... Пусто.
0% 100% Программирование 0x1100 байт...
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Успех
0% 100% Чтение 0x7000 байт...
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Успех
Проверка... Успех
0x1100 байт записано в память 0x7000 байт (15,18%).
запуск dfu-programmer atmega32u2 --no-reset
 

Как только make dfu-launch завершится, вы сможете увидеть HID Keyboard Device в разделе Keyboards Диспетчера устройств.

Если не отображается дополнительное устройство HID Keyboard , подтвердите, что программирование dfu прошло успешно, проверьте наличие

 0% 100% Программирование 0x1100 байт...
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Успех
 

Приведенные выше две строки показывают, что программирование из 0x110 байтов выполнено успешно.

 0% 100% Чтение 0x7000 байт...
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Успех
 

Приведенные выше две строки показывают, что dfu-programmer успешно прочитал «Keyboard.hex», который был запрограммирован на макетной плате STEMTera™.

 Проверка... Успех
0x1100 байт записано в память 0x7000 байт (15,18%).
 

Если считанный код сравнился с исходным скомпилированным шестнадцатеричным кодом и дал совпадающий результат, отобразится сообщение Validating... Success .

Игнорировать строку make: [dfu-launch] Ошибка 5 (игнорируется) , это не ошибка. Это было сделано потому, что команда dfu-programmer atmega32u2 erase вернула предупреждение из-за того, что устройство не было пустым перед стиранием.

STEMTera™ Breadboard HID Keyboard Demo теперь установлена ​​на плате. Запустите NOTEPAD на компьютере и с помощью перемычки замкните GND и PB0 (или PB1, PB2, PB3, PB4, PB5). Каждая булавка будет создавать символ в БЛОКНОТЕ, как на клавиатуре.

Шаг 7. Восстановление макетной платы STEMTera™ до заводских настроек по умолчанию

Для восстановления заводских настроек макетной платы STEMTera™ требуется заводская прошивка. Щелкните правой кнопкой мыши ссылка на заводскую прошивку и сохраните файл по адресу C:\STEMTeraFactory

Теперь нам нужно заставить ATmega32U2 работать в режиме DFU. Для этого используйте перемычку, подключите один конец перемычки к GND , а другой конец к RST2 . Пока перемычка все еще подключена к GND и RST2 , вы заметите, что последовательный порт или USB-устройство, эмулированное макетной платой STEMTera™, исчезли из диспетчера устройств.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *