В этой статье мы изго­товим прог­рамма­тор мик­росхем 25-й серии из кло­на Arduino UNO, рас­счи­таем резис­тивный делитель для сог­ласова­ния уров­ней нап­ряжения, под­клю­чим к прог­рамма­тору трех­воль­товый чип памяти, сде­лаем резер­вную копию его содер­жимого и запишем новые дан­ные.

Нас пов­сюду окру­жают элек­трон­ные циф­ровые устрой­ства. Мно­гие телеви­зоры, авто­маг­нитолы, монито­ры, мар­шру­тиза­торы, материн­ские пла­ты компь­юте­ров и ноут­буков хра­нят свои управля­ющие прог­раммы в мик­росхе­мах памяти SPI Flash. Иног­да для ремон­та или рас­ширения фун­кци­ональ­нос­ти таких устрой­ств тре­бует­ся переп­рошив­ка. А может, ты задумы­ваешь­ся о надеж­ном хра­нении неболь­ших объ­емов цен­ной для тебя информа­ции? Тог­да читай о том, как мож­но исполь­зовать для этой цели SPI Flash!

 

Вещь в себе

Од­нажды мне в руки попал SOHO-мар­шру­тиза­тор Ethernet/Wi-Fi, который на повер­ку ока­зал­ся одним из брен­дирован­ных вари­антов ZTE H118N. Он вклю­чал­ся, работал, но был прак­тичес­ки бес­полезен без кон­трак­та с интернет‑про­вай­дером. Нас­трой­ки в веб‑интерфей­се ока­зались заб­локиро­ван­ными, сетевые служ­бы — отклю­чен­ными, а поиск в интерне­те показал, что прев­ратить его во что‑то более‑менее при­год­ное мож­но лишь путем замены firmware — прог­рам­мно­го обес­печения, хра­няще­гося в мик­росхе­ме пос­тоян­ного запоми­нающе­го устрой­ства. Изго­тови­тель мар­шру­тиза­тора позабо­тил­ся о том, что­бы пре­сечь прог­рам­мный спо­соб замены содер­жимого пос­тоян­ной памяти. Но путь «переп­рошив­ки» с помощью прог­рамма­тора остался откры­тым.

info

Ес­ли ты дума­ешь, что про­тив отвер­тки и паяль­ника бес­силь­но любое элек­трон­ное устрой­ство, то спе­шу тебя разоча­ровать. Некото­рые ком­понен­ты информа­цион­ных сис­тем финан­сового сек­тора, нап­ример пла­теж­ные тер­миналы и бан­коматы, помимо прог­рам­мной защиты, име­ют защиту физичес­кую. При попыт­ке вскрыть кор­пус таких устрой­ств хра­нящи­еся в них дан­ные могут быть без­воз­врат­но утра­чены из‑за отклю­чения под­держи­вающе­го элек­тро­пита­ния или физичес­ки раз­рушит­ся носитель информа­ции, нап­ример подачей элек­три­чес­кого импуль­са от пре­дус­мотри­тель­но уста­нов­ленной батарей­ки. В пос­леднем слу­чае воз­можны даже шумо‑дымовые эффекты.

Про­дол­жив изу­чать воп­рос, я узнал, что на некото­рые мар­шру­тиза­торы подоб­ного клас­са мож­но уста­новить опе­раци­онную сис­тему OpenWrt на осно­ве Linux, зна­читель­но рас­ширя­ющую их воз­можнос­ти. Заод­но не без инте­реса почитал на форумах дис­куссии, пос­вящен­ные вос­ста­нов­лению мар­шру­тиза­торов, «окир­пичен­ных» (не пода­ющих приз­наков жиз­ни) неудач­ными попыт­ками такой уста­нов­ки. В осо­бо тяжелых слу­чаях эта про­цеду­ра сво­дит­ся к заг­рузке «дам­пов» (обра­зов firmware) с помощью прог­рамма­тора. К тому же ока­залось, что мар­шру­тиза­торы раз­ных про­изво­дите­лей, пос­тро­енные на одной или схо­жей аппа­рат­ной плат­форме, могут фун­кци­они­ровать под управле­нием прог­рам­мно­го обес­печения кон­курен­тов. В общем, вся информа­цион­ная сре­да под­талки­вала к тому, что­бы про­вес­ти над име­ющим­ся у меня устрой­ством сме­лые экспе­римен­ты.

 

Что мы будем делать?

