Пятница, 03.05.2024, 14:36
Приветствую Вас Гость | RSS
Главная | | Регистрация | Вход
Меню сайта
Форма входа
Поиск
Календарь
«  Март 2018  »
ПнВтСрЧтПтСбВс
   1234
567891011
12131415161718
19202122232425
262728293031
Архив записей
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
    Мой сайт
    Главная » 2018 » Март » 20 » Какие фьюзы лучше не трогать
    21:28
    Какие фьюзы лучше не трогать
    Fuse-биты — это не страшно.

     YS

    6 лет ago

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

    Что такое lock/fuse биты?

    Все знают, что МК AVR имеют три области памяти: flash, где хранится программа, SRAM — оперативная память, и EEPROM, в которую программа может писать то, что необходимо сохранить после отключения питания. Так вот, есть и четвертая область памяти, доступная для программирования. Она состоит из нескольких байт (например, в ATmega48 четыре байта – один для lock-битов, и байты fuse – low, high и extended), в которых и располагаются эти легендарные биты.

    Для чего они нужны?

    Любой человек, знакомый с микроконтроллерами, привычен к тому, что конфигурирование периферии производится снятием/установкой битов в определенных регистрах. Собственно, байты, содержащие fuse/lock биты, можно сравнить с регистрами, управляющими самыми общими системными настройками: какую память можно читать/писать и можно ли вообще, какой источник тактирования использовать и делить ли его частоту (и на сколько), как быстро система будет входить в рабочий режим, как будет осуществляться программирование и т.д.

    Почему их так боятся?

    Тому есть несколько причин. Как уже говорилось, lock/fuse биты управляют самыми базовыми настройками МК, касающимися, в том числе, и методов его программирования и тактирования. Поэтому, неправильно установив их, очень легко получить нерабочий кристалл. Ситуацию усугубляет то, что активным (установленным), т.е., действующим, является lock/fuse бит, имеющий значение НОЛЬ, что вносит путаницу. Отдельную проблему представляют графические среды, в которых установка настроек производится чекбоксами. В них нет единого стандарта, и потому требуется внимательно следить за тем, что же означает галочка — единицу или ноль в интересующем бите.

    Но на самом деле все не так страшно. Подробная информация о lock/fuse битах располагается в разделе Memory programming даташита на любой МК AVR. Потому самый главный совет – внимательно и вдумчиво читать описание перед тем, как что-то менять.

    Распространенные проблемы.

    Теперь о том, как избежать неприятностей.

    Почти никогда нет необходимости трогать lock-биты. Они управляют запретом чтения/записи программы/данных, а также некоторыми функциями, важными для бутлоадеров. Поскольку запрет на работу с кодом программы для большинства любителей неактуален, и мало кто пишет бутлоадеры, то и трогать эти настройки смысла нет. Впрочем, lock-биты сбрасываются при стирании кристалла, и потому способны вызвать лишь небольшое недоумение у экспериментатора.

    Наибольшим разрушительным потенциалом обладают fuse-битыRSTDISBL, SPIEN и DWEN. Трогать их надо, десять раз подумав и твердо осознавая желаемый результат.

    RSTDISBL отключает вывод reset, делая его обычной ножкой ввода-вывода. Поскольку reset является одной из линий, необходимых для последовательного программирования, его отключение делает оное невозможным.

    DWEN – включает отладку через DebugWire. Поскольку вывод DW совмещен с выводом reset, этот бит имеет тот же конечный эффект, что и RSTDISBL.

    SPIEN – отключает внутрисхемное программирование через SPI.

    Выход из вышеупомянутой ситуации осуществляется с помощью параллельных программаторов. Однако, в силу их малой распространенности можно считать, что установка любого из этих фьюзов в большинстве случаев сделает из МК стильный брелок, ибо обычно дешевле и проще купить новый контроллер, чем собирать/искать параллельный программатор.

    Следующие по силе действия – биты группы CKSELn. Они определяют опции тактирования. По умолчанию большинство МК поставляются работающими от встроенного генератора. CKSELn же дают возможность запустить контроллер от внешнего кварца/тактового сигнала. Собственно, если оный отсутствует, то МК не будет подавать признаков жизни. Лечится это состояние достаточно легко – нужно только подпаять к ножкам XTAL любой кварцевый резонатор (можно даже навесом без конденсаторов), либо спаять простенький генератор на пару мегагерц и подать тактовый сигнал с него туда же. Кристалл оживет и позволит установить правильную конфигурацию. Хотя, если контроллер в корпусе TQFP запаян в плату, а ножки XTAL не разведены, задача может превратиться в небольшой, но увлекательный квест. Поэтому перед программированием этих битов рекомендуется проверить их еще пару раз, если на плате нет резонатора.

    Некоторое разнообразие в рутину отладки может принести бит WDTON. Он принуждает сторожевой таймер работать постоянно. Поэтому, если установить этот бит и забыть про него, есть перспектива наблюдать феномен регулярных перезагрузок МК без видимых причин.

    Экспериментатора также может удивить эффект бита BOOTRST. Оный принуждает программу стартовать с секции бутлоадера, а не с начала (0x0000). Потому его также лучше не трогать, если, конечно, не пишется бутлоадер.

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

    Итак, резюмируя сказанное, несколько простых правил, применимых в большинстве случаев, когда не стоит специальных задач:

    — lock-биты трогать вообще не следует;
    — RSTDISBL, DWEN, SPIEN трогать категорически нельзя.
    — CKSELn стоит проверять до тех пор, пока не появится уверенности в их абсолютной правильности.
    — остальные биты в основном безобидны, но менять их все же желательно с ясным пониманием цели.

    Кроме того, я бы не советовал доверять разнообразным калькуляторам фьюз-бит. Как по мне, цена ошибки тут достаточно высока для того, чтобы провести четверть часа в медитации над даташитом.

    Пример.

    ATmega48 приходит с завода, настроенная на тактирование от внутреннего генератора частотой 8МГц. При этом у нее также запрограммирован fuse-бит CKDIV8, который управляет предделением тактовой частоты кристалла на 8. Таким образом, результирующая частота МК составляет 1МГц. Для меня это маловато, и я всегда в самом начале сбрасываю этот фьюз, чтобы использовать все 8МГц.

    Как уже упоминалось, для однозначности желательно использовать такую утилиту для прошивки, которая позволяет задать фьюзы числом. Я использую консольный AVRdude, потому с этим проблем нет.

    Итак, лезем в даташит, и смотрим, где же находится этот CKDIV8. Из таблицы на странице 288 ясно, что нас интересует младший байт фьюзов:

    Его исходное значение – 0b01100010.CKDIV8 – седьмой бит. Остальные нас устраивают, трогать их не надо. Меняем только старший бит, новое значение младшего байта фьюзов –0b11100010=0xE2. Командная строка для AVRdude будет иметь вид:

    avrdude.exe -p m48 -c ftbb -P ft0 -e -U lfuse:w:0xE2:m -B 4800 -u

    -p m48 — наш МК — ATmega48;
    -c ftbb -P ft0 — я использую ftbb;
    -e — стереть чип перед выполнением указанных действий;
    -U lfuse:w записать младший (lfuse) байт фьюзов
    :0xE2:m — числом 0xE2;
    -B 4800 — делать это помедленнее, чтобы наверняка;
    -u — делать, что велено и не ругаться.

    Заключение

    В целом во fuse-битах нет ничего страшного, всю необходимую информацию можно получить из даташита. Главное — хорошо осознавать цель их установки и быть предельно внимательным при конструировании значения нужного байта.
    Просмотров: 307 | Добавил: marwell | Рейтинг: 0.0/0
    Всего комментариев: 0
    Имя *:
    Email *:
    Код *:
    Бесплатный хостинг uCozCopyright MyCorp © 2024