ORFA — различия между версиями

Материал из roboforum.ru Wiki
Перейти к: навигация, поиск
(Установка)
м (Правки Михаил Александрович (обсуждение) откачены к версии =DeaD=)
 
(не показано 45 промежуточных версий 3 участников)
Строка 1: Строка 1:
 
[[Категория:Open Robotics]]
 
[[Категория:Open Robotics]]
  
ORFA (Open Robotics Firmware Architecture) — это модульная архитектура для прошивок контроллеров семейства [[Open Robotics]]. Архитектура и первые совместимые с ней прошивки сейчас находятся в разработке.
+
ORFA (Open Robotics Firmware Architecture) — это модульная архитектура для прошивок контроллеров. Изначально была создана для семейства контроллеров [[Open Robotics]], но может быть легко адаптирована к любым другим контроллерам на базе МК AVR. Архитектура и первые совместимые с ней прошивки сейчас находятся в разработке.
  
 
== Введение ==
 
== Введение ==
Строка 7: Строка 7:
 
# Единый формат обращения к любым устройствам низкого уровня, использованным в составе робота. В качестве такого формата принят протокол i2c. Это сделано для того, чтобы прозрачно интегрировать в систему уже имеющиеся устройства для шины i2c (компасы, гироскопы, акселерометры, УЗ-дальномеры и другие).
 
# Единый формат обращения к любым устройствам низкого уровня, использованным в составе робота. В качестве такого формата принят протокол i2c. Это сделано для того, чтобы прозрачно интегрировать в систему уже имеющиеся устройства для шины i2c (компасы, гироскопы, акселерометры, УЗ-дальномеры и другие).
 
# Возможность быстрой сборки прошивки для каждого контроллера как в варианте OR-шлюз-контроллера, так и в варианте подчиненного контроллера на шине RoboBus[I2C].
 
# Возможность быстрой сборки прошивки для каждого контроллера как в варианте OR-шлюз-контроллера, так и в варианте подчиненного контроллера на шине RoboBus[I2C].
 +
 +
== Краткая информация по использованию ==
 +
 +
=== Как подключиться к контроллеру ===
 +
Через любой адаптер создающий COM порт на ПК и поддерживающий UART (уровня 3.3В) на стороне RoboBus (например, через модули BT-адаптеров или через программатор с функцией USB-UART моста).
 +
 +
=== Как передавать команды на контроллер ===
 +
С ПК команды на контроллер можно передать как и любые другие данные через COM-порт. Например, можно использовать любую программу терминал, в которой указать правильные настройки - соответствующую скорость 9600 или 115200 и номер COM-порта, а также дополнительные параметры соединения - 8 бит, без проверки четности, 1 стоп-бит.
 +
 +
=== Какие команды можно использовать ===
 +
Это зависит от драйверов, которые установлены в прошивке. Полный список драйверов с указанием в прошивках каких контроллеров они установлены имеется здесь: [[ORFA - Выданные идентификаторы UID]].
  
 
== Описание ==
 
== Описание ==
Строка 63: Строка 74:
 
* freq — uint16
 
* freq — uint16
 
|-
 
|-
|Read register
+
|Read register<ref name="protocol_v1.1">Нет в протоколе версии 1.1</ref>
 
|<code>R<addr><reg>[<len>]</code>
 
|<code>R<addr><reg>[<len>]</code>
 
|<code>SWASR<rdata>P</code>
 
|<code>SWASR<rdata>P</code>
Строка 71: Строка 82:
 
* len — uint8, default 1
 
* len — uint8, default 1
 
* rdata — uint8 array
 
* rdata — uint8 array
|-
+
|-c
|Write register
+
|Write register<ref name="protocol_v1.1"/>
 
|<code>W<addr><reg><data></code>
 
|<code>W<addr><reg><data></code>
 
|<code>SWA(A)+P</code>
 
|<code>SWA(A)+P</code>
Строка 102: Строка 113:
  
 
=== Примеры ===
 
=== Примеры ===
 +
 +
'''ВНИМАНИЕ! Все команды должны оканчиваться переводом строки (0x0A, "\n"), который означает окончание команды и передачу её на исполнение!'''
  
 
Инициализировать устройство:
 
Инициализировать устройство:
Строка 136: Строка 149:
 
  > SWAAAAAAP
 
  > SWAAAAAAP
  
== Возможности подчиненного I²C устройства ==
+
== Возможности встроенного/подчиненного I²C устройства (список драйверов) ==
 
В случае использования <code>libserialgate.a</code> это внутреннее логическое устройство, его адрес задается командой <code>L<aa></code>.
 
В случае использования <code>libserialgate.a</code> это внутреннее логическое устройство, его адрес задается командой <code>L<aa></code>.
  
