Ес­ли ты занимал­ся мик­рокон­трол­лерами, то, конеч­но, слы­шал о битах кон­фигура­ции. Для раз­ных семей­ств они называ­ются по‑раз­ному: в AVR это фьюзы, а в PIC — кон­фигура­цион­ное сло­во. Сегод­ня мы раз­берем­ся с ними попод­робнее, а еще рас­смот­рим их при­мене­ние для защиты про­шив­ки в кон­трол­лере. И это не был бы «Хакер», если бы мы не показа­ли спо­собы обхо­да такой защиты. Поеха­ли!

info

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

 

AVR

В семей­стве AVR для нас­трой­ки при­меня­ются фьюзы. Фьюзы (от англ. fuse — пре­дох­ранитель) — это осо­бые биты в мик­рокон­трол­лере, которые, как и все биты, хра­нят информа­цию. Их основные осо­бен­ности сле­дующие:

  • они хра­нят­ся и про­шива­ются отдель­но от осталь­ной памяти;
  • из­меня­ются толь­ко извне;
  • уп­равля­ют работой мик­рокон­трол­лера на самом низ­ком уров­не.

Луч­ше все­го их мож­но объ­яснить на при­мере дозимет­ра РКСБ-104.

Дозиметр РКСБ-104
До­зиметр РКСБ-104

Ос­новная нас­трой­ка его выпол­нялась одним перек­лючате­лем на перед­ней панели. А вот более тон­кие нас­трой­ки тре­бова­ли снять защит­ную крыш­ку с зад­ней стен­ки и вос­поль­зовать­ся малень­кими перек­лючате­лями (белые посере­дине).

Задняя панель со снятой крышкой
Зад­няя панель со сня­той крыш­кой

В AVR эти биты для удобс­тва соеди­няют­ся в бай­ты: стар­ший, млад­ший, защит­ный и допол­нитель­ный. К каж­дому биту мож­но получить дос­туп по прин­ципу байт → бит. Млад­ший байт обыч­но отве­чает за так­тирова­ние, а стар­ший — за плюш­ки. Биты отли­чают­ся от чипа к чипу, поэто­му с каж­дым чипом в иде­але сто­ит раз­бирать­ся отдель­но с помощью докумен­тации.

Зна­чение битов в этом семей­стве инверти­рова­но: 1 зна­чит, что бит стерт, а 0 — что уста­нов­лен. Но вот прог­раммы для про­шив­ки МК работа­ют по‑раз­ному. Для раз­ных прог­рамм нуж­но уточ­нять логику работы с фьюза­ми.

Что могут фьюзы в этом семей­стве МК:

  • уп­равле­ние так­тирова­нием (час­тота генера­тора, внеш­ний или внут­ренний генера­тор);
  • раз­решение на чте­ние про­шив­ки мик­рокон­трол­лера (самое инте­рес­ное, но об этом поз­же);
  • уп­равле­ние тай­мерами;
  • за­щита EEPROM;
  • бо­лее спе­цифич­ные фун­кции, их надо уточ­нять к кон­крет­ному чипу.

Са­мые «популяр­ные» биты:

  • CKSEL — их четыре, и они отве­чают за так­тирова­ние;
  • SUT — их два, и они управля­ют режимом запус­ка так­тирова­ния;
  • CKOPT — кон­фигури­рует внут­ренний генера­тор;
  • RSTDISBL — режим работы нож­ки RESET МК;
  • SPIEN — раз­решение SPI;
  • EESAVE — защита EEPROM;
  • BOOTRST — адрес, отку­да начать исполнять код;
  • BODEN — кон­троль питания;
  • SELFPRGEN — раз­решение записи в память изнутри;
  • OCDEN — вот он, бит, раз­реша­ющий чте­ние про­шив­ки.

Счи­тыва­ют фьюзы обыч­но не вруч­ную, а с помощью спе­циаль­ных каль­кулято­ров. Вот один из них — Fusecalc.

Софт

warning

