Rigol DS1052D -> DS1102D (fw 3.0.1)

Для грядущих экспериментов было принято решение разжиться дешевым осциллом. Так как все они делаются в одной китайской деревне, то выбор пал на наиболее изученный в интернетах — DS1052E. Глянув на не шибко большую разницу в цене между DS1052D, был куплен последний. Мечталось, что приедет он с паршивкой 2.x и можно будет без суеты заапгрейдить его до 100MHz. Китайцы оказались проворней и аппарат пришел с версией 3.0.1, о которой никто еще ничего не слышал. Ждать я не люблю, поэтому моментально было принято мудрое решение хакнуть его самостоятельно. Применен самый быстрый и безопасный способ — бэкап флешки, затем замена образа на старый (2.x), хак и затем апгрейд на новую версию. Тело было вскрыто и определена схема подключения флешки. Подключена она оказалась к DSP BF531 и Lattice FPGA. Вариантов ее чтения/прошивки два — первый написать свой загрузчик для BF531 и загрузить его через штатный BF531 SPI разьем и второй — через JTAG. Так как написать загрузчик возможно лишь при знании ассемблера для BF531 (плюс пришлось бы изучить текущую прошивку на предмет управления адресными линиями флешки, которые подключены к FPGA), то этот вариант отпал сразу, так как эти знания мне даром не нужны, а время все-таки не резиновое.  Внутри скопа есть 3 разьема JTAG: 1 для BF531, 2 для Lattice FPGA и 3 для Cyclone логического анализатора, который для хака нафиг не нужен. Т.е. нужно соединить в цепочку всего два чипа — BF531 и Lattice. Была быстренько спаяна на коленке переходка для JTAG кабеля (байтбластера) :

ByteBlaster          Blackfin JTAG            Lattice JTAG
TMS              —            TMS           —           TMS
TCK              —            TCK            —           TCK
TDI               —            TDI
                                     TDO           —            TDI
TDO             —————————            TDO
GND             —             GND         —            GND
VCC              —————————            VCC

Lattice JTAG pinout (слева направо если смотреть сзади осцилла) :

1 — TCK
2 — GND
3 — TMS
4 — TDI
5 — TDO
6 — VCC

Распиновка Blackfin JTAG см. на http://rigol.codenaschen.de/index.php/JTAG

Был скачен первый попавшийся в google JTAG программатор (TopJtag). Хоть в нем и заявлена поддержка моего любимого LPT Byteblaster’а, но работает он с ним откровенно хреново — во-первых какого-то рожна скорость ограничена 200kГц, во-вторых даже на этой тормознутой скорости он умудряется допускать ошибки при работе с LPT портом. Выглядит это как случайные щелкания реле в осцилле при чтении флехи, что говорит о том, что биты задвигаются с серьезными ошибками. Щелкать реле должно только один раз — в начале и/или в конце процедуры. Посему был взят USB Byteblaster, с которым вышеописанной проблемы нет, но тормоз он все равно еще тот — чтение флешки обьемом 8 Mбайт проистекало 140 минут ! Далее был произведен беглый анализ дампа флешки и по смещению 0x1ff440 обнаружены ASCII строки модели и серийника тела. А что, если просто поменять модель и серийник ? Ведь старый хак именно так и работает — подумано, значит сделано. Кстати, перезапись флешки происходит быстрее, так как можно перезаписывать только нужный сектор — в нашем случае это будет 0x1f0000-0x1fffff. Читаем сектор, патчим (DS1052D -> DS1102D и DS1EC… -> DS1EA…), стираем, пишем, верифицируем, power off/on cycle и … хрен вам а не 100Mhz, сказала пластмассовая китайская шелезяка ! Могучие кетайцi решили сделать еще одну, совершенно бесполезную попытку, помешать русским все иметь на халяву. Т.е. в новом 3.x firmware они решили кроме запрета downgrad’а еще и залочить серийник. Так как исследовать как именно они это сделали не было никакого желания, то были тупо произведены сравнения дампа флехи и образа апгрейда — выяснено, что 0-0×15 в RGL это заголовок, с 0×15 до первых нулей — это «первая часть» и с 0×200000 до упора это «вторая часть». Затерев первой частью с 0 в дампе и второй частью с 0×400000 в дампе мы получим рабочий образ с нужной версией. Делаем для 2.02, шьем, перегружаемся — зашибись. Хачим, как обычно — :INFO:MODEL/:INFO:SERIAL — получаем 2ns в 2.02. Далее апгрейдим до 2.5 и потом до 3.01. Все в принципе круто, за исключением того что HardVersion у меня получилась пустой, кажись я кое-где промахнулся, где бы это …

