Логический анализатор

В этой статье пойдет речь о логическом анализаторе - незаменимом инструменте для реверс-инжиниринга, да и вообще полезном в хозяйстве приборе. Для тех кто ни разу с подобным прибором не сталкивался скажу, что логический анализатор это что-то типа осциллографа, но у него много каналов и он может различать только два состояния сигнала: логический ноль и единицу. Используется оно в основном чтоб присосаться к какой-нибудь шине данных и считывать с неё то,  что по ней передается, в компьютер. Ну а на компьютере работает специальный софт который эти данные отображает в дружественном для пользователя виде. Если бы программа просто показывала нам набор единиц и нулей растянутых во времени, то толку от этого было бы мало ибо анализ таких данных очень сложен и может взорвать моск даже опытному инженеру.  Поэтому, все нормальные программы умеют декодировать протоколы типа 1-Wire, i2c, SPI, UART и так далее. Собранный мной анализатор поддерживает две популярные программы Saleae Logic и USBee Suite
 
logic analyzer
 

Сердцем девайса является контроллер CY7C68013A широко известный на просторах интернетов. Именно на нем народ клепает приборы вроде моего. К сожалению, у нас я не смог найти такой, пришлось покупать (13$) на Ebay небольшую отладочную платку с этим контроллером, а потом варварски его оттуда выковыривать. Кстати на той же плате есть почти все что нам потребуется для изготовления девайса (кроме буфера). Сама платка выглядит вот так:

CY7C68013A dev board

Шаг выводов у контроллера очень мелкий, и если у вас не возникает желания "подковать блоху", то можно оставить контроллер на своем месте просто подпаяв к этой плате буфер. Но тут есть один момент об который я ломал голову почти целый день - этой на плате стоит не совсем та микросхема памяти.  В первых нескольких байтах этой микросхемы должен быть записан идентификатор устройства и производителя (PID и VID). Как потом оказалось эта EEPROM память, может быть использована программой контроллера для каких-то своих целей. Прошивка предполагает, что к контроллеру подключена память 24lc02 ну а фактически китайцы туда присобачили 24lc128. Из-за разницы в адресации к ячейкам, прошивка не может записать (или прочитать?) что-то в какую-то ячейку памяти и девайс не стартует. Однако те самые первые байты с PID и VID пишутся/читаются правильно даже с микросхемой памяти большего объёма. Микросхема достаточно редкая (потому что старая) и я не нашел её не местном радиобазаре и втыкал всякие по очереди из тех что были в наличии. Успешно заработала 24lc04, а 24lc16 и всё что больше - работать правильно отказались. Эта проблема была только с софтом от Saleae, что же касается USBee, то там все работало без замены микросхемы. Кстати у контроллера CY7C68013A есть одна примечательная особенность: Он не имеет ни какой энергонезависимой памяти в которой хранится его прошивка. Она записывается в контроллер драйвером и остается в нем пока есть питание. Таким образом меняя VID и PID в микросхеме памяти, мы можем превратить девайс во что угодно :-) Теперь посмотрим из чего же сделан наш девайс: 

logic analyzer sch

А собственно ничего почти в нем и нет: 

  • Сам контроллер CY7C68013A
  • Микросхема памяти
  • Буфер 
  • Стабилизатор на 3.3 в
Ну и всякая типовая обвязка. Кстати на конденсаторах народ народ на форумах экономить не рекомендует, иначе самопроизвольные сбросы и прочие сюрпризы вам гарантированы. Отдельно стоит рассказать о назначении перемычек. Нафига нужна JP3 я пока не понял, но на всякий случай поставил, так как во многих подобных девайсах она есть. Без неё всё пока работает нормально. Перемычка JP1 управляет защитой от записи, её наличие разрешает запись чего-либо в микросхему. JP2 нужна для того чтоб временно отсоединять память от контроллера для её дальнейшей прошивки. Как это сделать сейчас разберемся. Кстати, прошить её можно обычным программатором для подобных микросхем, но для удобства лучше воспользоваться моим способом. Первым делом нужно скачать (и установить!) Cypress SuiteUSB 3.4, сделать это можно на официальном сайте или у меня. Затем необходимо снять перемычку JP2, а перемычку JP1 установить. После этого подключаем девайс и видим появилось новое устройство. После установки драйверов оно должно отображаться так: 
 