При работе с фьюза­ми будь пре­дель­но вни­мате­лен. Неп­равиль­но выс­тавлен­ный бит может прев­ратить чип в «кир­пич». Перед про­шив­кой уточ­няй логику работы с фьюза­ми в тво­ей прог­рамме.

Linux

Я обыч­но работал с прог­раммой avrdude. При­веду пару команд без допол­нитель­ных парамет­ров (чип, прог­рамма­тор). Счи­тыва­ние про­шив­ки из чипа в файл:

$ avrdude -U flash:r:flash_dump.hex:i

Счи­тыва­ние энер­гонеза­виси­мой памяти в файл:

$ avrdude -U eeprom:r:eeprom_dump.raw:r

За­пись про­шив­ки из фай­ла в чип:

$ avrdude -U flash:w:flash_dump.hex

За­пись энер­гонеза­виси­мой памяти из фай­ла:

$ avrdude -U eeprom:w:eeprom_dump.raw

За­пись фьюзов (0xc3 -> lfuse; 0x99 -> hfuse):

$ avrdude -U lfuse:w:0xc3:m -U hfuse:w:0x99:m

Чте­ние фьюзов в фай­лы:

$ avrdude -U hfuse:r:hfuse.txt:h -U lfuse:r:lfuse.txt:h

Есть допол­нитель­ные парамет­ры и -p. Пер­вый отве­чает за прог­рамма­тор, а вто­рой — за чип. В качес­тве при­мера — коман­да для про­шив­ки кон­трол­лера ATmega328p с помощью USBASP:

$ avrdude -U flash:w:flash_dump.hex -c usbasp -p m328p

В коман­дах есть стран­ные стро­ки вида flash:w:flash_dump.hex. Это стро­ки в спе­циаль­ном фор­мате для avrdude. Для чего такое решение — не знаю ни я, ни кто‑либо еще.

Час­ти этих строк раз­делены дво­ето­чиями:

  • пер­вая часть — область памяти в МК (нап­ример, flash или lfuse);
  • вто­рая — нап­равле­ние (w — write или r — read);
  • третья — файл на локаль­ном устрой­стве (нап­ример, файл с про­шив­кой);
  • пос­ледняя (опци­ональ­ная) — фор­мат фай­ла (нап­ример, r — raw или i — ihex, инте­лов­ский шес­тнад­цатерич­ный).

Бо­лее спе­цифич­ные слу­чаи при­мене­ния этой стро­ки выходят за рам­ки дан­ной статьи.

Windows

Окон­щики обыч­но поль­зуют­ся прог­рамма­ми с GUI. Нап­ример, AvrDude GUI.

Пер­вая вклад­ка пред­назна­чена для заг­рузки про­шив­ки. Мы видим и можем выб­рать целевое устрой­ство, фор­мат фай­лов про­шив­ки и пути к самим фай­лам. Один пред­назна­чен для прог­раммы, дру­гой — для энер­гонеза­виси­мой памяти.

Вто­рая вклад­ка кон­фигури­рует прог­рамма­тор: какая исполь­зует­ся модель и на каком пор­те она сидит.

Вклад­ка управле­ния защит­ными битами.

А вот наконец и фьюзы. Зада­ются они как бай­ты.

Как видишь, все прос­то, и исполь­зовать фьюзы мож­но, даже не откры­вая тер­минал!

info

На Arduino мож­но кон­фигури­ровать МК, не задумы­ваясь о работе фьюзов. Этим занима­ется Arduino IDE в авто­мати­чес­ком режиме.

 

STM

В семей­стве STM для задания кон­фигура­ции исполь­зуют­ся биты в спе­циаль­ных регис­трах. Информа­цию об этих регис­трах и их наз­начении ищи в докумен­тации. Менять зна­чения этих регис­тров мож­но и нуж­но на ходу, но, в отли­чие от AVR, кон­фигури­рует­ся тут не толь­ко самое низ­коуров­невое (так­тирова­ние, нап­ример), но и вся­кая мел­кая перифе­рия.

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

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

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

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

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


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

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

    Подписаться

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