roboforum.ru

Технический форум по робототехнике.

Обсуждение протокола шлюз-контроллера

Правила форума
Правила раздела OpenRobotics

Re: Обсуждение протокола шлюз-контроллера

Vooon » 18 апр 2009, 18:32

Нет, КА вполне честный:
В CET_COMMAND получаем 'C', переходим в состояние PARSE_CONFIG, выходим.
В PARSE_CONFIG вызывается другой КА (get_cmd_byte()) по его завершению выходим.

bool get_cmd_byte(char, *data, *error)
На первый вход читает старшую часть байта, и помещает его в *data, переключает состояние на прием второй части, возвращает 0.
Во второй вход читает младшую часть, побитное или результата с *data, результат помещается обратно в *data,
возвращает 1.

Re: Обсуждение протокола шлюз-контроллера

=DeaD= » 18 апр 2009, 23:08

Так, разобрался, прошивка состоит из 2 вложенных КА и 1 почти КА выполняющего команды.

Re: Обсуждение протокола шлюз-контроллера

=DeaD= » 19 апр 2009, 14:55

Кстати, а как в оригинальном девайсе - ответ в UART выплёвывается сразу по получении байта с i2c или из буфера?

Re: Обсуждение протокола шлюз-контроллера

Vooon » 19 апр 2009, 19:01

Буфер. В оригинальном девайсе собираются CDC пакеты для USB
И читает также пакет в буфер.

У меня входной буфер исключен, т.к. в нем нет необходимости.
А выплевывать удобней в буфер, в случае ошибки легко отменить вывод сбросив внутреннее состояние буфера.

Re: Модуль OR-AVR-M32-D: Контр. на базе ATMega32 с портом ДД

Vooon » 27 апр 2009, 20:39

Сильно дебажная версия нового шлюза http://hg.vehq.ru/i2c-parser/
Выкладываю для проверки работы I2C.
Вложения
i2c-gate.hex
(21 КиБ) Скачиваний: 287

Re: Модуль OR-AVR-M32-D: Контр. на базе ATMega32 с портом ДД

=DeaD= » 27 апр 2009, 23:11

Тестовый шлюз Vooon'а прошел проверку на работу с SRF08 по протоколу i2c - чтение версии, измерение расстояния, чтение датчика освещенности.

Re: Модуль OR-AVR-M32-D: Контр. на базе ATMega32 с портом ДД

blindman » 28 апр 2009, 04:47

Все таки нафигачили кучу команд избыточных ?

Re: Модуль OR-AVR-M32-D: Контр. на базе ATMega32 с портом ДД

Vooon » 28 апр 2009, 05:21

Весь список команд:

S<adr><data>[S<adr><data>[S...]]P
R<adr><reg>[<len>]
W<adr><reg><data>
C<freq>
L<adr>
V
# comment


При чем R/W только для удобства, парсер перегоняет в формат идентичный командам:

R —> S<adr+w><reg>S<adr+r><len>P
W —> S<adr+w><reg><data>P


Эту часть парсера можно легко отключить.

L — для установки адреса внутреннего ведомого;
С — для настройки частоты тактирования, по умолчанию 100 кГц.

V — показать версию прошивки
# — просто удобно, тем более что кода занимает не много, обрабатывается полностью парсером.

Добавлено спустя 15 минут 53 секунды:
Деиствие запись/чтение зависит от последнего бита адреса (как и в i2c)

Условно обозначу запись/чтение
<adr+w> в бинарном виде: xxxxxxx0
<adr+r> — xxxxxxx1

<adr>, <reg> и <len> записывается последовательностью из двух символов в шестнадцатеричной системе
до и после может быть любое число пробелов

<data> записывается аналогично адресу, есть альтернативный вариант: \<любой-символ>

Запись:
S<adr+w><data>

Чтение:
S<adr+r><len>

Для команды R <len> по умолчанию равен 1.

Re: Модуль OR-AVR-M32-D: Контр. на базе ATMega32 с портом ДД

=DeaD= » 28 апр 2009, 09:22

blindman писал(а):Все таки нафигачили кучу команд избыточных ?

Избыточная по твоей терминологии тут вроде одна обобщенная команда S....P - она позволяет делать по i2c что угодно. Остальные вроде как ты и предлагал сделать? :)

Re: Модуль OR-AVR-M32-D: Контр. на базе ATMega32 с портом ДД

blindman » 28 апр 2009, 10:20

Я предлагал 2 - запись и чтение. L, C, V - избыточны. Под них резервируем регистры, и используем чтение/запись

Re: Модуль OR-AVR-M32-D: Контр. на базе ATMega32 с портом ДД

=DeaD= » 28 апр 2009, 12:10

L не может быть избыточна. Без неё не ясно куда стучаться.
C и V - может быть.

Re: Модуль OR-AVR-M32-D: Контр. на базе ATMega32 с портом ДД

Vooon » 29 апр 2009, 05:45

Забыл указать команду X — сбросить шину, посути выполняет S 00 P.

Считаю что переносить С в регистр нельзя: иначе мы лишаемся возможности отделить програмный модуль Serial-to-I2C чтобы использовать его отдельно (например в малом модуле serial->i2c на какой-нибудь мелкой меге/тиньке) без использования части модуля ведомого. L в таком модуле может отсутствовать.

V удобна для проверки порта (есть кто? И если есть, то какой версии протокол?)
Можно сказать эквивалент AT

Re: Модуль OR-AVR-M32-D: Контр. на базе ATMega32 с портом ДД

=DeaD= » 29 апр 2009, 08:36

На самом деле, как мне кажется, можно применить и тот и другой подходы. (можно оставить LCVX команды и сделать L необязательной, а можно сделать L обязательной и CVX сделать через i2c регистры). Всё это по причине того, что конвертер uart<->i2c это вообще говоря штука обособленная и пока мне не ясно почему оно обязательно должно быть через i2c-регистры :pardon:

Поэтому если уж Vooon сделал пока так - можно так и оставить, если нет существенных противопоказаний.

Re: Модуль OR-AVR-M32-D: Контр. на базе ATMega32 с портом ДД

Vooon » 29 апр 2009, 15:58

L и сейчас посылать не обязательно, адрес по умолчанию 0xAA

Re: Модуль OR-AVR-M32-D: Контр. на базе ATMega32 с портом ДД

=DeaD= » 29 апр 2009, 16:41

Обязательно, адрес по умолчанию мог быть изменен, а программно модуль нельзя перегрузить. Или надо команду сброса программную...


Rambler\'s Top100 Mail.ru counter