Увы, мои надеж­ды получить ком­пак­тное уни­вер­саль­ное Linux-устрой­ство раз­бились о суровую дей­стви­тель­ность. Сняв крыш­ку кор­пуса, я уви­дел мик­ропро­цес­сор RTL8676S, о котором очень мало тех­ничес­кой информа­ции в сво­бод­ном дос­тупе, а инте­рес к нему со сто­роны сооб­щес­тва OpenWrt про­пор­циона­лен объ­ему этой информа­ции. Но почему бы не дать это­му мар­шру­тиза­тору шанс, заменив его про­шив­ку стан­дар­тной, исполь­зующей­ся на ана­логич­ных устрой­ствах?

Электронная плата маршрутизатора ZTE H118N с микросхемой ПЗУ Winbond 25Q128FVSG
Элек­трон­ная пла­та мар­шру­тиза­тора ZTE H118N с мик­росхе­мой ПЗУ Winbond 25Q128FVSG

У края пла­ты нет­рудно заметить 8-вывод­ную мик­росхе­му пос­тоян­ного запоми­нающе­го устрой­ства W25Q128FVSG, вок­руг которой будут раз­вивать­ся даль­нейшие события. Из спе­цифи­кации мы можем узнать, что она пред­став­ляет собой память, реали­зован­ную по тех­нологии NOR Flash, дос­туп к которой выпол­няет­ся с помощью пос­ледова­тель­ного интерфей­са SPI. Информа­цион­ная емкость мик­росхе­мы сос­тавля­ет 128 Мбит (16 Мбайт), и работа­ет она в диапа­зоне нап­ряжения от 2,7 до 3,6 В.

www

Спе­цифи­кация мик­росхе­мы Winbond 25Q128FVSG дос­тупна на сай­те про­изво­дите­ля.

Ши­роко исполь­зуемое для прог­рамми­рова­ния подоб­ных «мик­росхем 25-й серии» прис­пособ­ление — недоро­гой USB-прог­рамма­тор на кон­верте­ре CH341A. Для внут­рисхем­ного прог­рамми­рова­ния (то есть без сня­тия мик­росхе­мы с пла­ты) он ком­плек­тует­ся спе­циаль­ным зажимом‑при­щеп­кой, который обхва­тыва­ет мик­росхе­му памяти и обес­печива­ет необ­ходимый кон­такт. В моем арсе­нале такого чудес­ного инс­тру­мен­та не ока­залось, зато нашел­ся клон Arduino UNO. Для него есть скетч frser-duino, прев­раща­ющий его в UNO-прог­рамма­тор, с которым уме­ет работать ути­лита flashrom.

info

Как ты зна­ешь, Arduino — это про­ект по раз­работ­ке «дру­жес­твен­ных» к поль­зовате­лю наборов элек­трон­ных ком­понен­тов, спе­цифи­кации которых пуб­лику­ются под откры­той лицен­зией. Одним из самых успешных изде­лий ста­ла пла­та UNO, на которой «цен­траль­ный» мик­рокон­трол­лер ATMega328P, допол­ненный необ­ходимой для фун­кци­они­рова­ния обвязкой и удоб­ными кон­так­тны­ми линей­ками, осна­щен «сокон­трол­лером» ATMega8U2 (вер­сии R1 и R2) или ATMega16U2 (вер­сия R3), реали­зующим фун­кцию кон­верте­ра USB-serial, что упро­щает заг­рузку прог­рамм в устрой­ство. Кста­ти, прог­рам­мные про­екты для Arduino и ском­пилиро­ван­ный из них дво­ичный код называ­ют скет­чами (sketch).

Бла­года­ря откры­той лицен­зии и боль­шому чис­лу пок­лонни­ков Arduino UNO дру­гие про­изво­дите­ли осво­или выпуск ана­логич­ных устрой­ств, вно­ся в ори­гиналь­ную схе­му некото­рые изме­нения. В час­тнос­ти, для сни­жения сто­имос­ти изде­лий соп­ряжение USB-serial час­то реали­зует­ся не уни­вер­саль­ным прог­рамми­руемым «сокон­трол­лером», а спе­циали­зиро­ван­ным интерфей­сным чипом CH340G.

Что­бы переп­рограм­мировать наш подопыт­ный мар­шру­тиза­тор, при­дет­ся выпол­нить сле­дующие шаги.

  1. Под­готовить рабочую сре­ду на пер­сональ­ном компь­юте­ре.
  2. Соб­рать в рабочей сре­де скетч frser-duino из исходных тек­стов.
  3. За­писать скетч frser-duino в клон Arduino UNO — получит­ся UNO-прог­рамма­тор.
  4. Под­клю­чить мик­росхе­му SPI Flash к UNO-прог­рамма­тору.
  5. За­писать firmware из фай­ла обра­за в SPI Flash.
 

