Fuse-биты - это не страшно.

AVR
В своей практике я не раз встречался с тем, что lock- и fuse-биты микроконтроллеров AVR достаточно часто наводят сакральный страх на начинающих, а порой и не только. Сия статья призвана раз и, по возможности, навсегда, прояснить ситуацию с этой загадочной областью памяти.



Статья обновлена.

Русская версия.
English version — «Fuse bits aren’t that scary».
  • +4
  • 17 января 2012, 20:51
  • _YS_

Комментарии (26)

RSS свернуть / развернуть
При установке fuse-битов иногда очень удобно пользоваться программами, позволяющими конфигурировать эти биты, выбирая требуемые значения из списка — так сделано в winavr, bascom. Сразу исчезает проблема с чекбоксами, а в отличии от разнообразных калькуляторов, этим средам можно доверять.
0
Как вариант. Но я предпочитаю в таких вопросах верить только даташиту.
0
Неплохо бы осветить использование Lock битов
0
Да, в общем, там освещать нечего. BLB выбирают размер бутлоадера, LB — насколько защищать память (разрешить все/запретить писать/запретить читать/запретить все). В 99% случаев простым смертным это не нужно.
0
Вообще-то, размер бутлоадера определяется из фьюзов, а не локов. В локах определяются разрешения для команд LPM и SPM (как правило — допуск на чтение/запись в application section и то же самое для bootloader section).
0
Э-э-э, да. Но тот, кто пишет бутлоадер — разберется. :)
0
Настаиваю на освящении освещении lock битов — это позволит иметь более полноценный обзор в одном месте
0
Ну, вообще я не ставил целью написать обзор всех фьюзов. Я просто хотел осветить то, чего делать нельзя, и объяснить почему. Вся остальная информация есть в ДШ. Но если Вас так интересуют локбиты, я приведу вольный перевод куска даташита.

Итак,

Комбинация LB2/LB1:

11 — можно читать/писать все.
10 — нельзя ничего программировать. FLASH, EEPROM и fuse залочены.
00 — нельзя ни читать, ни писать ничего и никуда. Кристалл залочен, только стирать.

BLB02/BLB01:

11 — можно все.
10 — нельзя менять программу через SPM.
00 — нельзя ни читать, ни писать программу. Прерывания только для бутлоадера (если перемещены).
01 — нельзя читать программу. С прерываниями то же.

BLB12/BLB11:

11 — все можно.
10 — нельзя писать в бутлоадер через SPM.
00 — ни читать, ни писать бутлоадер нельзя. И прерывания в нем не работают.
01 — нельзя читать бутлоадер. С прерываниями то же.

***

Повторюсь, вся информация есть в даташите.
0
Спасибо, давно ждал подобной статьи :)
0
  • avatar
  • yars
  • 17 января 2012, 21:35
Да не за что. :)
0
Выход из вышеупомянутой ситуации осуществляется с помощью параллельных программаторов.
На самом деле — высоковольтных программаторов (режим параллельного программирования тоже через RESET активируется). Есть еще HVSP — высоковольтное последовательное программирование. По сути, AFAIK, тот же SPI, только RESET активируется напряжением 12В. Вот только не знаю, поддерживают ли его камни кроме 8-ногих тинек.
Алсо есть такая штука как AVR Fusebit Doctor. По цене — примерно как один МК (из которого и состоит, ATmega8 — самый дешевый AVR), так что экономически себя оправдает уже на втором-третьем залоченном МК. Меня он правда не интересует, т.к. по сути является неуправляемым HVPP программатором — а значит, с практически теми же затратами можно собрать нормальный HVPP/HVSP программатор, позволяющий юзать осьминожки на полную катушку (в данный момент меня больше всего привлекает AVRdoper).
Хотя, если контроллер в корпусе TQFP запаян в плату, а ножки XTAL не разведены, задача может превратиться в небольшой, но увлекательный квест.
Да ладно, подпаяться к одной ножке TQFP с шагом 0.8 не так уж сложно. Вот с QFN хуже (а меги в таких бывают).
Кроме того, я бы не советовал доверять разнообразным калькуляторам фьюз-бит. Как по мне, цена ошибки тут достаточно высока для того, чтобы провести четверть часа в медитации над даташитом.
Обычно эти калькуляторы работают на основе атмеловских XML описаний кристаллов (подборочку можно найти в папке с установленной AVRStudio). Вероятность ошибки в этих XML, я думаю, не выше вероятности ошибки в даташите. Зато калькуляторам не свойственны ошибки по невнимательности, которые так свойственны человеку. Так что напротив, калькуляторы заметно надежней, т.к. минимизируют вероятность человеческой ошибки.

