Уже довольно давно засела мне в голову мысль, что было бы замечательно работать с I2C устройствами прямо из какой-нибудь терминалки. Нет, можно конечно в терминалке, умеющей независимо переключать состояния ног com-порта, надёргать весь протокол отдельными битами, но это не очень удобно и даже очень неудобно, поэтому я решил для общения по I2C сваять на микроконтроллере специальный шлюз. Такой шлюз можно использовать, например, в качестве программатора микросхем памяти с интерфейсом I2C.
Для экспериментов был выбран микроконтроллер ATTiny2313. Выбран он был за достаточно быстрое ядро AVR, возможность подключения 20 МГц кварца, приличное количество ног и низкую стоимость.
Далее была собрана вот такая схемка:
Детали:
- R1 — 1..10 кОм
- R2, R3 — 4,7 кОм
- C1..C5 — 0,1 мкФ
- C6,C7 — 15 пФ
- кварц 20 МГц
- + преобразователь интерфейсов MAX232, контроллер ATTiny2313, 3 джампера и несколько разъёмов.
Джамперы (перемычки) JP1, JP2 позволяют организовать подтяжку линий Clock и Data к питанию, если это не сделано на плате к которой вы подключаетесь (для чего нужна такая подтяжка — смотрите в описании интерфейса I2C).
Джампер JP3 позволяет запитать подключаемое устройство от шлюза.
Сам шлюз можно запитать прямо от компьютера, через стандартный разъём питания (как на рисунке справа), которых в любом компе с избытком. В этом разъёме нам нужно только два провода — красный (+5В) и чёрный (общий). На стороне шлюза нам, естественно, нужен ответный разъём, — как на рисунке слева.
Для возможностей внутрисхемного программирования (ICSP) контроллера, на разъёмы выведены ноги интерфейса SPI (Clock, MOSI, MISO) и нога reset.
Готовое устройство выглядит вот так: На фотке экспериментальная модель, поэтому внимательный читатель может заметить, что она не совсем совпадает с выложенной схемой и разводкой, но это мелочи (просто в девайсе на фотке предполагалось, что вместо джамперов будут транзисторы, которыми также будет рулить контроллер, однако транзисторов под рукой не оказалось + в экспериментальной модели не впаяны разъёмы для внутрисхемного программирования). Скачать печатную плату (DipTrace2.2) Ну вот, с аппаратной частью разобрались, однако, пока в контроллере нет прошивки, наш девайс — просто кусок железа. Исходники программ и готовые прошивки, наделяющие это чудо разными полезными свойствами, можно найти и скачать по приведённым ниже ссылкам: |
— Программа, позволяющая из терминалки общаться с I2C устройствами в режиме мастера (ради чего всё и затевалось).
— Программа, позволяющая из терминалки общаться с I2C устройствами в режиме слэйва (или работать шлюзу в качестве сниффера).
В подразделе «Полезные программы для ПК» можно скачать простенькую терминалку RH_Com, умеющую работать в HEX-режиме, (с исходниками).
Update. Если кому лень собирать — подобный шлюз можно заказать на сайте. Принцип работы этой версии абсолютно тот же, но в ней реализованы сразу 3 интерфейса (I2C, SPI и 1-Wire) + возможность управлять тремя выводами GPIO (ну и система команд, естественно, отличается).