Подготовка рабочей среды

Ра­боту над прог­рам­мным обес­печени­ем я выпол­нял в при­выч­ной мне сре­де Bodhi Linux 4.5 64 бит, базиру­ющей­ся на Ubuntu 16.04. Так что опи­сан­ные дей­ствия дол­жны подой­ти для любых более‑менее сов­ремен­ных дис­три­бути­вов Linux, про­изводных от Ubuntu. Понадо­бит­ся толь­ко уста­новить сле­дующие пакеты:

  • build-essential — средс­тва для сбор­ки прог­рам­мно­го обес­печения из исходных тек­стов;
  • arduino-core — метапа­кет, содер­жащий кросс‑ком­пилятор gcc-avr для мик­рокон­трол­леров AVR и ути­литу для их прог­рамми­рова­ния avrdude;
  • flashrom — ути­лита для управле­ния прог­рамма­тора­ми мик­росхем памяти.

Ус­танов­ка перечис­ленных инс­тру­мен­тов из репози­тория выпол­няет­ся коман­дой

sudo apt install build-essential arduino-core flashrom

Под­клю­чение пла­ты кло­на Arduino к рабоче­му компь­юте­ру с помощью USB-кабеля соп­ровож­дает­ся соз­дани­ем фай­ла пос­ледова­тель­ного пор­та /dev/ttyUSB0:

crw-rw---- 1 root dialout 188,0 ... /dev/ttyUSB0

Для про­вер­ки работы мож­но вос­поль­зовать­ся сле­дующей коман­дой:

avrdude -c arduino -p atmega328p -P /dev/ttyUSB0 -b 115200

В этой коман­де параметр -c ука­зыва­ет тип прог­рамма­тора, -p (строч­ная бук­ва) — модель прог­рамми­руемо­го мик­рокон­трол­лера, -P (про­пис­ная бук­ва) — файл пос­ледова­тель­ного пор­та прог­рамма­тора, -b — ско­рость информа­цион­ного обме­на. На экра­не дол­жна появить­ся сле­дующая информа­ция:

avrdude: AVR device initialized and ready to accept instructions
Reading | ### ... ## | 100% 0.00s
avrdude: Device signature = 0x1e950f (probably m328p)
avrdude: safemode: Fuses OK (E:00, H:00, L:00)
avrdude done. Thank you.

Ес­ли вмес­то это­го ты видишь стро­ку

avrdude: ser_open(): can't open device "/dev/ttyUSB0": permission denied

зна­чит, у тебя нет прав на дос­туп к пор­ту. Для их получе­ния надо стать чле­ном груп­пы dialout и пов­торно зай­ти в сис­тему:

sudo usermod -aG dialout xakep && exit

Вмес­то xakep исполь­зуй имя сво­его поль­зовате­ля. Про­верить членс­тво в груп­пах можешь коман­дой groups.

По­лучи­лось? Тог­да перед тем, как дви­гать­ся даль­ше, сде­лай резер­вную копию флеш‑памяти тво­его кло­на Arduino с находя­щими­ся там сей­час скет­чем и заг­рузчи­ком:

avrdude -c arduino -p atmega328p -P /dev/ttyUSB0 -U flash:r:uno_backup.hex:i

На экран сно­ва будет выведе­но нес­коль­ко информа­цион­ных строк, а в текущем катало­ге появит­ся файл uno_backup.hex, содер­жащий образ флеш‑памяти в фор­мате Intel HEX.

info

В пос­ледней коман­де я не ука­зал параметр, зада­ющий ско­рость обме­на. Прог­рамма avrdude исполь­зует зна­чение 115200 для прог­рамма­тора arduino по умол­чанию. Но если по какой‑то при­чине ты получил серию сооб­щений о неп­равиль­ной ско­рос­ти обме­на, вот таких:

avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x9f

то поп­робуй вер­нуть этот параметр в коман­ду.

 

Сборка скетча для UNO-программатора

Что­бы прев­ратить клон Arduino в UNO-прог­рамма­тор, надо записать в него машин­ный код скет­ча frser-duino, который мы пря­мо сей­час соберем из исходных тек­стов. Для получе­ния исходни­ков из интернет‑репози­тория мож­но выпол­нить сле­дующие коман­ды:

wget -O frser-duino.zip https://github.com/urjaman/frser-duino/archive/refs/heads/master.zip
wget -O libfrser.zip https://github.com/urjaman/libfrser/archive/refs/heads/master.zip

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    1 Комментарий
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии