Всех приветствую.


По следам предыдущих статей по логическим анализаторам на Хабре решил таки закончить свой "фундаментальный" труд.


image


Начну немного издалека.


Все началось в в начале 10-х годов, когда я впервые узнал про Saleae Logic (далее под Saleae я подразумеваю 8 канальный анализатор без плисины) на каком-то радиолюбительском форуме.
Принял к сведению. Но уже в 13 в процессе реализации очередного проекта столкнулся с тем, что очень мне понадобился логический анализатор с большим буфером. Доступные в тот момент осциллограф и hanteck la-5034 не позволяли решить проблему.


Главная особенность Saleae и его клонов это отсутствие встроенного буфера — весь поток сразу гонится в ПК и там сохраняется. После чего его можно анализировать, декодировать и экспортировать. С одной стороны мы практически не ограничены в глубине просмотра (можно часами сохраняться данные), с другой стороны максимальная частота семплирования 24МГц. В большинстве случаев хватает, правда из-за программного характера семплирования, у отсчетов есть заметный "джиттер".


В итоге, очень быстро, примерно за сутки, из Харькова, из 6-lab (ныне почившей) мне через проводников доставили их клон saleae с уже встроенными двумя eeprom для переключения типов saleae и xbee (аппаратная часть у этих устройств одинаковая отличаются только vid:pid которые прошиты в eeprom).


image


Соответственно можно пользоваться ПО от обоих производителей.


Вот тогда я и заинтересовался такой штукой как СY7C68013A, ну или короче FX2 (хотя правильней FX2LP).


Это 8051-совместимый микроконтроллер с аппаратным USB2.0 портом и честными 480Мб/с.


В число особенностей входит: 16KB оперативной памяти и возможность загрузить прошивку как из подключенной I2C EEPROM, так и через USB (встроенной flash там нет).


А еще этот МК может прикидываться любым устройством на USB-шине (в смысле откликаться на любой VID:PID).


Немного подробностей из даташита по процедуре загрузки


Рассмотрим случай когда к МК подключена I2C EEPROM.


В таком случае из нее анализируются 8 первых байт:


EEPROM Address Contents
0 0xC0
1 Vendor ID (VID) L
2 Vendor ID (VID) H
3 Product ID (PID) L
4 Product ID (PID) H
5 Device ID(DID) L
6 Device ID(DID) H
7 Configuration Byte

Если первый байт 0xC0 (как в прошивке клонов Saleae), то МК конфигурирует USB-порт с указанными в 1-4 байтах VID:PID и ждет загрузки прошивки через USB. В зависимости от прошитых VID:PID МК может "быть" разным устройством, хоть Saleae хоть Xbee хоть кем. Очень удобно. Можно стопкой припаять EEPROM-ки и джампером выбирать.


А вот если первый байт 0xC2, то начиная с 9 байта в EEPROM должна хранится прошивка для MK, которую он загрузит в RAM и начнет исполнять.


Формат хранения похож на HEX от Intel:


8 Length H
9 Length L
10 Start Address H
11 Start Address L
Data Block
Length H
Length L
Start Address H
Start Address L
Data Block
0x80
0x01
0XE6
0x00
Last 00000000

То есть, прошивка разбивается на блоки которые по отдельности грузятся в разные участки памяти. И соответственно, нет смысла хранить пустые участки.


И вот мы плавно подходим к главному герою нашей статьи DreamSourseLab.


Не буду пересказывать всю историю (я ее толком не знаю и глубоко погружаться смысла не вижу). Это три инженера которые через краудфандинг запилили проект логического анализатора мечты (ну почти).


Что они сделали.


Добавили к FX2 дешевую плисину — Spartan 6 (возможно подсмотрели у Saleae).


А это сразу 16 каналов, это четкие моменты семплирования, это возможность упаковки отдельных бит (две линии можно семплировать в 4 раза чаще чем 8, главное в полосу пропускания USB уложиться). Это возможность сохранять в буфер на высокой частоте (400МГц/4 канала, 200МГц/8 каналов, 100МГц/16каналов), а потом медленно отдавать в ПК. А если к этому прикрутить sigrok с его мощнейшей базой декодируемых протоколов. В общем, проект выстрелил — все довольны. А с учетом того, что авторы сохранили поточный режим (без сохранения во внутренний буфер), то получился логический анализатор мечты (ну почти, потому как сразу захотелось 32 канала и FX3).


Таким образом появился DSLogicPro. Строгая черная коробочка из алюминия с USB-C разъемом.