eeprom missing
 
Понятно, что контроллер не обнаружил микросхемы памяти и не понимает кто он из-за невозможности прочитать VID и PID. Когда контроллер находится в таком режиме, мы можем записать что-то в EEPROM память при помощи специальной утилиты которую мы установили ранее. Возвращаем перемычку JP2 на место при этом не отключая устройство! Теперь нужно запустить программу Usb control center и выбрать в списке слева наше устройство "Cypress EZ-USB FX2LP EEPROM missing". Потом нужно в меню выбрать пункт Program FX2 -> Small EEPROM и в открывшемся окне выбрать тот файл содержимое которого нужно прошить в EEPROM. Если вы желаете использовать софт Saleae Logic, то нужно прошить туда вот этот файл. А если хочется юзать USBee Suite, то вот этот. Когда все успешно прошьётся, то внизу окна появится соответствующая надпись: 

prog success

Если там ошибка, то не установлены перемычки JP1 и JP2. Теперь можно устанавливать софт и пробовать запустить анализатор. Софт Saleae Logic скачать можно на официальном сайте или тут, а USBee Suite  скачивается тут или у меня. Установка ни каких проблем вызвать не должна, везде нажимаем "далее" и со всем соглашаемся :) Особо активно я пока этот анализатор не использовал, поэтому о софте подробнейшего рассказа не будет, расскажу только базовые возможности этих двух софтин. Ну а начну с чего попроще: Saleae Logic. Софт умеет декодировать следующие протоколы: 
  • CAN
  • DMX-512
  • I2C
  • I2S / PCM
  • Manchester
  • 1-Wire
  • Async Serial
  • Simple Parallel
  • SPI
  • UNI/O

Данные после декодирования можно выгрузить в текстовый файл или сохранить в сыром виде а потом анализировать. Например вот так выглядит обмен данными между термометром DS18B20 и контроллером:

saleae 1-wire

А вот тут я шлю привет через UART:

saleae uart hello

Захват данных может начаться как в ручном режиме так и по триггеру. Достоинство этой программы в простоте и интуитивно понятном интерфейсе. А еще она не очень требовательна к ресурсам по сравнению со следующей программой USBee Suite. Сразу после запуска у нас появятся 8 цифровых каналов и один аналоговый, которого в нашей конструкции физически нет. Поэтому его можно отключив нажатием крестика около него. Ну или можно припаять АЦП и немного обвязки и он начнет работать. Но мне с моим нормальным осциллографом это нафиг не нужно и я не стал заморачиваться. Программа умеет понимать следующие протоколы 

  • I2C
  • I2S
  • CAN
  • Sync Serial
  • Parallel bus
  • USB
  • SPI
  • Async Serial
  • PS/2
  • SMBus
  • 1-Wire

Самый главный плюс - оно понимает USB, пока он мне не нужен, но скоро буду раскуривать и вот тогда анализатор будет как раз кстати. Я попробовал снять те же самые данные что и выше, при помощи этой программы. Опять тот же самый 1-Wire термометр от Dallas semiconductor: 

1-wire-usbee

и опять те же данные отправляемые через UART:

uart-usbee

Меня удивило то, что не смотря на всю свою крутость обе программы не умею делать автодетект скорости UARTa. Что касается остальных протоколов, то до них еще не дошла очередь, но я обязательно их испытаю. Ни какого корпуса для девайса у меня нет, но возможно в ближайшем будущем он появится. Еще рекомендую купить цветных проводков, ведь каждому каналу в программах соответствует свой цвет и это очень удобно. Не лишними будут так же хваталки, которыми удобно присасываться почти к любому месте на плате:

Test-Hook-Clip-Probes

Называются они "Test Hook Clip Probes" если кто будет искать в магазинах заморских. Продаются они сразу по 20 штук на DealExtreme. Предвидя вопросы на счёт платы, скажу сразу что она сделана обычным ЛУТом. Ничего ни где не отвалилось. Контроллер был припаян при помощи паяльника, матов и фена. Главное не торопиться. Ну а все остальные детальки очень большие и паяются феном или паяльником легко и непринужденно.  Кстати, моя первая плата в Eagle, так что прошу не судить строго :)

first pcb eagle

Саму печатку можно скачать тут. Предложения и комментарии принимаются.