Значит понадобился такой девайс для баловства разного рода. Уже есть ряд готовых девайсов таких как [[Шлюз-контроллер GATE-A8D8M2]] или Контроллер SC18IM700 шины I2C с UART-интерфейсом. Но они работают только в режиме Мастера, что мне не подходит. Поэтому написал протокол(если можно так сказать), естественно за основы брал уже имеющиеся. И проверил работоспособность в Протеусе, ну конечно нужные еще полевые испытания, но это после того как будет плата готова.
Применение:
Допустим у меня ARM7 может работать только в режиме Мастера, но мне потребовалось чтобы к нему можно было обращаца как к Слейву. Поэтому я упрощаю себе задачу, просто подключив переходник на свободный uart, тем самым давай возможность получать "входящие"
Значит что за переходник:
- ATMega8 ( либо делать на ATMega8L либо и то и то )
- 4MHz
- два выхода - на twi и uart
А больше и не нужно, можно еще светодиоды включить для отображения наличия питания и передачи данных.
Плата еще не разведена, что будет сделано после окончательной разборки с протоколом.
Предполагаеца, что это будет все запаяно в smd и tqfp корпусах, и иметь маленькие размеры.
Вот сам протокол
Отправить данные
[ W | Addr | Nb | Data | P ], где
W - означает запись в шину TWI,
Addr - адрес устройства на шине,
Nb - сколько байт нужно передать устройству,
Data - байты данных,
P - стоповый байт.
Чтение данных
[ R | Addr | Nb | P ], где
R - означает прочитать данные из устройства на шине по адресу Addr,
Nb - сколько байт нужно принять.
Записать данные в буффер переходника
Записываем данные в буффер, а когда переходник входит в режим SlaveTransmitter, он передает вызывающему адресу данные из буффера, если их нет в нем то возвращает ноль.
[ B | Nb | Data | P ], где
B - означает что нужно поместить данные в буффер,
Nb - сколко данных нужно туда поместить.
А вот список возможных приходящих пакетов:
Получили данные
[ W | Nb | Data | P ], где
W - означает, что нам адресовали данные,
Nb - сколько байт нам адресовали,
Data - байты данных,
P - стоповый байт.
Получили данные, ответ на отправленный запрос [ R | Addr | Nb | P ]
[ T | Nb | Data | P ], где
T - означает, что нам удалось прочитать данные с нужного нам устройства
Nb - сколько байт мы сумели прочитать.
Получили ошибку
[ E ], где
E - означает что произошла ошибка. Предполагаеца также ввести коды ошибок, тогда пакет будет выглядеть так
[ E | Code ]
Здесь реализуеца работа переходника и в Slave и в Master режимах, насколько это возможно и насколько я это себе представляю.
Жду предложения и критику..