ORFA — различия между версиями
Vooon (обсуждение | вклад) м |
=DeaD= (обсуждение | вклад) м (→Возможности подчиненного I2C устройства) |
||
Строка 100: | Строка 100: | ||
В случае использования <code>libserialgate.a</code> это внутреннее логическое устройство, его адрес задается командой <code>L<aa></code>. | В случае использования <code>libserialgate.a</code> это внутреннее логическое устройство, его адрес задается командой <code>L<aa></code>. | ||
− | Возможности зависят от конкретного контроллера, но | + | Возможности зависят от конкретного контроллера, но интерфейс для простой интроспекции драйверов, есть всегда. |
=== Интроспекция драйверов === | === Интроспекция драйверов === | ||
− | Реализовано с помощью специального драйвера в ядре, закреплен на регистре 0x00. | + | Реализовано с помощью специального драйвера в ядре, который закреплен на регистре 0x00. |
Пример работы с драйвером можно посмотреть в модуле [http://hg.vehq.ru/pyor/file/tip/pyor/introspection.py#l1 pyor.introspection] | Пример работы с драйвером можно посмотреть в модуле [http://hg.vehq.ru/pyor/file/tip/pyor/introspection.py#l1 pyor.introspection] | ||
Строка 119: | Строка 119: | ||
|0, 1 | |0, 1 | ||
|UID | |UID | ||
− | |Уникальный идентификатор драйвера | + | |Уникальный идентификатор драйвера - может быть получен у команды проекта "Open Robotics", для использования в персональных драйверах зарезервирован диапазон адресов с первым байтом 0xFF. |
|- | |- | ||
|2 | |2 | ||
Строка 136: | Строка 136: | ||
|Count of registers | |Count of registers | ||
|Количество регистров | |Количество регистров | ||
+ | |||
Т.е. все регистры драйвера это интервал <code>(Start Register)..(Start Register + Count of registers - 1)</code> | Т.е. все регистры драйвера это интервал <code>(Start Register)..(Start Register + Count of registers - 1)</code> | ||
|} | |} |
Версия 07:49, 19 мая 2009
ORFA — это модульная архитектура для прошивок контроллеров семейства Open Robotics.
Архитектура и сами прошивки сейчас находятся в разработке.
Содержание
Описание
На данный момент поддерживаются только микроконтроллеры семейства AVR ATMega.
Текущая версия состоит из монолитного шлюза UART->I2C и модульного виртуального подчиненного устройства на шине I2C.
При таком подходе ПК обращается к блокам МК как и к любым другим устройствам на шине i2c, что дает унификацию. А при незначительной модификации виртуального слейва можно сделать прошивку для второго контроллера, уже не являющегося шлюзом, управляемого через i2c.
Т.е. можно достаточно малой кровью получить хорошо расширяемую систему.
Взаимодействие модулей подчиненного устройсва основано на регистровой модели, т.е. каждый драйвер устройства связан с определенным набором адресов ячеек.
Структура и взаимодействие модулей в варианте с модулем uart->i2t:
Структура и взаимодействие модулей в варианте только i2c slave:
Команды UART->I2C
Все команды текстовые, перевод строки означает окончание команды, запуск на исполнение.
Реализуется библиотекой 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 |
|
|
|
Возможности подчиненного I2C устройства
В случае использования libserialgate.a
это внутреннее логическое устройство, его адрес задается командой L<aa>
.
Возможности зависят от конкретного контроллера, но интерфейс для простой интроспекции драйверов, есть всегда.
Интроспекция драйверов
Реализовано с помощью специального драйвера в ядре, который закреплен на регистре 0x00.
Пример работы с драйвером можно посмотреть в модуле pyor.introspection
Типы запросов (регистр, данные...):
00 00
— запросить количество драйверов, нужно прочитать 1 байт00 nn
— запросить информацию о драйвере nn, нужно прочитать 6 байт
Структура информации запроса 2:
Байт | Название | Комментарий |
---|---|---|
0, 1 | UID | Уникальный идентификатор драйвера - может быть получен у команды проекта "Open Robotics", для использования в персональных драйверах зарезервирован диапазон адресов с первым байтом 0xFF. |
2 | Major Version | Старший номер версии |
3 | Minor Version | Младший номер версии |
4 | Start Register | Номер начального регистра |
5 | Count of registers | Количество регистров
Т.е. все регистры драйвера это интервал |
UIDs
UID | Driver |
---|---|
0x0000 | Introspection |
0x0010 | Port GPIO |
0x0100 | Motor (RoboMD2) |
0x1000 | SPI |
Установка
- Репозиторий исходных кодов: http://hg.vehq.ru/orfa
- Лицензия: MIT
- Сделать клон репозитария
hg clone http://hg.vehq.ru/orfa
либо скачать архив с исходными кодами здесь: http://hg.vehq.ru/orfa - make (для модуля OR-AVR-M32-D, OR-AVR-M168-DX пока не поддерживается)
- make program (если вы используете AVR Dragon)