Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » FAQ по Bascom AVR и МК » Установка FUSE-битов


Установка FUSE-битов

Сообщений 1 страница 2 из 2

1

Подборка из разных источников.
В частности, отсюда

CKSEL – выбор тактового генератора для микроконтроллера.
Для работы микроконтроллера (как и для любого процессора) нужны тактовые импульсы. Источником тактового сигнала может быть:
– внутренний RC генератор. Никаких дополнительных элементов не нужно. Удобно, но RC генератор имеет небольшую точность работы (вплоть до 10% погрешности) и, кроме того, «плывет» от температуры. Для некритичных по времени приложений вполне годиться.
– внешний кварцевый (или керамический) резонатор. Нужен сам резонатор, плюс два конденсатора на 15-30пФ. Соответственно, будут заняты две ножки микроконтроллера – XLAT1 и XLAT2. Применяется там, где нужны точные замеры времени или частота работы микроконтроллера выше, чем может дать внутренний RC генератор.
– еще можно тактировать микроконтроллер от внешнего источника тактового сигнала. Это может быть другой микроконтроллер (для синхронизации работы) или внешняя схема, дающая нужный сигнал. Тактовый сигнал подается на ножку XLAT1.

Источник тактового сигнала для микроконтроллера задается комбинацией битов CKSEL3…0.

Это может быть (например для ATTiny2313):
CKSEL3…0 = 0000 – Внешний тактовый сигнал;
CKSEL3…0 = 0010 – Внутренний тактовый генератор – частота 4 МГц;
CKSEL3…0 = 0100 – Внутренний тактовый генератор – частота 8 МГц;
CKSEL3…0 = 1101 – Внешний тактовый генератор – кварц частотой от 3 до 8 МГц;
CKSEL3…0 = 1111 – Внешний тактовый генератор – кварц частотой больше 8 МГц.

CKOUT – разрешает вывод тактовой частоты на ножку CLKO микроконтроллера (для тактирования других устройств).
CKOUT = 1 – ножка микроконтроллера работает как обычный порт ввода-вывода;
CKOUT = 0 – на ножку микроконтроллера выдается сигнал тактового генератора.

CKOPT – задает размах тактового сигнала на внешнем генераторе.
CKOPT = 1 – размах небольшой – генератор работает в экономном режиме. Нормально генератор может работать лишь при небольших частотах и в условиях близким к идеальным. При значительных помехах, большой тактовой частоте, перепадах (скачках) напряжения питания, микроконтроллер может работать нестабильно;
CKOPT = 0 – задающий генератор работает на полную мощность, устойчив к помехам и может работать во всем диапазоне частот. Если нет особых требований к энергосбережению – советую всегда программировать этот бит.

SCKDIV8 – деление тактовой частоты на 8.
SCKDIV8= 1 – микроконтроллер работает на частоте задающего генератора;
SCKDIV8= 0 – микроконтроллер работает на частоте в 8 раз меньше частоты задающего генератора;

SUT – задает скорость запуска микроконтроллера.
После снятия «сброса» (или подачи питания) программа, записанная в микроконтроллер, начинает работать не мгновенно. Микроконтроллер выжидает некоторое время, для того, чтобы нормально запустился тактовый генератор, установилось напряжение питания и т.д. Время ожидания до запуска программы и задают биты SUT1…0. Чаще всего нам не критична скорость запуска, поэтому можно устанавливать на максимум.
SUT1..0 = 11 – максимальное время запуска (чуть больше 65 mS).
На время запуска еще влияет CKSEL0.

RSTDISBL –разрешает использовать ножку Reset как еще один порт ввода-вывода.
Иногда нужная вещь, но нужно знать - после программирования RSTDISBL микроконтроллер уже нельзя будет прошить последовательным программатором !
Поэтому без особой надобности не трогайте его !
RSTDISBL = 1 – ножка Reset работает как сброс;
RSTDISBL = 0 – ножка Reset работает как еще один порт ввода-вывода, последовательное программирование отключено.

SPIEN – разрешение на последовательное программирование по SPI-интерфейсу.
По умолчанию запрограммирован (0) – разрешено последовательное программирование.
SPIEN = 0 – разрешено последовательное программирование;
SPIEN = 1 – запрещено последовательное программирование.

