本说明以avr
单片机中atmega16的
熔丝位为例,说明
熔丝位如何正确设置。
1.编程与状态说明
(1)在avr的器件手册中,使用已编程(programmed)和未编程(unprogrammed)定义熔丝位的状态。未编程表示熔丝位状态为“1”(禁止);已编程表示熔丝位状态为“0”(允许)。
(2)avr的熔丝位可以多次编程,不是一次性的opt熔丝。
(3)熔丝位的配置可以通过并行方式、isp串行方式和jtag串行方式实现。
(4)avr芯片加密锁定后(lb2/lb1=1/0,0/0)不能通过任何方式读取芯片内部的flash和eeprom数据,但是熔丝位的状态仍然可以读取,只是不能修改配置。
(5)芯片擦除命令是将flash和eeprom中的数据清除,并同时将两位锁定位状态配置成无锁定的状态(lb2/lb1=1/1),但芯片擦除命令不改变其熔丝位的配置。
(6)下载编程的正确操作程序是:对芯片无锁定状态下,下载运行代码和数据,配置相关的熔丝位,最后配置芯片的加密锁定位。
(7)如果芯片被加密锁定后,发现熔丝位配置不对,则必须使用擦除命令,清楚芯片的数据,解除加密锁定,然后重新下载运行代码和数据,修改配置相关的熔丝位,最后再次配置芯片的加密锁定位。
2.芯片加密锁定熔丝位
加密锁定位 |
保护类型(用于芯片加密) |
加密锁定方式 |
lb2 |
lb1 |
1(出厂设置) |
1 |
1 |
无任何编程加密锁定保护 |
2 |
1 |
0 |
禁止串/并行方式的再编程 |
3 |
0 |
0 |
禁止串/并行方式的再编程和校验 |
3.功能熔丝位
熔丝位名称 |
说明 |
出厂设置 |
wdton |
看门狗有软件控制 |
看门狗始终工作,软件只能调节溢出时间 |
1 |
spien |
禁止isp串行编程 |
允许isp串行编程 |
0 |
jtagen |
禁止jtag口 |
允许jtag口 |
0 |
eesave |
芯片擦除时同时擦除eeprom数据 |
芯片擦除时不擦除eeprom数据 |
1 |
boden |
禁止低电压检测功能 |
允许低电压检测功能 |
1 |
bodlevel |
低电压检测门限电平为2.7v |
低电压检测门限电平为4.0v |
1 |
ocden |
禁止jtag口的在线调试功能 |
允许jtag口的在线调试功能 |
1 |
4.bootloader的熔丝位(1)上电启动地址选择
熔丝位名称 |
说明 |
出厂设置 |
bootrst |
芯片上电后从地址0x0000开始执行 |
上电后从boot区开始执行 |
1 |
(2)bootloader区大小设置
bootsz1 |
bootsz0 |
boot区大小/字 |
起始地址 |
出厂设置 |
0 |
0 |
1024 |
0x1c00 |
00 |
0 |
1 |
512 |
0x1e00 |
1 |
0 |
256 |
0x1f00 |
1 |
1 |
128 |
0x1f80 |
5.有关系统时钟源的选择熔丝位(1)系统时钟选择
系统时钟源 |
cksel[3:0] |
外接石英/陶瓷晶体 |
1111~1010 |
外接低频晶体(32.768khz) |
1001 |
外接rc振荡器 |
1000~0101 |
使用可校准的内部rc振荡器 |
0100~0001(出厂设置0001,1mhz) |
外部时钟 |
0 |
(2)使用外部晶体时的工作模式配置
熔丝位 |
工作频率范围/mhz
c1、c2容量/pf |
适用晶体 |
ckopt |
cksel[3:0] |
1 |
101 |
0.4~0.9 |
注释(1) |
陶瓷晶体 |
1 |
110 |
0.9~3.0 |
12~22 |
石英晶体 |
1 |
111 |
3.0~8.0 |
12~22 |
0 |
101~111 |
>=1.0 |
12~22 |
注释(1):对陶瓷晶体振荡所配的电容,请按照厂家说明使用;
注释(2):当ckopt=0时,振荡器的输出振幅较大,适用于干扰大的场合;反之,振荡器的输出振幅较小,可以降低功耗,对外电磁辐射也较小;
注释(3):ckopt默认状态为“1”。
熔丝位的解锁:avr单片机熔丝位如果操作失误,可能导致单片机假死,比如设定的晶振频率与实际晶振不匹配,一般来讲,由于晶振设置的错误可以通过更改实际的晶振或者使用有源晶振进行解锁,有源晶振按照工作电路接好以后,接入到单片机的外部时钟引脚,然后使用单片机isp设备打开熔丝位,更改单片机的时钟为内部1m或者其他内部时钟频率,就可以达到解锁的目的。