Atmel AVR 8-bit: локбиты и фьюзбайты

Эта запись — краткий конспект, а не полное руководство.

Сленг: Lock bits = локбиты = локи. Fuse bytes (bits) = фьюзбайты (биты) = фьюзы.

1 = unprogrammed = неустановленный = незаписанный = выключенный = отключенный = снятый = зелёный Off = флажок снят
0 = programmed = установленный = записанный = включенный = красный On = флажок стоит

Локи можно устанавливать. Единственный способ снять (причём все одновременно, то есть по умолчанию они все сняты) — команда chip erase. Нужны для секретности (чтобы нельзя было прочитать прошивку).

Фьюзы можно как устанавливать, так и снимать; по умолчанию они не все 1; команда chip erase не влияет. Нужны для всяких настроек, связанных с аппаратным обеспечением конечного устройства (например, тактовая частота), поэтому обновление прошивки, как правило, не требует их изменения.

Для ATmega16A и ATmega32

Локбайт:

7
6
5 BLB12
4 BLB11
3 BLB02
2 BLB01
1 LB2
0 LB1

BLB — Boot Lock bits, влияют, в частности, на возможность самомодификации кода бутлоадером. LB — Lock bits, влияют на возможность программирования программатором.

Если без тонкостей, то получается так:
Boot Lock Bit0 Protection Modes (Application Section):
11 = бутлоадер может писать и читать Application Section
10 = бутлоадер может только читать Application Section

Boot Lock Bit1 Protection Modes (Boot Loader Section):
11 = бутлоадер может писать и читать Boot Loader Section
10 = бутлоадер может только читать Boot Loader Section

LB:
11 = ограничений нет
10 = программатор может только читать flash, eeprom, fuse
00 = программатор не может даже читать flash, eeprom, fuse

Итого:
0xff = никакой защиты
BLB11 = 0 (0xef) — только защита бутлоадера от самопереписывания

Старший фьюзбайт:

7 OCDEN Enable OCD
6 JTAGEN Enable JTAG
5 SPIEN Enable SPI Serial Program and Data Downloading
4 CKOPT Oscillator options
3 EESAVE EEPROM memory is preserved through the Chip Erase
2 BOOTSZ1 Select Boot Size
1 BOOTSZ0 Select Boot Size
0 BOOTRST Select reset vector

Младший фьюзбайт:

7 BODLEVEL Brown-out Detector trigger level
6 BODEN Brown-out Detector enable
5 SUT1 Select start-up time
4 SUT0 Select start-up time
3 CKSEL3 Select Clock source
2 CKSEL2 Select Clock source
1 CKSEL1 Select Clock source
0 CKSEL0 Select Clock source

Биты программаторов и отладчиков:
OCDEN — включить On-chip Debug. У меня отладчика нет, так что оставлю 1.
JTAGEN — аналогично для JTAG. У меня JTAG нет, а лишаться части ножек не хочу, так что переключу на 1.
SPIEN — аналогично для последовательного программатора. Имеется защита от дурака: при использовании последовательного программатора выключить этот бит невозможно.

Биты частоты и включения:
CKOPT, SUT, CKSEL — из значения зависят друг от друга, так что просто читайте раздел System Clock and Clock Options.

EESAVE — не стирать EEPROM командой Chip Erase.

Для бутлоадера:
BOOTRST — с какого адреса начинать исполнение программы после сброса. Обычно, если бутлоадера нет, то с нулевого (бит снят), если есть, то в соответствии с битами BOOTSZ (бит установлен). Они определяют длину бутлоадера с конца адресного пространства. В словах:

ATmega16A ATmega32
11 128 256
10 256 512
01 512 1024
00 1024 2048

Сброс при просадке напряжения:
BODEN — если включить, то низкое напряжение питания приведёт к сбросу. Полезно при использовании бутлоадера, чтобы избежать ошибок записи. Но увеличивает энергопотребление во всех режимах.
BODLEVEL — уровень срабатывания Brown-out Detector (если BODEN установлен): 1 = 4 В (для нормального напряжения 5 В), 0 = 2,7 В (для нормального напряжения 3,3 В).

The default (10011001, 11100001) clock source setting is therefore the 1 MHz Internal RC Oscillator with longest startup time.

Поделиться
Отправить
7 июня  
Ваш комментарий
адрес не будет опубликован

ХТМЛ не работает

Ctrl + Enter
Популярное