Atmel AVR 8-bit: локбиты и фьюзбайты
Эта страница больше не ведётся, скопирована в d:\information\разработка электроники\datasheets\Atmel\my\
Эта запись — краткий конспект, а не полное руководство.
Сленг: Lock bits = локбиты = локи. Fuse bytes (bits) = фьюзбайты (биты) = фьюзы.
1 = unprogrammed = неустановленный = незаписанный = выключенный = отключенный = снятый = зелёный Off = флажок снят
0 = programmed = установленный = записанный = включенный = красный On = флажок стоит
Локи можно устанавливать. Единственный способ снять (причём все одновременно, то есть по умолчанию они все сняты) — команда chip erase. Нужны для секретности (чтобы нельзя было прочитать прошивку).
Фьюзы можно как устанавливать, так и снимать; по умолчанию они не все 1; команда chip erase не влияет. Нужны для всяких настроек, связанных с аппаратным обеспечением конечного устройства (например, тактовая частота), поэтому обновление прошивки, как правило, не требует их изменения.
Локбиты
Похоже, они одинаковы вообще для всех AVR 8-бит. Проверено для ATmega16A, ATmega32, ATmega1284P.
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) — только защита бутлоадера от самопереписывания
Фьюзбайты
Для ATmega16A и ATmega32.
Старший фьюзбайт:
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.