А дальше инженеры ударились в бизнес. И выпустили коробочки с названием DSLogicBase и DSLogicPlus (как я понял для завоевания мира через китайские сайты), а также DSCope (вешаем парочку 8-разрядных AЦП и вот у нас получился двухканальный осциллограф).


Ну, а чтобы этот процесс шел под строгим контролем немного поменяли разводку плат. То есть электрически и функционально DSLogicPlus и DSLogicPro идентичны, но SRAM висит на плисине на других выводах (это хорошо видно по рисунку дорожек). Подозреваю, что и в других местах сделаны доработки.


Кстати, была сделана очень ценная доработка в плане кабеля подключения исследуемых сигналов. Если в Pro все 16 линий подключаются сразу одним широким разъемом, то в Plus, все кабели разделили на группы по 4 канала который можно подключать отдельно. Ну и сами кабели короткие, коаксиальные и в месте разделки (где коаксиал раздваивается на отдельный сигнальный и общий проводы) стоит маленькая платка с фильтром.


image


И вот, весной 17 года я в Китае заказал себе DSLogicBase (к сожалению я тогда не знал всего-того о чем тут написал). Мне все прислали, но предвкушая буфер на 64 мегасемпла я раскрутил плату и увидел пустое место. Быстро подняв бучу вернул 50% стоимости. А потом занялся изучением вопроса по превращению моего Base в Plus. Именно в этом и заключается отличие Base от Plus — наличием отдельного буфера. В Base используется память встроенная в FPGA.


Летом 17 года по дороге на работу и обратно по полчаса в электричке МЦК я изучал этот вопрос. И довольно быстро стало ясно, что отличия только в запаянной SRAM и паре байт прошивки EEPROM.


Немного про то, что лежит в каталоге DSView/res


Там у нас комплект файлов с раcширениями bin и fw.


bin — это прошивки для плисины. Они загружаются в момент старта программы через fx2.
fw — это бинарные файлы прошивки для FX2.


Если сравнить все файлы fw от окажется, что все они отличаются только байтом PID-а по адресу ближе к концу.


То есть отличия у всех устройств только этим ну и прошивкой плисины (которая как я уже сказал грузится в момент инициализации).


Сравнение fw с тем, что записано в EEPROM (я конечно сразу слил дамп с своего анализатора) показало, что здесь именно развернутая прошивка.


Если прошивку из EEPROM развернуть, то (насколько я помню) они совпадут (для версии ПО 0.96).


Таким образом, как уже писали на хабре, нужно всего лишь припаять память и в прошивке поменять 2 байта (в заголовке и потом далее в прошивке).


Аналогичным образом дорабатывается DSCope, допаиваем память и меняем PID в EEPROM.


Есть еще один нюанс.


По мере выпуска новых версий ПО (0.96-0.99) происходило добавление поддерживаемых моделей оборудования и изменение PID этих моделей.


Вот у меня получилась такая табличка:


FW Size buf 0.96 0.97 0.98 0.99 0.98: 0x20 0.99: 0x20
DSLogic 256Mb 01 01 01 01
DSLogicPro 256Mb 1002 03 03 03 5 5
DSMso 05 05 05 -
DSLogicBasic 256Kb 21 21 21 21 6 6
DSLogicPlus 256Mb 20 20 20 20 6 6
DSCope 256Mb 02 02 02 02
DSCope20 256Mb 04 04 04 04
DSCope B20 256Mb 22 22
DSCope C20 256Mb 23
DSCope C20B 256Mb 24
DSCope C20P 256Kb 25

Кроме этого, в прошивках появился какой-то признак по адресу 0x20 у версии Pro там 5, у Base и Plus там 6. Скорей всего это как раз версия печатной платы.


Кстати, есть еще один способ доработки. Не требующий перепрограммирования EEPROM. Достаточно только запаять SRAM, а потом при компилировании libsigrok4DSL в файл libsigrok4DSL/hardware/DSL/dsl.h внести исправление:


В структуре описывающей оборудование static const struct DSL_profile supported_DSLogic[],
в месте где описывается DSLogic PLus и Base поля PID поменять местами, чтобы программы думала, что у Base PID 20, а у Plus PID 21.