Возможности зависят от конкретного набора драйверов собранных в прошивку этого контроллера, но интерфейс для простой интроспекции драйверов, есть всегда.
+
Возможности зависят от конкретного набора драйверов собранных в прошивку этого контроллера, но интерфейс для простой интроспекции драйверов, есть всегда, причем всегда через регистр с номером 0x00.
  
=== Интроспекция драйверов ===
+
[[ORFA - Выданные идентификаторы UID|Список всех драйверов, включая драйвер интроспекции]].
Реализовано с помощью специального драйвера в ядре, который закреплен на регистре 0x00.
+
{{:ORFA - Выданные идентификаторы UID}}
 
 
Пример работы с драйвером можно посмотреть в модуле [http://hg.vehq.ru/pyor/file/tip/pyor/introspection.py#l1 pyor.introspection]
 
 
 
Типы запросов (регистр, данные…):
 
# <code>00 00</code> — запросить количество драйверов, нужно прочитать 1 байт
 
# <code>00 nn</code> — запросить информацию о драйвере nn, нужно прочитать 6 байт
 
 
 
Структура информации запроса 2:
 
{| class="standard"
 
! Байт
 
! Название
 
! Комментарий
 
|-
 
|0, 1
 
|UID
 
|Уникальный идентификатор драйвера.
 
 
 
Может быть получен у команды проекта «Open Robotics». [[ORFA - Выданные идентификаторы UID|Таблица уже выданных идентификаторов]].
 
 
 
Для личного использования зарезервирован диапазон адресов с первым байтом 0xFF.
 
|-
 
|2
 
|Major Version
 
|Старший номер версии
 
|-
 
|3
 
|Minor Version
 
|Младший номер версии
 
|-
 
|4
 
|Start Register
 
|Номер начального регистра
 
|-
 
|5
 
|Count of registers
 
|Количество регистров
 
 
 
То есть все регистры драйвера это интервал <code>(Start Register)..(Start Register + Count of registers - 1)</code>
 
|}
 
  
 
== Установка ==
 
== Установка ==
Строка 187: Строка 161:
 
* Лицензия: MIT
 
* Лицензия: MIT
  
# Сделать клон репозитария <code>hg clone http://hg.vehq.ru/orfa</code><br />либо скачать архив с исходными кодами здесь: http://hg.vehq.ru/orfa
+
<ol>
# make (для модуля OR-AVR-M32-D, OR-AVR-M168-DX пока не поддерживается)
+
<li>Сделать клон репозитария <code>hg clone http://hg.vehq.ru/orfa</code><br />
# make program (если вы используете AVR Dragon)
+
либо скачать архив с исходными кодами здесь: http://hg.vehq.ru/orfa (ссылка .zip слева в меню)</li>
# make orfa.hex (если на выходе нужно получить .hex-файл)
+
<li>По умолчанию ORFA собирается для OR-AVR-M32-D и скорости 115200 Бод.<br />
 +
Если нужны иные настройки, то создайте local_config.mk например с таким содержанием:
 +
<pre>
 +
PLATFORM = OR_AVR_M128_S
 +
BAUD = B115200
 +
</pre></li>
 +
<li><code>make</code></li>
 +
<li><code>make program</code> (если вы используете AVR Dragon)</li>
 +
</ol>
 +
 
 
=== Сборка ORFA под AVR Studio + WinAVR ===
 
=== Сборка ORFA под AVR Studio + WinAVR ===
 
Для этого вам потребуется:
 
Для этого вам потребуется:
# Скачать .zip-архив с нужной версией
+
 
# Создать в этом же каталоге проект ORFA без создания каталога и нового файла
+
# Скачать .zip-архив с нужной версией (последняя версия: [http://hg.vehq.ru/orfa/archive/0.9.0-b1.zip 0.9.0-B1] [[Участник:Vooon|Vooon]] 18:27, 14 октября 2010 (MSD))
# Добавить в только что созданный проект файл "main.c"
+
# Создать в этом же каталоге проект ORFA без создания каталога и нового файла (имя важно, иначе AVR Studio не увидит скомилированный файл)
 +
# Добавить в только что созданный проект файл «main.
 
# Прописать в свойствах проекта внешний Makefile из скачанного проекта
 
# Прописать в свойствах проекта внешний Makefile из скачанного проекта
 +
# Копировать в папку проекта файл local_config.mk из ''doc/'' и изменить содержимое под себя руководствуясь комментариями
 
# Скомпилировать прошивку
 
# Скомпилировать прошивку
  
Строка 203: Строка 188:
 
## Структура ядра — Y;
 
## Структура ядра — Y;
 
## Средства интроспекции набора драйверов — Y;
 
## Средства интроспекции набора драйверов — Y;
## Средства интроспекции набора RoboGPIO портов — ?;
 
 
# Драйвера для OR-AVR-M32-D
 
# Драйвера для OR-AVR-M32-D
 
## GPIO (цифровые входы/выходы) — Y;
 
## GPIO (цифровые входы/выходы) — Y;
## Servo (управление модельными сервоприводами)
+
## Servo (управление модельными сервоприводами) — Y;
 
## ADC (АЦП) — Y;
 
## ADC (АЦП) — Y;
 
## SPI — Y;
 
## SPI — Y;
 
## RoboMD2 (Управление шасси на 2 моторах) — Y;
 
## RoboMD2 (Управление шасси на 2 моторах) — Y;
## CapSensor (Работа с ёмкостными сенсорами, типа датчика цвета поверхности)
+
## CapSensor (Работа с ёмкостными сенсорами, типа датчика цвета поверхности) - ?;
 
# Драйвера для OR-AVR-M64-S
 
# Драйвера для OR-AVR-M64-S
 
## GPIO (цифровые входы/выходы) — Y;
 
## GPIO (цифровые входы/выходы) — Y;
## Servo (управление модельными сервоприводами) - Y (для 32 специальных портов);
+
## Servo (управление модельными сервоприводами) — Y (для 32 специальных портов);
 
## ADC (АЦП) — Y;
 
## ADC (АЦП) — Y;
 
## SPI — Y;
 
## SPI — Y;
## CapSensor (Работа с ёмкостными сенсорами, типа датчика цвета поверхности)
+
## CapSensor (Работа с ёмкостными сенсорами, типа датчика цвета поверхности) - ?;
# Драйвера для OR-AVR-M168-DX
+
# Инструкции к драйверам:
## GPIO (цифровые входы/выходы)
+
## GPIO (цифровые входы/выходы) — Y;
## Servo (управление модельными сервоприводами)
+
## Servo (управление модельными сервоприводами) — Y;
## ADC (АЦП)
+
## ADC (АЦП) — частично;
## RoboMD2 (Управление шасси на 2 моторах)
+
## SPI — ?;
## CapSensor (Работа с ёмкостными сенсорами, типа датчика цвета поверхности)
+
## CapSensor (Работа с ёмкостными сенсорами, типа датчика цвета поверхности) - ?;
 +
 
 +
== Сноски ==
 +
<references />

Текущая версия на 16:47, 1 мая 2012


ORFA (Open Robotics Firmware Architecture) — это модульная архитектура для прошивок контроллеров. Изначально была создана для семейства контроллеров Open Robotics, но может быть легко адаптирована к любым другим контроллерам на базе МК AVR. Архитектура и первые совместимые с ней прошивки сейчас находятся в разработке.

Введение

Зачем нужна эта архитектура, какие задачи она решает:

  1. Единый формат обращения к любым устройствам низкого уровня, использованным в составе робота. В качестве такого формата принят протокол i2c. Это сделано для того, чтобы прозрачно интегрировать в систему уже имеющиеся устройства для шины i2c (компасы, гироскопы, акселерометры, УЗ-дальномеры и другие).
  2. Возможность быстрой сборки прошивки для каждого контроллера как в варианте 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.

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

Or-ser-i2c-i2c.svg

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

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

Or-gate-ser.svg

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

Or-gate-i2c.svg

Команды UART->I²C

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

Реализуется библиотекой 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[1] R<addr><reg>[<len>] SWASR<rdata>P
  • addr — uint8
  • reg — uint8
  • len — uint8, default 1
  • rdata — uint8 array
Write register[1] 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

Примеры

ВНИМАНИЕ! Все команды должны оканчиваться переводом строки (0x0A, "\n"), который означает окончание команды и передачу её на исполнение!

Инициализировать устройство:

< 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[2] ORFA Motors driver (RoboMD2)


Установка

  1. Сделать клон репозитария hg clone http://hg.vehq.ru/orfa
    либо скачать архив с исходными кодами здесь: http://hg.vehq.ru/orfa (ссылка .zip слева в меню)
  2. По умолчанию ORFA собирается для OR-AVR-M32-D и скорости 115200 Бод.
    Если нужны иные настройки, то создайте local_config.mk например с таким содержанием:
    PLATFORM = OR_AVR_M128_S
    BAUD = B115200
    
  3. make
  4. make program (если вы используете AVR Dragon)

Сборка ORFA под AVR Studio + WinAVR

Для этого вам потребуется:

  1. Скачать .zip-архив с нужной версией (последняя версия: 0.9.0-B1 Vooon 18:27, 14 октября 2010 (MSD))
  2. Создать в этом же каталоге проект ORFA без создания каталога и нового файла (имя важно, иначе AVR Studio не увидит скомилированный файл)
  3. Добавить в только что созданный проект файл «main.c»
  4. Прописать в свойствах проекта внешний Makefile из скачанного проекта
  5. Копировать в папку проекта файл local_config.mk из doc/ и изменить содержимое под себя руководствуясь комментариями
  6. Скомпилировать прошивку

План работ

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

Сноски

  1. 1 2 Нет в протоколе версии 1.1
  2. есть только на платформах с RoboMD2