WDTON – включает Watch Dog Timer.
Для ответственных приложений, там, где недопустимо зависание программы (будь то ошибка программы или злостная помеха), применяют Watch Dog Timer. Это внутренний таймер микроконтроллера, работающий от своего независимого генератора. При переполнении этого таймера микроконтроллер сбрасывается и начинает выполнять программу с начала. Программист должен в тесте программы (обычно в главном цикле) вставить специальную команду обнуления этого таймера (WDR). Команда периодически выполняется и обнуляет таймер, не давая ему переполнится. Если микроконтроллер «повис» перестают выполняться команды обнуления, таймер переполняется и сбрасывает микроконтроллер.
WDTON = 1 – Watch Dog Timer – отключен (можно включить программно);
WDTON = 0 – Watch Dog Timer – включен (программно выключить нельзя).
В большинстве случаев не нужен, можно отключить.

BODLEVEL и BODEN – контроль напряжения питания микроконтроллера (Brown-out Detector).
Если питание микроконтроллера опуститься к минимально допустимому или чуть ниже, то работа микроконтроллера будет нестабильной. Возможны ошибочные действия, потеря данных, случайное стирание EEPROM. Микроконтроллер умеет следить за уровнем своего питания (BODEN=0) и когда оно достигает уровня, который задается битами BODLEVEL, сбрасывается и держится в Reset'е, пока напряжение питания не поднимется до рабочего уровня. В некритических приложениях можно не использовать.

JTAGEN – разрешает интерфейс JTAG (внутрисхемный отладчик).
При активации некоторые линии микроконтроллера отдаются под интерфейс. Но зато можно подключать JTAG отладчик и с его помощью легко отладить любую программу прямо в схеме – удобно.
JTAGEN = 1 – запрещен JTAG;
JTAGEN = 0 – разрешен JTAG.
Если JTAG не используется, но остается включенным, то это может негативно повлиять на выполнение программы, т.к. комбинации битов на ножках МК, которые используются для JTAG, могут вызвать режим отладки...

DWEN – бит, разрешающий работу DebugWire
– еще одного отладочного интерфейса. DebugWire однопроводный отладочный интерфейс работающий через ножку сброса, поэтому «не отнимает» у микроконтроллера ножки портов ввода-вывода.
DWEN= 1 – запрещен DebugWire ;
DWEN= 0 – разрешен DebugWire .

AVR микроконтроллеры могут во время своей работы изменять содержимое области программ (программировать сам себя).
SELFPRGEN – бит, разрешающей программе производить запись в память программ.
SELFPRGEN = 1 – изменение области программ запрещено;
SELFPRGEN = 0 – разрешено изменение области программ.

EESAVE – защита EEPROM от стирания.
При подаче команды полного стирания микроконтроллера (обычно осуществляется при каждом программировании кристалла) стирается и EEPROM. Если Вы хотите чтобы EEPROM оставалось нетронутой – активируйте этот фьюз. Это актуально если в EEPROM хранятся важные данные.
EESAVE = 1 – стирать EEPROM вместе с Flash;
EESAVE = 0 – оставлять EEPROM при очистке нетронутым.

AVR микроконтроллеры могут иметь бутлоадер – это область в конце памяти, в которой можно разместить загрузчик, который предназначен для загрузки и запуска основной программы.
BOOTRST – как раз и заставляет микроконтроллер запускаться с области бутлоадера.
BOOTRST = 1 – микроконтроллер запускает программу с нулевого адреса;
BOOTRST = 0 – микроконтроллер запускает программу с бутлоадера.

BOOTSZ0..1 – задает размер бут сектора (области памяти программ для бутлоадера).

Если бутлоадер не используется, можно смело устанавливать BOOTRST = 1 и минимальное значение BOOTSZ0..1.

Lock Bits – отдельный фьюз байт который предназначен для защиты области программ и/или EEPROM от копирования.
Полное стирание восстанавливает Lock Bits в исходное состояние.

Отредактировано Nord (2019-05-30 23:53:42)

+5

2

