Tag ds1052d ds1102d hack jtag fast

Rigol DS1052D -> DS1102D (fw 3.0.1)

28 Июль, 13:44, by Rus Метки:

Для грядущих экспериментов было принято решение разжиться дешевым осциллом. Так как все они делаются в одной китайской деревне, то выбор пал на наиболее изученный в интернетах — 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