После того как NXP прислали мне кучу всяких микросхем с интерфейсом i2c, я начал их раскуривать некоторые из них. Как известно работа с i2c устройствами сводится к тому, чтоб записать или считать значения хранящиеся в определённых регистрах микросхемы. Обычно на время изучения какой либо микрухи я городил на своей отладочной плате небольшой макет из контроллера, программатора, RS232<-> UART преобразователя и непосредственно самой микросхемы. Через компьютер посылаются команды и контроллер что-то передаёт по шине i2c или наоборот читает, отправляет стартовые и стоповые посылки итд. Примерно таким же образом у меня происходит процесс изучение микросхем с интерфейсами SPI и 1-wire. Чтоб не городить каждый раз тестовый макет было принято решение собрать универсальный отладчик с поддержкой протоколов i2c SPI и 1-wire.

Отладчик i2c SPI 1-wire


Сердцем девайса является микроконтроллер атмега8 в дип корпусе. Почему в дип? Потому что я давно мечтал его куда-то пристроить т.к. выводные детали мной уже почти не используются. Контроллер работает на частоте 8 МГц, этой частоты вполне достаточно да и при пониженном напряжении питания он должен работать вполне стабильно если верить даташиту. У отладчика существуют два рабочих напряжения: 3.3 вольта и 5 вольт. Сделано это для того чтоб не мучиться с согласованием логических уровней у микросхем которые питаются от 3.3 вольт.  Пониженное напряжение создаётся low drop стабилизатором и включается тумблером на плате. Вторая немаловажная микросхема это преобразователь интерфейса USB — UART на новой для меня микросхеме CP2102. Микросхема хорошо себя зарекомендовала: Ком порт не отваливается, скорость передачи данных высокая. И конечно цена тоже вполне адекватная (~2.5$).  Короче вполне достойная альтернатива FT232. Если нет свободного USB порта но есть лишний ком порт, то вполне запросто можно выкинуть эту микросхему и сделать преобразователь уровней на MAX232. Сойдет даже вот такой самодельный преобразователь интерфейсов о котором я писал ранее. Скажу сразу что микросхема очень мелкая:

Отладчик i2c SPI 1-wire

Запаять такое с феном не проблема, на счёт паяльника ничего сказать не могу. Запаивать её нужно так: На контактные площадки равномерно наносятся крошечные шарики припоя. Потом всё это дело щедро смазывается флюсом (я юзал обычный СКФ). После этого надо чтоб флюс немного подсох для загустения. Теперь самое важное — аккуратно поставить микросхему. За счёт флюса она прилипнет и никуда теперь не денется. После этого берем фен и греем до полного припаивания. Греть надо осторожно, следить чтоб флюс не закипал и не брызгался, в противном случае микросхему просто может сместить с её места брызгами. Кстати в процессе работы микросхема тёплая самую малость (едва уловимо если трогать рукой). Кроме этих двух микросхем почти ничего интересного больше в схеме нет:

Отладчик i2c SPI 1-wire

Для шины i2c и 1-wire нужна подтяжка. В данном устройстве она программно отключаемая, т.к. это весьма удобном потому что иногда эти резисторы уже могут быть впаяны в плату с какой либо i2c или 1-wire микросхемой. Так же есть возможность программно управлять питанием подключенного устройства. Для этого служит транзистор T1. Ставить можно любой p-n-p лишь бы тянул через себя нужный ток.  Так же в устройстве есть три светодиода: Зеленый — индикатор питания, Желтый — индикатор активности и Красный индикатор питания подключаемого устройства. В устройстве предусмотрена простенькая защита от короткого замыкания в виде токоограничивающих резисторов на тех линиях микроконтроллера которые являются выходами. Кроме линий входящих в интерфейсы i2c SPI и 1-wire так же присутствует линия f1. Её состояние может управляться программно. Пока не знаю для чего её использовать, просто сделал на будущее. Поскольку корпуса у меня пока нет, (он в пути) то пока юзаю голую платку. Все детали кроме контроллера в SMD исполнении:

Отладчик i2c SPI 1-wire