Использование Lock Bits иногда становится серьезным "камнем"... ;)
Особенно, если их больше 2-х... ;)
Внесем некоторую (!) ясность...

В линейке МК ATmega48A-PA-88A-PA-168A-PA-328-P имеется аж шесть фьюзбитов:
BLB12    5    Boot Lock bit 1
BLB11    4    Boot Lock bit 1
BLB02    3    Boot Lock bit 1
BLB01    2    Boot Lock bit 1
LB2        1    Lock bit 1
LB1        0    Lock bit 1

Только в "прошивальщике" Bascom они нумеруются не от "0", как обычно, а от "1":
21 (LB1 и LB2), 43 и 65 соответственно BLBx2 BLBx1.

При прошивке задействованы следующие логические уровни:
«1» - фьюзбит неактивен (не запрограммирован)
«0» - фьюзбит активен (запрограммирован)
Этот принцип используется и во всех остальных фьюзбитах.

BLB02  BLB01   Boot Lock Bit0 Protection Modes (Application Section)
   1         1       - Никаких ограничений для SPM или LPM на доступ к разделу приложений.
   1         0       - SPM не разрешена запись в раздел «Приложения».
   0         0       - SPM не разрешено записывать в раздел «Приложение», а LPM,
                         выполняющемуся из раздела «Загрузчик», не разрешено читать из
                         раздела «Приложение». Если векторы прерываний размещены в разделе
                         «Загрузчик», прерывания отключаются при выполнении из раздела
                         «Приложение».
   0         1       - LPM, выполняющийся из раздела «Загрузчик», не может читать данные
                         из раздела «Приложение». Если векторы прерываний размещены в
                         разделе «Загрузчик», прерывания отключаются при выполнении из
                         раздела «Приложение».

BLB12  BLB11   Boot Lock Bit0 Protection Modes (Boot Loader Section)
   1         1       - Никаких ограничений для SPM или LPM на доступ к разделу загрузчика.
   1         0       - SPM не разрешена запись в раздел загрузчика.
   0         0       - SPM не разрешено выполнять запись в раздел «Загрузчик», а LPM,
                         выполняющемуся из раздела «Приложение», не разрешено читать из
                         раздела «Загрузчик». Если векторы прерываний размещены в разделе
                         «Приложение», прерывания отключаются при выполнении из раздела
                         «Загрузчик».
   0         1       - LPM, выполняющийся из раздела «Приложение», не может читать данные
                         из раздела «Загрузчик». Если векторы прерываний размещены в разделе
                         «Приложение», прерывания отключаются при выполнении из раздела
                         «Загрузчик».
Где SPM и LPM - Serial or Parallel Programming mode (Режим последовательного или параллельного программирования)

Чаще всего стоит вопрос о защите Flash и EEPROM от считывания.
За это отвечают фьюзбиты LB1 и LB2.
Их функции:
LB2   LB1
1      1      Функции блокировки памяти не включены.
1      0      Дальнейшее программирование Flash и EEPROM отключено в режиме
                параллельного и последовательного программирования.
                Биты блокируются как в последовательном, так и в параллельном
                режиме программирования. Чтение Flash и EEPROM при этом возможно.
0      0      Дальнейшее программирование и проверка Flash и EEPROM отключены
                в режиме параллельного и последовательного программирования.
                Биты блокировки загрузки и фьюзбиты блокируются как в
                последовательном, так и в параллельном режимах.

Последняя комбинация - "самая страшная" ;)

Установку данных фьюзбитов можно выполнить до момента "заливки" прошивки во Flash и данных в EEPROM, но это нужно сделать, не прерывая сеанса программирования.

Практически все программы для прошивки МК позволяют раздельно прошить FLASH, EEPROM и фьюзы, а так же имеется режим "Automatic programming" - прошивается всё вместе.
Последний режим требует особого внимания !

Как вариант - можно сначала "залить" нужные данные (FLASH и EEPROM), а потом выставить и прошить фьюзбиты.
Этот путь проще и позволит "залочить" нужный вариант прошивки.

Отредактировано Nord (2019-06-10 00:20:26)

+4


Вы здесь » Программирование ATMEL в BASCOM. » FAQ по Bascom AVR и МК » Установка FUSE-битов