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


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


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 В. Пустячок, а приятно и это на большом экране, с большой глубиной просмотра и без лишних коробок на столе. Как индикатор пока радует. Понятно, что это не средство измерения, но для подтверждения проблем его хватает, а для точных исследований у нас есть другие приборы (но мы их вам не покажем).