Из битов я бы еще упомянул JTAGEN. А то можно надолго задуматься, чего это половина порта С не работает.
0
  • avatar
  • Vga
  • 17 января 2012, 21:57
На самом деле — высоковольтных программаторов (режим параллельного программирования тоже через RESET активируется). Есть еще HVSP — высоковольтное последовательное программирование.

Ну, как по мне, HVSP — вообще экзотика.

Алсо есть такая штука как AVR Fusebit Doctor. По цене — примерно как один МК (из которого и состоит, ATmega8 — самый дешевый AVR), так что экономически себя оправдает уже на втором-третьем залоченном МК.

Знаю, видел. Но чтобы залочить подряд три МК, надо постараться. Не так часто вообще фьюзы менять надо. Даже если поток, то считаются они один раз, потом просто копирование…

Меня он правда не интересует, т.к. по сути является неуправляемым HVPP программатором — а значит, с практически теми же затратами можно собрать нормальный HVPP/HVSP программатор, позволяющий юзать осьминожки на полную катушку (в данный момент меня больше всего привлекает AVRdoper).

Тем более.

Из битов я бы еще упомянул JTAGEN.

Ну, это я отношу к разряду сюрпризов. Может удивить, но не смертельно.
0
Ну, как по мне, HVSP — вообще экзотика.
Как сказать… AVRdoper его держит, а вот HVPP (и просто PP) — нет. Ну и нинай как у AVR, а вот у атмеловских C51 параллельный интерфейс ужасает. У AT89C55 он задействует ЕМНИП 31 ножку (не помню только, посчитал ли я при этом питание и кварц). Не у всякого МК ножек хватит на такой интерфейс!
Тем более.
Но это тем не менее противоречит фразе насчет того, что дешевле выкинуть) К тому же, HVSP позволяет юзать популярные ATtiny13 на всю катушку (т.е. активировать RSTDSBL и поиметь 6 GPIO), так что такой программатор вполне оправдан.
Ну, это я отношу к разряду сюрпризов. Может удивить, но не смертельно.
Но ведь это не помешало тебе описать относящиеся к тому же разряду WDTON и BOOTRST. Так что есть смысл добавить.
0
Но ведь это не помешало тебе описать относящиеся к тому же разряду WDTON и BOOTRST.

Ну, это чисто для примера, какого порядка сюрпризы ждать. Тогда и бит совместимости ATmega128 описывать надо, и еще стопицот. Я при написани оглядывался конкретно на ATmega48. :)
0
А мне посчасливилось автивировать в ATxmega128A фьюз BODLEVEL (при заливке прошивки через JTAG, видимо, плохой контакт спровоцировал), и тоже получил неотзывающийся кристалл. В ERRATA написано, что даже при отлюченом BOD, кристалл не стартанёт, если напряжение питания меньше установленного через BODLEVEL. У меня выставилось 3.4В, а КРЕНка стояла на питание на 3.3В.
0
CKDIV8 не обязательно сбрасывать фузом. Можно и программно этот предделитель нейтрализовать.
0
Гм.
Но куда ценнее инфа о том, что можно жтаг программно нейтрализовать)
Хочу допилить бутлоадер для PB1.1 так, чтобы он мог работать в варианте активации кнопкой А совместно с включенным в фьюзах жтагом. Ну и не только это. Там еще косяки есть.
0
А можно поподробней? Если это можно делать программно, то мы сможем делать более низкое потребление(тупо уменьшая частоту когда нам большая не нужна)
0
Можем, ага. Полуркай регистр CLKPR вот им задается. Бит CKDIV8 определяет только его дефолтное значение, только и всего.
0
Да знаю, от Вас же и услышал раньше. Просто лень во все программы одну и ту же строчку вставлять, когда можно раз и навсегда.
0
Подскажите такую вещь, если я выставлю в sinaprog фьюз
Mode 3: Further programming and verification disabled
надежно ли я защищу кристалл от копирования?
0
  • avatar
  • Omul
  • 18 января 2012, 11:37
Все относительно. AFAIK, снаружи его считать будет нельзя (хотя на кристаллах с поддержкой внешней памяти могут быть нюансы). Но при желании и наличии денег можно вскрыть корпус МК и избирательно стереть фьюзы, не затронув флеш.
0
Это уже другой вопрос, меня интересует, что установив так настройку я защищу чип от обычного считывания программатором (любым)? Взлом кристалла здесь не рассматривается.
0
Кристалл, допустим mega 128
0
Переформулирую вопрос, какие фьюзы надо поставить, чтобы надежно залочить чип. (кроме как отключить reset)
0
Ресет не залочит. Только ISP отвалится.
За фьюзами надо идти в даташит. Скорее всего — выставить локи в Mode 3 и залочить доступ LPM к внутреннему флешу при работе от внешней памяти (если это вообще возможно).
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.