Самое сложное в этом устройстве это софт. Поскольку в процессе написания прошивки приходилось часто перепрошивать контроллер, то я впервые решил воспользоваться загрузчиком который совместим с программой прошивальщиком AVRPROG которая входит в состав AVR студии. Для того чтоб прошить контроллер в устройстве нужно подсоединить его к порту USB и в течении семи секунд пока горят все три светодиода, запустить прошивальщик. Если всё ок то выскочит окно с интуитивно понятным интерфейсом где нужно выбрать прошивку и нажать кнопку «прошить». Если прошивальщик не видит устройства то нужно поменять номер ком пора у вашего устройства. Желательно установить его в первом десятке ком портов. У меня например он висит на COM5 и всё отлично работает. Если программа для управления отладчиком не хочется конектиться к устройство, то причины и средства устранения те же — сменить номер порта в диспетчере устройств. Прошивка самого устройства не сильно замысловатая: Её задача просто напросто принимать байт по UART и определённым образом дрыгать ногами микроконтроллера. Написана она на микропаскале и подробно рассматриваться тут не будет. Исходник доступен — можете посмотреть сами что там и как. (Больше не доступен. Если очень надо — пишите на почту.) А вот про управляющую программу для компа стоит рассказать подробнее. Существуют три режима работы, по одному на каждый интерфейс: i2c, 1-wire и SPI. О каждом режиме по порядку:

I2C

Как и все остальные режимы, его можно выбрать нажав соответствующий пункт в меню режимов. После этого можно выбирать команды из списка справа и добавлять их нажатием кнопки с плюсиком, удалять добавленное можно крестиком а перемещать строки стрелками. Короче, интерфейс интуитивно понятный. Команды в списке вполне стандартные для интерфейса:

  • i2c_start — отправляет стартовую посылку
  • i2c_stop — отправляет стоповую посылку
  • i2c_write — отправляет байт в шину i2c
  • i2c_read — читает байт из шины i2c
  • i2c_read_last — читает последний байт из шины i2c

Кроме стандартных, было реализованы две дополнительные команды облегчающих работу с шиной:

  • i2c_write_reg — записать определённые данные в определённый регистр
  • i2c_read_reg  — прочитать данные из определённого регистра

Для корректной работы этих двух команд, должен быть верно указан адрес устройства (набор галочек сверху).  Как уже писалось выше — девайс поддерживает программное управление подтяжкой. Для этого используются следующие команды:

  • i2c_pullup_on — включить подтяжку
  • i2c_pullup_off  — выключить подтяжку

Для любого из трёх режимов существуют три одинаковые команды:

  • delay — задерживает выполнение следующей команды на заданное время
  • power_on — включает питание подключенного устройства
  • power_off — отключает питание

Отладчик i2c SPI 1-wire

Сейчас к отладчику подключена платка часов реального времени. На часах 15:47:33.

1-wire

Здесь почти тоже самое что и в предыдущем режиме, за исключением новых команд специфичных для этого интерфейса:

  • 1-wire_read — читаем байт из шины
  • 1-wire_write — пишем байт
  • 1-wire_reset — подаем в шину импульс сброса
  • 1-wire_pullup_on — подтянуть шину
  • 1-wire_pullup_off — выключить встроенную подтяжку

Поскольку ничего с данным интерфейсом кроме датчика DS18B20 у меня не было то подключил его:

Отладчик i2c SPI 1-wire

Сейчас датчик показывает температуру 26 градусов выше ноля.

SPI

Команды вполне очевидные:

  • spi_read — читаем байт из SPI
  • spi_write — пишем байт
  • spi_set_cs_1 — устанавливаем ChipSelect в единицу
  • spi_set_cs_0 устанавливаем ChipSelect в ноль

Ни какого девайса со SPI интерфейсом под руку не попалось, но судя по показаниям осциллографа всё работает адекватно.  Поэтому картинки тут не будет :-)

Чтоб всё заработало, нужно установить фьюзы.  Есть два варианта настройки фьюзов:  С использованием загрузчика  и без его использования. Пока я отлаживал весь этот софт, контроллер прошивался бесчисленное количество раз и постоянно подключать программатор мне надоело и я залил загрузчик. Это позволило прошивать контроллер прямо через USB порт. Загрузчик совместимый с AvrProg (есть в папке с AVR студией). Рекомендую сделать так же. Для того чтоб юзать загрузчик нужно прошить фьюзы так:

Отладчик i2c SPI 1-wire

После включения устройства с прошитым загрузчиком все три светодиода будут гореть около 7 секунд. За это время нужно успеть запустить AvrProg.  Если прошивальщик обнаружил загрузчик то откроется окно в котором нужно просто выбрать файл прошивки и нажать запись.

Если возможность прошивки через USB вам не нужна, то фьюзы можно ставить так:

Отладчик i2c SPI 1-wire

Ни каких других настроек не требуется. Ну разве что указать номер порта в настройках программы.

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

Скачать файлы проекта