319     {0x2A0E, 0x0020, "DreamSourceLab", "DSLogic PLus", NULL,
320      "DSLogicPlus.fw",
321      "DSLogicPlus.bin",
322      "DSLogicPlus.bin",
323      {CAPS_MODE_LOGIC,
324       CAPS_FEATURE_VTH | CAPS_FEATURE_BUF,
325       (1 << DSL_STREAM20x16) | (1 << DSL_STREAM25x12) | (1 << DSL_STREAM50x6) | (1 << DSL_STREAM100x3) |
326       (1 << DSL_BUFFER100x16) | (1 << DSL_BUFFER200x8) | (1 << DSL_BUFFER400x4),
327       SR_MB(256),
328       0,
329       DSL_BUFFER100x16,
330       0,
331       0,
332       DSL_STREAM20x16,
333       SR_MHZ(1),
334       SR_Mn(1),
335       0,
336       0}
337     },
338 
339     {0x2A0E, 0x0021, "DreamSourceLab", "DSLogic Basic", NULL,
340      "DSLogicBasic.fw",
341      "DSLogicBasic.bin",
342      "DSLogicBasic.bin",
343      {CAPS_MODE_LOGIC,
344       CAPS_FEATURE_VTH,
345       (1 << DSL_STREAM20x16) | (1 << DSL_STREAM25x12) | (1 << DSL_STREAM50x6) | (1 << DSL_STREAM100x3) |
346       (1 << DSL_BUFFER100x16) | (1 << DSL_BUFFER200x8) | (1 << DSL_BUFFER400x4),
347       SR_KB(256),
348       0,
349       DSL_STREAM20x16,
350       0,
351       0,
352       DSL_STREAM20x16,
353       SR_MHZ(1),
354       SR_Mn(1),
355       0,
356       0}
357     },

И ваша версия анализатора с этой версией DSView будет работать как будто у вас настоящий Plus.


А я пока помечтаю о связке Spartan6+FX3+DSView.

