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

Материал из roboforum.ru Wiki
Перейти к: навигация, поиск
м
Строка 17: Строка 17:
 
т.е. каждый драйвер устройства связан с определенным набором адресов ячеек.
 
т.е. каждый драйвер устройства связан с определенным набором адресов ячеек.
  
Структура и взаимодействие модулей в варианте с модулем uart->i2t:
+
====Структура и взаимодействие модулей в варианте с модулем uart->i2t:====
 
[[Файл:or-gate-ser.svg]]
 
[[Файл:or-gate-ser.svg]]
  
Структура и взаимодействие модулей в варианте только i2c slave:
+
====Структура и взаимодействие модулей в варианте только i2c slave:====
 
[[Файл:or-gate-i2c.svg]]
 
[[Файл:or-gate-i2c.svg]]
 +
 +
== Команды UART->I<sup>2M/sup>C ==
 +
Все команды текстовые, перевод строки означает окончание команды, запуск на исполнение.
 +
 +
{| class=standard
 +
!Название
 +
!Запрос
 +
!Ответ
 +
!Комментарий
 +
|-
 +
|Get protocol version
 +
|<code>V</code>
 +
|<code>V1.0</code>
 +
|
 +
|-
 +
|Clear I2C bus
 +
|<code>X</code>
 +
|<code>X</code>
 +
|
 +
|-
 +
|Set local address
 +
|<code>L<addr></code>
 +
|<code>L<addr></code>
 +
|
 +
* addr — uint8
 +
|-
 +
|Set bus speed (freq)
 +
|<code>C<freq></code>
 +
|<code>C<freq></code>
 +
|
 +
* freq — uint16
 +
|-
 +
|Read register
 +
|<code>R<addr><reg>[<len>]</code>
 +
|<code>SWASR<rdata>P</code>
 +
|
 +
* addr — uint8
 +
* reg — uint8
 +
* len — uint8, default 1
 +
* rdata — uint8 array
 +
|-
 +
|Write register
 +
|<code>W<addr><reg><data></code>
 +
|<code>SWA(A)+P</code>
 +
|
 +
* addr — uint8
 +
* reg — uint8
 +
A = Ack
 +
|-
 +
|I2C request
 +
|
 +
# <code>S<adr+w><data></code>
 +
# <code>S<adr+r><len></code>
 +
* <code>\1P</code>
 +
* <code>\2P</code>
 +
* <code>(\1|\2)+P</code>
 +
|
 +
# <code>SW(A)+</code>
 +
# <code>SR<rdata></code>
 +
* <code>\1P</code>
 +
* <code>\2P</code>
 +
* <code>(\1|\2)+P</code>
 +
|
 +
* adr+w — uint8, &0xfe
 +
* adr+r — uint8, |0x01
 +
* len — uint8
 +
* data — uint8 array
 +
* rdata — uint8 array
 +
|}

Версия 07:33, 8 мая 2009


I2C-gate — это модульная прошивка для шлюз-контроллеров Open Robotics. Находится в разработке. На данный момент поддерживает только микроконтроллеры семейства AVR Mega.

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

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

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

Or-ser-i2c-i2c.svg

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

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

Or-gate-ser.svg

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

Or-gate-i2c.svg

Команды UART->I2M/sup>C

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

Название Запрос Ответ Комментарий
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