Лирическое отступление.
Появилось желание обладать железякой - логический анализатор, умеющий не только «ловить» данные из какого-либо источника, но и «воспроизводить» то, что поймано, обратно в шину. Начал искать - ничего не находилось. В течение где-то полутора лет. И вдруг, читая про
хак Baofeng'а, обнаружил то, что хотел -
MSO-19, USB-осциллограф с логическим анализатором и возможностью генерировать сигналы! Всё хорошо, но цена в $249 мне как-то не очень понравилась. Да и осциллограф у меня уже есть. Да и софт у них только под Винду - было бы лень его использовать. Это ж поднимать Virtualbox надо, как минимум…
Продолжил поиски - и нашёл. Французская компания
Ikalogic производит именно то, что нужно. Серия из четырёх четырехканальных анализаторов/генераторов сигнала. Отличаются частотой, объёмом буфера и настройками входов.
В итоге выбрал себе SQ100. Основным критерием при выборе было наличие Open Drain драйвера входа/выхода. Это позволяет, к примеру, работать с I2C, 1-Wire и другими протоколами, где двусторонний обмен идёт по одному проводу. Железяка умеет, к примеру, генерировать запросы от I2C Master и читать ответы от Slave, без переключений выхода. Чуть дальше на видео будет видно, как это выглядит вживую.
Спецификации можно почитать
здесь.
Ну и коротко по устройству/софту, что оно умеет. Всё ниженаписанное относится к версии ScanaStudio 2.400.000-Beta-8 под Linux:
- Работать как 100МГц логический анализатор. Здесь всё как обычно, за исключением того, что в настройках есть возможность выбрать уровень сигналов.
- Умеет отправить то, что было считано анализатором, обратно. В настройках выхода переключается режим, девайс переводится в Generator Mode (однократный или постоянный, пока stop не нажмёшь) - и вперёд.
- Есть Pattern Generator. Возможность создавать с нуля свои сигналы. Как на низком уровне - расставляй high/low уровни вызовами функций, так и на уровне протоколов - есть шаблоны, просто пишешь, что отправить по шине. В качестве языка выбран JavaScript. Отвращения не вызывает, за исключением того, что бинарные данные приходится вводить через parseInt. Есть подсветка синтаксиса, автокомплит, навигация по функциям. Написанное компилится, отправляется в анализатор, он переключается в режим генератора - и всё, собственно. Работает очень быстро.
- Есть возможность быстро сгенерировать (и вывести, соответственно) прямоугольный сигнал заданной частоты с заданным коэффициентом заполнения на любом канале. Пригодилось. Подключал к выводу кнопку от девайса, она дрыгалась шесть раз в секунду. Удобно.
- Развитая система триггеров. Как стандарт, по уровню/фронтам, так и конструктор триггера. Выбирается уровень, задержки и т.д. Есть триггер по протоколам - например, можно запускать получение данных по заданнному I2C Slave Address, по значению байта в UART… Вещь.
- Каналы 1 и 2 могут работать в режиме дифференциальной пары (у SQ200 - две пары: 1,2 и 3,4). CAN, RS485 - здравствуйте! :)
- Напряжение выхода выбирается из ряда значений: 1.8, 2.8, 3.3, 3.6, 5В.
- Подтяжка к земле выбирается из двух значений: 1МОм и 10кОм.
- Есть возможность включить встроенную 10кОм подтяжку выхода к VCC. Критично для I2C, например. Фронты сигнала в результате получаются 1.38us - 1.6us. Неплохо.
- Удобный вывод декодеров протоколов. Как просто HEX/ASCII вывод в окошке сбоку от основного, с возможностью перейти к любому декодированному байту, так и Packets View (на видео видно, что это такое). Можно сохранить вывод декодера в CSV-файл, что есть огромный плюс :)
- Возможность писать свои декодеры протоколов. На JS. Прям в программе. Безумно удобно, вот тут сказать нечего. Причём можно править существующие декодеры, можно создавать на их базе свои.
Минусы
Ну, куда же без них…
- Софт - бета. Соответственно, ещё допиливается, доделывается и развивается. Местами встречаются забавные глюки - например, в protocols manager не работает кнопка close :) Закрывается только по системному хоткею.
- Мало хоткеев. Те, которые есть, местами никак не обозначены. Например, есть возможность сделать скриншот рабочей области нажатием пробела (если фокус стоит на ней). Ни в меню, ни в контекстном меню, ни где-либо ещё я этого пункта не нашёл. Запуск генерации/capture (блин, как это по-русски будет?..) кнопкой F5. Нашлось методом последовательного тыка, тоже нигде про это не написано.
- Есть возможность экспорта в СSV, но нет возможности импорта. Впрочем, они обещают это исправить.
- Невозможно изменить то, что было «захвачено». Т.е. поймал я обмен по I2C, а удалить оттуда ответы слейва перед отправкой обратно - нельзя. Иди в Pattern Generator, пиши код ручками. Будем надеяться - допилят.
UPD: Допилили! В третьей версии появился signal overlay, любой сигнал можно редактировать просто мышкой. Вещь!
- Иногда падает. Очень, очень редко. С 16 по 31 мая упала три раза.
Ну, вроде всё, что хотел написать - написал.
И два видео. Работа по I2C с DS1307. Запись туда значений секунд и его считывание.
Click to view
Click to view