Разговор получается беспредметным, внесу чуть больше конкретики. Итак.
- Все устройства которыми можно управлять через шлюз, делим на 2 группы : подключенные по I2C и прочие
- Контроллеру назначается 1-байтный адрес, который является валидым I2C адресом
- Адресация в протоколе - двухбайтная. Если старший байт == 0, адресуется устройство на шине I2C, иначе - внутренний ресурс контроллера. В последнем случае старший байт адреса задает I2C адрес контроллера, младший - внутренний адрес ресурса
- формат команд ((W addr data+)|(R addr count))+ P. Тот же I2C, по сути.
- программа на шлюзе состоит из 2 частей - одна разбирает запрос, другая его исполняет и выдает ответ
- если контроллером надо управлять по I2C - оставляем на нем только ту часть, что отвечает за выполнение команд и выдачу ответа. А на управляющем устройстве используем тот же самый код, что и на шлюзе с одной маленькой модификацией - после разбора, те запросы, что идут к I2C-устройствам, идут непосредственно к ним, прочие транслируются контроллеру
- в процессе написания шлюза мы бесплатно получаем софт для устройства, которое будет мастером на I2C
- формат команд не зависит от канала связи. Код для управляющего I2C-устройства может быть с минимальными изменениями перенесен на ПК, и наооборот
----------------
Now playing: Rage - Human Metal (Radio-OMa)
Добавлено спустя 4 минуты 37 секунд:
Vooon писал(а):blindman: то что ты предлагаешь очень похоже на 10-и битную адресацию I2C, только первый байт там имеет определенные значения.
И если реализовать 10-и битную адресацию, то мы вполне под каждый регистр можем занять адрес.
Кстати это избавляет нас от проблемы собственного адреса устройства и его хранения в eeprom
т.к. устройств понимающих 10 бит мало.
TWI не поддерживает 10-битную адресацию. Да она и не нужна - см. выше.
Vooon писал(а): Но сам пакет менять не стоит, ты забыл IC (имхо нужная комманда)
V тоже полезна.
Элементарно реализуется в концепции регистров
----------------
Now playing: Amatory - Черно-белые дни (Radio-OMa)