Комментарии (17)


  1. ZEN_LS
    17.05.2019 20:59

    Не понятно. Зачем припаивать память к осциллографу. А остальное это про это или я что-то не понимаю. Вот у меня версия plus мне имеет смысл ее патчить?


    1. ebragim
      17.05.2019 23:39
      +1

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


  1. HardWrMan
    18.05.2019 06:46
    +2

    А я пока помечтаю о связке Spartan6+FX3+DSView.

    Мелко мечтаете. Следует мечтать об USB3.Х интерфейсе. Вот тогда бы точно зажили. Мониторю пока подобных девиц, но пока на радаре пусто.

    Мой парк ЛАшек состовляет набор разношерстных зверьков: там и 34 канальный LWLA1034 от SysClk, 8 канальный от 6-лаб и 16 канальный клон Saleae (тот, который с плисиной). И есть как раз DSLogicPro, взятый пару лет назад и DSLogicPlus взятый полгода назад именно из-за изменённого метода подключения входов. Были еще SUMP подобные на 32 входа, но я их подарил.

    В итоге, перепробовав много вариантов я понял одно: ЛА следует выбирать софтом, а потом уже по характеристикам. Ибо удобство пользования + декодеры перекрывают все невероятные харатеристики железки. Сейчас же моим любимцем является Saleae Logic 16 как ЛА с быстрым стартом в проект и DSLogicPlus как ЛА для более детального анализа (из-за более простого написания плагинов к нему, не требующего установки всяких студий). ИМХО, но вдруг полезно будет.


    1. a_freeman
      18.05.2019 08:31

      Посмотрите на свежую версию www.scopefun.com
      И все opensource


      1. HardWrMan
        18.05.2019 09:36

        Ну что я могу сказать об этом варианте. Супер, конечно, но лично мне нужен голый ЛА (осцилл у меня есть с гораздо лучшими характеристиками), причем последнее время 16 каналов уже не хватает. А тут 12 всего. Да и по скриншотам не особо понятно, насколько удобно приложение для пользователя. Я вижу там заточку больше под аналоговый вход. Так что пока буду выжидать.


    1. VT100
      18.05.2019 18:44

      Следует мечтать об USB3.Х интерфейсе.

      Может-быть так? «The FT600 and FT601 function as SuperSpeed USB3.0 to FIFO bridges, providing up to 5Gbps of bandwidth. The FT600 comes in a 56-pin QFN package and has a 16-bit wide FIFO bus interface, while the FT601 is provided in a 76-pin package and has a 32-bit wide FIFO bus interface.»


      1. HardWrMan
        19.05.2019 09:23

        Мост, кстати, офигенный, да. Впрочем, как и всё у FT. Но ведь сам по себе он просто инструмент для достижения результата. К текущим моделям прикрутить этот мост либо невозможно, либо его прикручивание не расширит его возможности, заблокированные в самой программе.

        Самому делать ЛА, конечно, не возбраняется, но я уже вышел на тот уровень, когда начинаешь ценить своё время и понимаешь, что быстрее и надёжнее будет, если проспонсировать специально обученных этому делу людей. В данном контексте — именно создателей ЛА, у которых есть опыт и наработки не только в создании устройства, но и написания удобной программы к нему.


    1. andi123 Автор
      20.05.2019 11:15

      > Мелко мечтаете. Следует мечтать об USB3.Х интерфейсе.
      Мечтаю о том, что в принципе легко реализовать. Все для этого есть (кроме времени, конечно)
      отладка для FX3 и отладка для спартан6+DDR2.
      Немного пайки. Прикрутить проект плисины от dslogic (поменять разрядность шин, интерфейс к DDR, интерфейс к GFXII), сдуть из сети проект для FX3 и sigrok (где-то попадался готовый).
      Осталось сесть и сделать.

      В остальном согласен.


      1. HardWrMan
        20.05.2019 15:55

        Было бы круто. Теоретически, USB3.x покроет 16 каналов на 100Мвыборок/с, без сжатия голых данных это будет 16*100 = 1,6Гбит/с или 200МБайт/с. Да даже при 32 каналах есть еще некоторый запас, если еще втыкать напрямую в хост без хабов и соседей (как я делаю для Saleae Logic 16 — меньше дропов при записи) и тогда бортовое ОЗУ в принципе не нужно. Нужен только высокоскоростной контроллер, который сможет пропустить такой поток данных, и, соответственно, софт, который будет способен принимать такой поток данных и сбрасывать на диск (SSD и/или большой буфер ОЗУ на компьютере). А 100МГц для записи при 16 каналах в потоке должно хватить всем.


        1. andi123 Автор
          20.05.2019 16:46

          FX3 обеспечивает 32 канала на 100МГц. И их же гонит без потерь в USB.
          Это как раз потоковый режим. Но можно и буферный оставить, на 64 линии, ну будет чуть медленней передаваться, это не так критично. Тем более, что 100МГц это практически верхний предел для подключения к цепям соплями.
          В общем надо делать.


          1. HardWrMan
            20.05.2019 17:52

            32 канала да в 100МГц, да еще и в потоке — это просто сон какой-то. А что с софтом?


            1. andi123 Автор
              20.05.2019 17:57

              github.com/zeldin/fx3lafw
              www.youtube.com/watch?v=_LnZrXrdC00
              github.com/schnommus/libsigrok-cypress-fx3-test

              все уже готово, осталось сесть и все собрать в одну кучу.

              Там 2 принципиальных вопроса: это драйвер для sigrok и прошивка для FX3.
              Все это есть в каком-то виде в сети. Хотя идеально если это будет просто еще одно устройство а-ля DSLogic, которое будет работать на их ПО.
              В этом случае получится saleae8 на стероидах (USB3).
              А дальше уже прикрутить FPGA и тогда — буфер, сложные триггеры, упаковка битов (чтобы 8 каналов на 400MHz в потоке), и т.д. А если 16 каналов отдать под двухканальный осцилл, тогда можно замахнуться на гибрид ЛА+осцилл. в одном окне с одной синхронизацией.
              Два аналога+16 цифры, как в моем первом RIGOL-e.


  1. HardWrMan
    18.05.2019 07:18

    В таблице указано 256MB и 256KB. Принято что большая B означает байты. В то время как реально память должна быть 256Mb и 256Kb, т.е. мебибит и кибибит. Что в 8 раз меньше.


  1. AntonSor
    18.05.2019 08:54

    Да, хорошая штука, с удовольствием пользовался, пока после очередного обновления десятки не слетели драйвера, и система не начала ругаться на драйвер без подписи. Пришлось копаться с Залигом, как было указано в их FAQ, но тоже ругается.


  1. sh_max
    20.05.2019 10:51

    Добрый день, можете ли поделится фотками внутренностей DScope? B в целом, как он Вам? Много раз на него посматривал, как дополнение к настольному скопу, но пока что не нашел ни одного вменяемого обзора.


    1. andi123 Автор
      20.05.2019 14:03

      ответил ниже.


  1. andi123 Автор
    20.05.2019 11:02

    image
    image

    В целом он мне понравился. Как уже было сказано главное не железо, а софт.
    А софт тут в целом не плох. Характеристики у него на уровне других usb-осциллов. Пока еще немного путаешься в органах управления (тут нет разделения на поток и буфер, пока не привычно). Но уже как минимум один дефект помог найти.
    На логическом анализаторе сигнала не было (хотя должен был быть). Ткнулся осцилом этим, и все увидел, оказалось, что вывод подгорел и выдавал вместо 3 вольт, 0.3 В. Пустячок, а приятно и это на большом экране, с большой глубиной просмотра и без лишних коробок на столе. Как индикатор пока радует. Понятно, что это не средство измерения, но для подтверждения проблем его хватает, а для точных исследований у нас есть другие приборы (но мы их вам не покажем).