ORFA — различия между версиями
Vooon (обсуждение | вклад) (→Установка) |
Vooon (обсуждение | вклад) (→Сборка ORFA под AVR Studio + WinAVR) |
||
Строка 175: | Строка 175: | ||
Для этого вам потребуется: | Для этого вам потребуется: | ||
<ol> | <ol> | ||
− | <li>Скачать .zip-архив с нужной версией</li> | + | <li>Скачать .zip-архив с нужной версией (последняя версия: [http://hg.vehq.ru/orfa/archive/0.7.4.zip 0.7.4])</li> |
<li>Создать в этом же каталоге проект ORFA без создания каталога и нового файла (имя важно, иначе AVR Studio не увидит скомилированный файл)<li> | <li>Создать в этом же каталоге проект ORFA без создания каталога и нового файла (имя важно, иначе AVR Studio не увидит скомилированный файл)<li> | ||
<li>Добавить в только что созданный проект файл «main.c»</li> | <li>Добавить в только что созданный проект файл «main.c»</li> |
Версия 06:17, 22 сентября 2009
ORFA (Open Robotics Firmware Architecture) — это модульная архитектура для прошивок контроллеров семейства Open Robotics. Архитектура и первые совместимые с ней прошивки сейчас находятся в разработке.
Содержание
Введение
Зачем нужна эта архитектура, какие задачи она решает:
- Единый формат обращения к любым устройствам низкого уровня, использованным в составе робота. В качестве такого формата принят протокол i2c. Это сделано для того, чтобы прозрачно интегрировать в систему уже имеющиеся устройства для шины i2c (компасы, гироскопы, акселерометры, УЗ-дальномеры и другие).
- Возможность быстрой сборки прошивки для каждого контроллера как в варианте OR-шлюз-контроллера, так и в варианте подчиненного контроллера на шине RoboBus[I2C].
Краткая информация по использованию
Как подключиться к контроллеру
Через любой адаптер создающий COM порт на ПК и поддерживающий UART (уровня 3.3В) на стороне RoboBus (например, через модули BT-адаптеров или через программатор с функцией USB-UART моста).
Как передавать команды на контроллер
С ПК команды на контроллер можно передать как и любые другие данные через COM-порт. Например, можно использовать любую программу терминал, в которой указать правильные настройки - соответствующую скорость 9600 или 115200 и номер COM-порта, а также дополнительные параметры соединения - 8 бит, без проверки четности, 1 стоп-бит.
Какие команды можно использовать
Это зависит от драйверов, которые установлены в прошивке. Полный список драйверов с указанием в прошивках каких контроллеров они установлены имеется здесь: ORFA - Выданные идентификаторы UID.
Описание
На данный момент поддерживаются только микроконтроллеры семейства AVR ATMega.
Текущая версия состоит из монолитного шлюза UART->I²C и модульного виртуального подчиненного устройства на шине I²C.
При таком подходе ПК обращается к блокам МК как и к любым другим устройствам на шине i2c, что дает унификацию. А при незначительной модификации виртуального слейва можно сделать прошивку для второго контроллера, уже не являющегося шлюзом, управляемого через i2c.
То есть можно достаточно малой кровью получить хорошо расширяемую систему.
Взаимодействие модулей подчиненного устройсва основано на регистровой модели, то есть каждый драйвер устройства связан с определенным набором адресов ячеек.
Структура и взаимодействие модулей в варианте с модулем uart->i2с:
Структура и взаимодействие модулей в варианте только i2c slave:
Команды UART->I²C
Все команды текстовые, перевод строки означает окончание команды, запуск на исполнение.
Реализуется библиотекой libserialgate.a
Название | Запрос | Ответ | Комментарий |
---|---|---|---|
Get protocol version | V
|
V1.0
|
|
Clear I2C bus | X
|
X
|
|
Set local address | L<addr>
|
L<addr>
|
|
Set bus speed (freq) | C<freq>
|
C<freq>
|
|
Read register | R<addr><reg>[<len>]
|
SWASR<rdata>P
|
|
Write register | W<addr><reg>
|
SWA(A)+P
|
A = Ack |
I2C request |
|
|
|
Примеры
Инициализировать устройство:
< V > V1.0 < L20 > L20 < C0064 > C0064 < X > X
Запросить кол-во драйверов (см драйвер интроспекции) и информацию о первом драйвере:
< S 20 00 00 S 21 01 P > SWAASR04P < S 20 00 01 S 21 06 P > SWAASR002001000108P
Записать в ячейку PWM1 0x60 (в примере адрес регистра PWM1 равен 0x40, в реальном устройстве сначало нужно получить информацию, см пример выше):
< W 20 40 60 > SWAAP
Послать по шине I²C строку на I2C дисплей (адрес 0x40):
< W 40 \s\t\r\i\n\g > SWAAAAAAP
или
< S 40 \s\t\r\i\n\g P > SWAAAAAAP
Возможности встроенного/подчиненного I²C устройства (список драйверов)
В случае использования libserialgate.a
это внутреннее логическое устройство, его адрес задается командой L<aa>
.
Возможности зависят от конкретного набора драйверов собранных в прошивку этого контроллера, но интерфейс для простой интроспекции драйверов, есть всегда, причем всегда через регистр с номером 0x00.
Список всех драйверов, включая драйвер интроспекции.
UID | Platform | Driver |
---|---|---|
0x0000 | All | ORFA Introspection driver |
0x0001 | All | ORFA SPI Bus driver |
0x0020 | OR-AVR-M32-D | ORFA Port driver (RoboGPIO) |
0x0021 | OR-AVR-M128-* | ORFA Port driver (RoboGPIO) |
0x0030 | OR-AVR-M128-S | ORFA Servo driver |
0x0031 | OR-AVR-M32-D | ORFA Servo driver (RoboGPIO) |
0x0032 | OR-AVR-M128-DS | ORFA Servo driver |
0x0040 | All | ORFA ADC driver (RoboGPIO) |
0x0060 | All[1] | ORFA Motors driver (RoboMD2) |
Установка
- Репозиторий исходных кодов: http://hg.vehq.ru/orfa
- Лицензия: MIT
- Сделать клон репозитария
hg clone http://hg.vehq.ru/orfa
либо скачать архив с исходными кодами здесь: http://hg.vehq.ru/orfa - По умолчанию ORFA собирается для OR-AVR-M32-D и скорости 115200 Бод.
Если нужны иные настройки, то создайте local_config.mk например с таким содержанием:PLATFORM = OR_AVR_M128_S BAUD = B115200
make
make program
(если вы используете AVR Dragon)
Сборка ORFA под AVR Studio + WinAVR
Для этого вам потребуется:
- Скачать .zip-архив с нужной версией (последняя версия: 0.7.4)
- Создать в этом же каталоге проект ORFA без создания каталога и нового файла (имя важно, иначе AVR Studio не увидит скомилированный файл)
- Добавить в только что созданный проект файл «main.c»
- Прописать в свойствах проекта внешний Makefile из скачанного проекта
- Создать в папке проекта файл local_config.mk и в нём прописать платформу (PLATFORM = OR_AVR_M128_S или OR_AVR_M32_D) и скорость UART (B115200 или B9600), например:
PLATFORM = OR_AVR_M128_S BAUD = B115200
- Скомпилировать прошивку
План работ
- Решение общих вопросов;
- Структура ядра — Y;
- Средства интроспекции набора драйверов — Y;
- Драйвера для OR-AVR-M32-D
- GPIO (цифровые входы/выходы) — Y;
- Servo (управление модельными сервоприводами) — Y;
- ADC (АЦП) — Y;
- SPI — Y;
- RoboMD2 (Управление шасси на 2 моторах) — Y;
- CapSensor (Работа с ёмкостными сенсорами, типа датчика цвета поверхности) - ?;
- Драйвера для OR-AVR-M64-S
- GPIO (цифровые входы/выходы) — Y;
- Servo (управление модельными сервоприводами) — Y (для 32 специальных портов);
- ADC (АЦП) — Y;
- SPI — Y;
- CapSensor (Работа с ёмкостными сенсорами, типа датчика цвета поверхности) - ?;
- Инструкции к драйверам:
- GPIO (цифровые входы/выходы) — Y;
- Servo (управление модельными сервоприводами) — Y;
- ADC (АЦП) — частично;
- SPI — ?;
- CapSensor (Работа с ёмкостными сенсорами, типа датчика цвета поверхности) - ?;
- ↑ есть только на платформах с RoboMD2