Сегодня я расскажу как превратить UART-to-I2C/SPI/1W шлюз в USB-программатор микросхем памяти с интерфейсом I2C (EPROM-ки серий 24Сxx, SDA25xx, PCF85xx и им подобные). Такой программатор выгодно отличается от разных клонов JDM скоростью работы, поскольку протокол I2C реализует не компьютер, побитно надёргивая нужные сигналы, а сам шлюз.
Итак, сделать из шлюза программатор I2C очень и очень просто. Достаточно соединить вместе шлюз и конвертер USB-to-UART. В принципе, конвертер можно взять любой, поскольку шлюзу для работы не нужно никаких линий управления (RTS/CTS, DSR/DTR, которые через USB-to-COM управляются очень медленно), нестандартных скоростей или размеров пакета. Из сигнальных линий UART ему нужны только Rx и Tx. Параметры настройки UART тоже вполне обычные: скорость 115200, 8 бит данных, 2 стоповых бита. Всё это умеет делать любой китайский USB-to-UART, однако лучше всего взять не китайский, а вот такой (с нашего сайта).
Приятным бонусом последнего конвертера является то, что его разъём UART — это ответная часть разъёма UART шлюза, поэтому для их соединения вам не придётся ничего дополнительно изобретать. Именно этот вариант показан на фотографии справа. Кроме того, наш конвертер позволяет не только организовать обмен данными между шлюзом и компьютером, но и запитать шлюз (причём любым напряжением: +3,3В или +5В, оба они присутствуют на разъёме конвертера как раз в нужных местах).
Собственно говоря, э… с аппаратной частью всё! Соединив вместе USB-to-UART и UART-to-I2C/SPI/1W мы получили желанный USB-программатор микросхем I2C. Далее поговорим о программной части.
Для работы нам понадобится специальный софт.
Во-первых, нужно установить на компьютер драйвера для USB-to-COM преобразователя. Преобразователь, предлагаемый на сайте, сделан на базе чипа cp2102 фирмы silabs, дрова для него можно скачать на их официальном сайте, вот по этой ссылке.
Во-вторых, для работы с программатором через виртуальный com-порт (который у вас появится после установки драйверов на USB-to-UART конвертер) была написана специальная программа. (Список версий и ссылки для скачивания смотрите в конце статьи).
Главное окно программы показано на картинке слева. Тут всё интуитивно понятно, — выбираем com-порт, выбираем чип, подключаемся и можем этот чип читать/писать. Чтобы было удобнее, в правом верхнем углу программы отображается схема подключения шлюза к выбранному чипу (к каким ногам что подключать).
Если нужного чипа нет в списке — можно написать на форум или в личку админу (rhf-admin) письмо с указанием того, какой чип вы хотели бы добавить. Если интересно — можете попробовать добавить нужный чип сами, все версии программы выложены с исходниками, программа написана в C++ Builder.
Протокол I2C подробно описан вот здесь.
Список функций и регистров шлюза можно посмотреть здесь.
Программа | Исходники | Описание (поддерживаемые чипы, изменения в коде и т.д.) | Поддерживаемые ОС |
I2C Programmer v.1.0 | v.1.0 sources | X24C01, AT24C01A, AT24C02, AT24C04, AT24C08A, AT24C16A, SDA2516, SDA2526, SDA2546, SDA2586, SDA3526, 24E16/25E16, AT24C32, AT24C64, AT24C128, AT24C256, AT24C512, PCF8582-C2, PCF8594-C2, PCF8598-C2 | Windows XP, Windows Vista, Windows 7, Windows 8 |
I2C Programmer v.2.0 | v.2.0 sources | реализована полноценная работа с hex-файлами (загрузка/сохранение) |
Небольшое видео, демонстрирующее работу программатора.
radiohlam.ru
Все началось с того, что мне надо было подключиться к одному устройству по USART. Я сразу взял адаптер USB to UASRT (ибо в ноутбуке COM порт не предусмотрен) на AtTiny2313 (рекламой заниматься не буду, схема легко находится в интернете), подключил, запустил и внезапно понял, что у адаптера фиксированная скорость 9600, а у девайса, к которому требовалось подключиться, скорость 57600. Дело, естественно, было поздним вечером, и купить что-нибудь вроде FT232 возможности не было. Поэтому после непродолжительного раздумья, было решено изменить скорость UASRT в адаптере обычной перепрошивкой. В итоге соединение было успешно налажено. Но согласитесь — это ведь не выход, программатора может под рукой не оказаться, да и неудобно каждый раз с прошивкой шаманить. В следствие этого я серьезно задумался о создании нормального адаптера, с регулируемой скоростью (и не только).
Конечно, самый простой вариант – купить FT232, но сравнив ее стоимость со стоимостью Mega8, я пришел к выводу, что этот вариант мне не подходит. Поэтому было решено сделать адаптер на МК. А раз он на МК, то делать только USART как-то не рационально. Поэтому неплохо было бы в этот адаптер засунуть еще несколько интерфейсов, если уж делать, то что-то универсальное и полезное. Почти сразу в памяти всплыли “приятные” воспоминания об установке драйверов для адаптера на Tiny2313 (для Windows7 x64 это довольно мучительно). А это значит, что от устройства “виртуальный COM” придется отказаться, следовательно, надо будет написать программу для ПК, иначе работа с устройством будет невозможна. В общем, после обдумывания в течение некоторого времени, сформировалась окончательная идея девайса. Функционал получился вот таким:
Объектом издевательств стал МК Mega8, т.к. в TQFP корпусе он занимает совсем мало места (намного меньше, чем AtTiny2313) и обладает целыми 8 Кб. памяти. Сначала планировалось сделать все интерфейсы программными, но после разводки платы пришлось отказаться от аппаратного I2C, т.к. на односторонней плате вывести его никак не получалось (в будущем все-таки надо будет решить этот вопрос, может отдельно вывести сбоку платы). Поэтому его функциональность несколько ограничена, но USART и SPI остались полнофункциональными. Для связи с ПК была применена библиотека V-USB.
Схема устройства получилась вот такой:
Как видно, ничего сложного в ней нет. МК питается напряжением 5 В., согласование уровней для USB выполнено при помощи делителей напряжения резистор 68 Ом. + стабилитрон 3.3 В.. Тактовая частота МК – 12 МГц. Это минимальная частота для работы с шиной USB. Так же в схеме присутствуют три светодиода для индикации режимов работы. Один из светодиодов показывает, какй режим работы включен, а два других индицируют прием/передачу данных. Никаких кнопок и переключателей в устройстве не предусмотрено, и все настройки выполняются программно, прямо с ПК. Да, на все выводы, используемые для работы интерфейсов включены резисторы на 68 Ом. для защиты МК от КЗ. Как уже было отмечено выше, устройство представляется ПК как HID и не требует установки драйверов. VID и PID были выбраны из предоставляемых V-USB: VID — 0x16c0, PID — 0x05df. В противном случае пришлось бы отдать кругленькую сумму за покупку индивидуального идентификатора для USB устройства. Но т.к. проект Open Source и некоммерческий, совершенно свободно можно использовать идентификаторы, предложенные V-USB.
Плата получилась вот такая:
А в спаянном виде:
Это был тестовый образец да еще и разведенный с ошибками. Я почему-то посчитал, что вывод CE выводить не стоит. Ну ничего, все уже исправлено и к статье приложена правильная плата.
Итак, со схемой все понятно, он простая до предела и паяется за один вечер. Но, как было сказано выше, получившееся устройство определяется ПК как HID, т.е. ОС подбирает под него драйвер из своей базы. Проще говоря, Windows думает, что работает с устройством ввода. Это делает возможным работу на любом ПК без мороки с драйверами. Но с этим связана одна небольшая проблема, ни одна из существующих программ для обмена данными через USART работать с этим устройством не будет. А значит нужна какая-то специальная программа для работы с модулем, иначе он никакой ценности из себя не представляет. Поэтому я открыл свой любимый C++ Builder (нынче его обозвали CodeGear RAD Studio, что в прочем не меняет смысла), версия 2007, и написал вот такую программу:
Ничего особо сложного в ней нет, для каждого интерфейса присутствует некоторое количество настроек. Да, одновременно несколько интерфейсов работать не могут, только по одному. Работает все это дело очень просто, при подключении устройства к ПК в окне программы активизируются кнопки, нажатие на которые запускает соответствующий интерфейс. Потом достаточно написать данные в поле ввода в определенном формате и нажать кнопку «Send». Для каждого интерфейса свой формат данных. Сейчас рассмотрим их более подробно:
USART: (прием данных идет все время, пока активен режим, так сказать, на автомате)
SPI:
I2C:
Для SPI в режиме Slave никаких команд не предусмотрено, просто сидим и ждем, пока нам что-нибудь пришлют. Для работы с девайсом подключаем его к ПК, ждем некоторое время, пока ОС не сообщит, что драйвера успешно найдены и установлены, запускаем программу и начинаем обмен данными. Все предельно просто, ведь простота и была одним из критериев при создании устройства.
Да, кстати, программа совместима со всеми версиями Windows, начиная с Windows XP и заканчивая Windows 8, и не требует для работы различной экзотики, типа NetFramework и т.п. Как, впрочем, и сам модуль.
Вот, собственно, и все, программа, плата и исходники прилагаются.
Фьюзы выставляются для работы от внешнего кварца с высокой частотой. Выглядят вот так:
На картинке LOW фьюзы в 1, когда не отмечены, и в 0, когда отмечены. HIGH фьюзы наоборот. В шестнадцатеричном виде это выглядит вот так: HIGH: D9, LOW: FF.
Ну и конечно же видео, т.к. лучше один раз увидеть, чем…
Прикрепленные файлы:
meandr.org
Характеристика:
USB 2.0, стандартный USB-штекер
Компьютер USB интерфейс питания непосредственно, моделирование стандартный последовательный порт используется для обновления оригинальный серийный периферийного оборудования, или увеличение через USB
Поддержка 3.3V и 5V TTL целевая система, полностью совместимы для применения последовательного порта Windows,
Поддержка 5, 6, 7 или 8 бит данных, для поддержки нечетность, проверка четности, пустые знаки и отсутствие контроля четности
Модуль преобразования уровня плюс, RS232, RS485 интерфейс
Поддержка нескольких режиме последовательный порт связи UART, I2C
I2C имеет четыре вида регулируемой скоростью: 20K, 100K, 400K, 750K
Отличная клиентская поддержка загрузки программы STC MCU и отладки, STC официальный рекомендуется программу
Поддержка внешнего выходного напряжения, выбираемых 3,3 5В
Поддержка внешнего источника питания, удобно интегрированы в системы, чтобы использовать
Четкие инструкции из рабочего состояния: зеленый свет на для UART, красный свет на для I2C
Оборудование дуплексный последовательный порт, встроенный приемопередатчик буфер для поддержки связи 50bps скорость передачи ~ 2 Мбит
Поддержка Windows 98/Me/2000/XP/Server 2003/Vista/Server 2008/WIN 7/8/64/32-bit
Обеспечить DLL драйвера и библиотеку интерфейса API, обогатить вторичное развитие исходных текстов программ для вашей справки
Область применения:
Моделирование стандартный последовательный порт для дополнительного сериала обновить оригинальные серийные периферийные устройства, или увеличилась по USB
Нужна I2C, UART, TTL последовательный порт и другие случаи: например, в девяти Brush обновлений маршрутизации, оборудования и технического обслуживания
Способ применения:
Принять 6-контактный интерфейс, расстояние между 2,54 мм, DuPont линий для подключения доступны:
RXI TXO, Земля, VCC, ПДД и SCL
Режим питания:
Создано конфигурации перемычки 6-контактный для достижения следующих функций:
а. USB источник питания, 3.3V, уровень ТТЛ 3.3V подходит для 3.3V TTL целевой системе может обеспечить 3,3 напряжение извне начальной заводской конфигурации на основе.
б. USB-питание, 5В, уровень ТТЛ 5В, подходит для целевой системы 5V TTL, может обеспечить 5V напряжение извне.
В. VCC от внешнего источника питания, на уровне, определяемом напряжения питания, 3,3 В и 5В двух конфигурациях, в этом режиме, USB-питание отключается.
Выбор характеристик:
Зеленый перемычка конец IIC как USB в режим функции IIC
Зеленый перемычка конец TTL как USB в режим функции TTL
В комплект поставки входят:
1 х USB для I2C IIC UART TTL адаптер конвертер
mojo-market.ru