ORFA

Материал из roboforum.ru Wiki
Версия от 07:49, 25 мая 2009; =DeaD= (обсуждение | вклад) (Интроспекция драйверов)
Перейти к: навигация, поиск


ORFA (Open Robotics Firmware Architecture) — это модульная архитектура для прошивок контроллеров семейства Open Robotics. Архитектура и сами прошивки сейчас находятся в разработке.

Описание

На данный момент поддерживаются только микроконтроллеры семейства AVR ATMega.

Текущая версия состоит из монолитного шлюза UART->I2C и модульного виртуального подчиненного устройства на шине I2C.

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

Т.е. можно достаточно малой кровью получить хорошо расширяемую систему.

Or-ser-i2c-i2c.svg

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

Структура и взаимодействие модулей в варианте с модулем uart->i2t:

Or-gate-ser.svg

Структура и взаимодействие модулей в варианте только i2c slave:

Or-gate-i2c.svg

Команды UART->I2C

Все команды текстовые, перевод строки означает окончание команды, запуск на исполнение.

Реализуется библиотекой libserialgate.a

Название Запрос Ответ Комментарий
Get protocol version V V1.0
Clear I2C bus X X
Set local address L<addr> L<addr>
  • addr — uint8
Set bus speed (freq) C<freq> C<freq>
  • freq — uint16
Read register R<addr><reg>[<len>] SWASR<rdata>P
  • addr — uint8
  • reg — uint8
  • len — uint8, default 1
  • rdata — uint8 array
Write register W<addr><reg> SWA(A)+P
  • addr — uint8
  • reg — uint8

A = Ack

I2C request
  1. S<adr+w>
  2. S<adr+r><len>
  • \1P
  • \2P
  • (\1|\2)+P
  1. SW(A)+
  2. SR<rdata>
  • \1P
  • \2P
  • (\1|\2)+P
  • adr+w — uint8, &0xfe
  • adr+r — uint8, |0x01
  • len — uint8
  • data — uint8 array
  • rdata — uint8 array

Возможности подчиненного I2C устройства

В случае использования libserialgate.a это внутреннее логическое устройство, его адрес задается командой L<aa>.

Возможности зависят от конкретного контроллера, но интерфейс для простой интроспекции драйверов, есть всегда.

Интроспекция драйверов

Реализовано с помощью специального драйвера интроспекции ORFA Introspection driver в ядре, этот драйвер единственный закрепленный на конкретном адресе 0x00. Адреса всех остальных можно узнать через него.

Тут можно найти все имеющиеся в проекте драйвера - ORFA - Выданные идентификаторы UID.

Установка

  1. Сделать клон репозитария hg clone http://hg.vehq.ru/orfa
    либо скачать архив с исходными кодами здесь: http://hg.vehq.ru/orfa
  2. make (для модуля OR-AVR-M32-D, OR-AVR-M168-DX пока не поддерживается)
  3. make program (если вы используете AVR Dragon)
  4. make orfa.hex (если на выходе нужно получить .hex-файл)

План работ

  1. Решение общих вопросов;
    1. Структура ядра - Y;
    2. Средства интроспекции набора драйверов - Y;
    3. Средства интроспекции набора RoboGPIO портов - ?;
  2. Драйвера для OR-AVR-M32-D
    1. GPIO (цифровые входы/выходы) - Y;
    2. Servo (управление модельными сервоприводами)
    3. ADC (АЦП)
    4. SPI - Y;
    5. RoboMD2 (Управление шасси на 2 моторах) - Y;
    6. CapSensor (Работа с ёмкостными сенсорами, типа датчика цвета поверхности)
  3. Драйвера для OR-AVR-M168-DX
    1. GPIO (цифровые входы/выходы)
    2. Servo (управление модельными сервоприводами)
    3. ADC (АЦП)
    4. RoboMD2 (Управление шасси на 2 моторах)
    5. CapSensor (Работа с ёмкостными сенсорами, типа датчика цвета поверхности)
  4. Драйвера для OR-AVR-M64-S
    1. GPIO (цифровые входы/выходы)
    2. Servo (управление модельными сервоприводами)
    3. ADC (АЦП)
    4. RoboMD2 (Управление шасси на 2 моторах)
    5. CapSensor (Работа с ёмкостными сенсорами, типа датчика цвета поверхности)