Окончание следует …

[1] Файл проекта для TopJtag Programmer
[2] BSDL файл для BF531
[3] BSDL файл для Lattice

13 Responses to “Rigol DS1052D -> DS1102D (fw 3.0.1)”

  1. Евгений:

    Да!, действительно, по этому адресу есть нужнее «циферки». Вот только интересует один вопрос: почему бы, не переименовать в 1152-EDU? Есть ли в этом какой-то смысл?

    • Rus Rus:

      Не пробовал менять именно на 1152-EDU, попробуйте — отпишите результат, вернуть взад ведь всегда можно.

  2. Евгений:

    Попробовал… Кроме названия разницы не заметил. На практике ничего меньше 5нс. наблюдать не приходится; может у Вас чего найдётся, этак под МГц.200?
    П.С. Моё железо HW:57 с шестью релюшками, FW:2.04 без SP1 (пробовал выше, вплоть до 3.01 -HWare:57 не нравится.)
    И на всякий случай: после обратного переименования 1152E-EDU в 1102Е, через USB (FW:2.02), в пошивке 29 064 остаются следы, в виде букв EDU.

    • Rus Rus:

      У меня есть возможность глянуть и 300MHz (кстати можно ткнуть в clock DDR-400 старой мамки, там как раз 200MHz). А как откатывались с 3.01 до 2.04 ? Перезаливкой дампа ?

      • Евгений:

        Ну 300 уже, наверное, щуп не потянет ;)
        Откатился да, -сохранил, сначала, 64ку 2.04, он у меня старенький с ней и шёл. Сливал программатором, минут 5 ;) Кстати есть отличная прога: Beyond Compare, с ней можно попробовать выколупать вторую часть 64. Жалко только что у Вас D версия…

        • Rus Rus:

          Hmm, а что значит «вторую часть» ? Вы только половину прошивали ?

          • Евгений:

            Нет, я имел ввиду отделить прошивку что на USB 32Mb. от той что льют на заводе 64Mb. -Можно будет влить вместо 3.01 любую, ну и кирпичи лечить… Сравните bin флэшки 3.01 с USB rgl 3.01…

          • Rus Rus:

            См. продолжение поста, наконец нашел 5 минут чтоб вкратце описать.

  3. Евгений:

    Да Вы промахнулись с 1FFFC1 по 200000 :) . И поздравляю с успехом! ;)

  4. Aleksei:

    Промучался 2 дня так и не смог выковырять дамп. Планируется ли продолжение ?

    • Rus Rus:

      Так про дамп уже все написано в посте. Чего его выковыривать-то, тупо сливаем и все. Если влом искать JTAG кабель, то можно выпаять флешку, вон чех с eevblog так всегда и делает.

  5. Aleksei:

    Есть китайский usbByteblaster , topjtag ругается что то вроде no chain detect.Флешку выпаять не проблема,труднее с программатором вернее с адаптером.Вся прелесть без геморойно (паяльники , фены)вытащить дамп ,насколько я знаю на eevblog ни кому jtag победить не удалось.
    PS извиняюсь за глупые вопросы ,я пока чайник в этом.

    • Rus Rus:

      бесполезный опыт eevblog меня мало интересует, так как я слил и перепрошил осцил именно через jtag. Нужно :

      1. убедиться что bb работает с topjtag, воткнув его в другую схему
      2. убедиться, что правильно собрана переходка, схему которой я привел в посте
      3. можно подтянуть TRST к VCC через 2k-10k, вдруг он плавает

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