历史上的今天
今天是:2025年06月06日(星期五)
2020年06月06日 | 马潮老师关于正确配置AVR熔丝位的建议
2020-06-06 来源:eefocus
对AVR熔丝位的配置是比较细致的工作,用户往往忽视其重要性,或感到不易掌握。下面给出对AVR熔丝位的配置操作时的一些要点和需要注意的相关事项。有关ATmega128熔丝位的具体定义和功能请查看本书相关章节,在附录中将给出一个完整的汇总表。
(1)在AVR的器件手册中,对熔丝位使用已编程(Programmed)和未编程(Unprogrammed)定义熔丝位的状态,“Unprogrammed”表示熔丝状态为“1”(禁止);“Programmed”表示熔丝状态为“0”(允许)。因此,配置熔丝位的过程实际上是“配置熔丝位成为未编程状态“1”或成为已编程状态“0””。
(2)在使用通过选择打钩“√”方式确定熔丝位状态值的编程工具软件时,请首先仔细阅读软件的使用说明,弄清楚“√”表示设置熔丝位状态为“0”还是为“1”。
(3)使用CVAVR中的编程下载程序时应特别注意,由于CVAVR编程下载界面初始打开时,大部分熔丝位的初始状态定义为“1”,因此不要使用其编程菜单选项中的“all”选项。此时的“all”选项会以熔丝位的初始状态定义来配置芯片的熔丝位,而实际上其往往并不是用户所需要的配置结果。如果要使用“all”选项,应先使用“read->fuse bits”读取芯片中熔丝位实际状态后,再使用“all” 选项。
(4)新的AVR芯片在使用前,应首先查看它熔丝位的配置情况,再根据实际需要,进行熔丝位的配置,并将各个熔丝位的状态记录备案。
(5)AVR芯片加密以后仅仅是不能读取芯片内部Flash和E2PROM中的数据,熔丝位的状态仍然可以读取但不能修改配置。芯片擦除命令是将Flash和E2PROM中的数据清除,并同时将两位锁定位状态配置成“11”,处于无锁定状态。但芯片擦除命令并不改变其它熔丝位的状态。
(6)正确的操作程序是:在芯片无锁定状态下,下载运行代码和数据,配置相关的熔丝位,最后配置芯片的锁定位。芯片被锁定后,如果发现熔丝位配置不对,必须使用芯片擦除命令,清除芯片中的数据,并解除锁定。然后重新下载运行代码和数据,修改配置相关的熔丝位,最后再次配置芯片的锁定位。
(7)使用ISP串行方式下载编程时,应配置SPIEN熔丝位为“0”。芯片出厂时SPIEN位的状态默认为“0”,表示允许ISP串行方式下载数据。只有该位处于编程状态“0”,才可以通过AVR的SPI口进行ISP下载,如果该位被配置为未编程“1”后,ISP串行方式下载数据立即被禁止,此时只能通过并行方式或JTAG编程方式才能将SPIEN的状态重新设置为“0”,开放ISP。通常情况下,应保持SPIEN的状态为“0”,允许ISP编程不会影响其引脚的I/O功能,只要在硬件电路设计时,注意ISP接口与其并接的器件进行必要的隔离,如使用串接电阻或断路跳线等。
(8)当你的系统中,不使用JTAG接口下载编程或实时在线仿真调试,且JTAG接口的引脚需要作为I/O口使用时,必须设置熔丝位JTAGEN的状态为“1”。芯片出厂时JTAGEN的状态默认为“0”,表示允许JTAG接口,JTAG的外部引脚不能作为I/O口使用。当JTAGEN的状态设置为“1”后,JTAG接口立即被禁止,此时只能通过并行方式或ISP编程方式才能将JTAG重新设置为“0”,开放JTAG。
(9)一般情况下不要设置熔丝位把RESET引脚定义成I/O使用(如设置ATmega8熔丝位RSTDISBL的状态为“0”),这样会造成ISP的下载编程无法进行,因为在进入ISP方式编程时前,需要将RESET引脚拉低,使芯片先进入复位状态。
(10)使用内部有RC振荡器的AVR芯片时,要特别注意熔丝位CKSEL的配置。一般情况下,芯片出厂时CKSEL位的状态默认为使用内部1MHz的RC振荡器作为系统的时钟源。如果你使用了外部振荡器作为系统的时钟源时,不要忘记首先正确配置CKSEL熔丝位,否则你整个系统的定时都会出现问题。而当在你的设计中没有使用外部振荡器(或某钟特定的振荡源)作为系统的时钟源时,千万不要误操作或错误的把CKSEL熔丝位配置成使用外部振荡器(或其它不同类型的振荡源)。一旦这种情况产生,使用ISP编程方式则无法对芯片操作了(因为ISP方式需要芯片的系统时钟工作并产生定时控制信号),芯片看上去“坏了”。此时只有使用取下芯片使用并行编程方式,或使用JTAG方式(如果JTAG为允许时且目标板上留有JTAG接口)来解救了。另一种解救的方式是:尝试在芯片的晶体引脚上临时人为的叠加上不同类型的振荡时钟信号,一旦ISP可以对芯片操作,立即将CKSEL配置成使用内部1MHz的RC振荡器作为系统的时钟源,然后再根据实际情况重新正确配置CKSEL。
(11)使用支持IAP的AVR芯片时,如果你不使用BOOTLOADER功能,注意不要把熔丝位BOOTRST设置为“0”状态,它会使芯片在上电时不是从Flash的0x0000处开始执行程序。芯片出厂时BOOTRST位的状态默认为“1”。关于BOOTRST的配置以及BOOTLOADER程序的设计与IAP的应用请参考本章相关内容。
二、mega8熔丝位:1:未编程(不选中)0:编程(选中)
***************************************
熔丝位 说明 缺省设置
***************************************
RSTDISBL: 复位或I/O功能选择 1 1:复位功能;0:I/O功能(PC6)
WDTON: 看门狗开关 1 1:看门狗打开(通过WDTCR允许);0:看门狗禁止
SPIEN: SPI下载允许 0 1:SPI下载禁止;0:SPI下载允许(注:当使用SPI编程时,该项不可用)
EEAVE: 烧录时EEPROM数据保留 1 1:不保留;0:保留
BODEN: BOD功能控制 1 1:BOD功能禁止;0:BOD功能允许
BODLEVEL: BOD电平选择 1 1:2.7V电平;0:4.0V电平
BOOTRST: 复位入口选择 1 1:程序从0x0000地址开始执行;0:程序从引导区确定的入口地址开始执行
***************************************
BOOTSZ1/0: 引导程序大小及入口 00
00:1024Word/0xc00;
01:512Word/0xe00;
10:256Word/0xf00;
11:128Word/0xf80
***************************************
BLB02/01: 程序区指令位选择 11
11:SPM和LPM指令都允许执行
10:SPM指令禁止写程序区
01:引导区LPM指令禁止读取程序区内容;如果中断向量定义在引导区,则禁止该中断在程序区执行。
00:SPM指令禁止写程序区;引导区LPM指令禁止读取程序区内容;如果中断向量定义在引导区,则禁止该中断在程序区执行。
***************************************
BLB12/11: 引导区指令位选择 11
11:SPM和LPM指令都允许执行
10:SPM指令禁止写引导区
01:程序区LPM指令禁止读取引导区内容;如果中断向量定义在程序区,则禁止该中断在引导区执行。
00:SPM指令禁止写引导区;程序区LPM指令禁止读取引导区内容;如果中断向量定义在程序区,则禁止该中断在引导区执行。
***************************************
LB2/1: 程序区加密位选择 11
11:未加密
10:程序和EEPROM编程功能禁止,熔丝位锁定
00:程序和EEPROM编程及校验功能禁止,熔丝位锁定
(注:先编程其他熔丝位,再编程加密位)
***************************************
CKSEL3/0: 时钟源选择 0001
CKOPT: 晶振选择 1
SUT1/0: 复位启动时间选择 10
***************************************
CKSEL3/0=0000:外部时钟,CKOPT=0:允许芯片内部XTAL1管脚对GND接一个36PF电容;CKOPT=1:禁止该电容
----------------
CKSEL3/0=0001-0100:已经校准的内部RC振荡,CKOPT总为1
0001:1.0M
0010:2.0M
0011:4.0M
0100:8.0M
----------------
CKSEL3/0=0101-1000:外部RC振荡,CKOPT=0:允许芯片内部XTAL1管脚对GND接一个36PF电容;CKOPT=1:禁止该电容
0101:<0.9M
0110:0.9-3.0M
0111:3.0-8.0M
1000:8.0-12.0M
----------------
CKSEL3/0=1001:外部低频晶振,CKOPT=0:允许芯片内部XTAL1/XTAL2管脚对GND各接一个36PF电容;CKOPT=1:禁止该电容
----------------
CKSEL3/0=1010-1111:外部晶振,陶瓷振荡子,CKOPT=0:高幅度振荡输出;CKOPT=1:低幅度振荡输出
101X:0.4-0.9M
110X:0.9-3.0M
111X:3.0-8.0M
***************************************
SUT1/0: 复位启动时间选择
当选择不同晶振时,SUT有所不同。
三、时钟选择一览表
时钟源 启动延时 熔丝
外部时钟 6 CK + 0 ms CKSEL=0000 SUT=00
外部时钟 6 CK + 4.1 ms CKSEL=0000 SUT=01
外部时钟 6 CK + 65 ms CKSEL=0000 SUT=10
内部RC振荡1MHZ 6 CK + 0 ms CKSEL=0001 SUT=00
内部RC振荡1MHZ 6 CK + 4.1 ms CKSEL=0001 SUT=01
内部RC振荡1MHZ 6 CK + 65 ms CKSEL=0001 SUT=10
内部RC振荡2MHZ 6 CK + 0 ms CKSEL=0010 SUT=00
内部RC振荡2MHZ 6 CK + 4.1 ms CKSEL=0010 SUT=01
内部RC振荡2MHZ 6 CK + 65 ms CKSEL=0010 SUT=10
内部RC振荡4MHZ 6 CK + 0 ms CKSEL=0011 SUT=00
内部RC振荡4MHZ 6 CK + 4.1 ms CKSEL=0011 SUT=01
内部RC振荡4MHZ 6 CK + 65 ms CKSEL=0011 SUT=10
内部RC振荡8MHZ 6 CK + 0 ms CKSEL=0100 SUT=00
内部RC振荡8MHZ 6 CK + 4.1 ms CKSEL=0100 SUT=01
内部RC振荡8MHZ 6 CK + 65 ms CKSEL=0100 SUT=10
外部RC振荡≤0.9MHZ 18 CK + 0 ms CKSEL=0101 SUT=00
外部RC振荡≤0.9MHZ 18 CK + 4.1 ms CKSEL=0101 SUT=01
外部RC振荡≤0.9MHZ 18 CK + 65 ms CKSEL=0101 SUT=10
外部RC振荡≤0.9MHZ 6 CK + 4.1 ms CKSEL=0101 SUT=11
外部RC振荡0.9-3.0MHZ 18 CK + 0 ms CKSEL=0110 SUT=00
外部RC振荡0.9-3.0MHZ 18 CK + 4.1 ms CKSEL=0110 SUT=01
外部RC振荡0.9-3.0MHZ 18 CK + 65 ms CKSEL=0110 SUT=10
外部RC振荡0.9-3.0MHZ 6 CK + 4.1 ms CKSEL=0110 SUT=11
外部RC振荡3.0-8.0MHZ 18 CK + 0 ms CKSEL=0111 SUT=00
外部RC振荡3.0-8.0MHZ 18 CK + 4.1 ms CKSEL=0111 SUT=01
外部RC振荡3.0-8.0MHZ 18 CK + 65 ms CKSEL=0111 SUT=10
外部RC振荡3.0-8.0MHZ 6 CK + 4.1 ms CKSEL=0111 SUT=11
外部RC振荡8.0-12.0MHZ 18 CK + 0 ms CKSEL=1000 SUT=00
外部RC振荡8.0-12.0MHZ 18 CK + 4.1 ms CKSEL=1000 SUT=01
外部RC振荡8.0-12.0MHZ 18 CK + 65 ms CKSEL=1000 SUT=10
外部RC振荡8.0-12.0MHZ 6 CK + 4.1 ms CKSEL=1000 SUT=11
低频晶振(32.768KHZ) 1K CK + 4.1 ms CKSEL=1001 SUT=00
低频晶振(32.768KHZ) 1K CK + 65 ms CKSEL=1001 SUT=01
低频晶振(32.768KHZ) 32K CK + 65 ms CKSEL=1001 SUT=10
低频石英/陶瓷振荡器(0.4-0.9M) 258 CK + 4.1 ms CKSEL=1010 SUT=00
低石英/陶瓷振荡器(0.4-0.9M) 258 CK + 65 ms CKSEL=1010 SUT=01
低石英/陶瓷振荡器(0.4-0.9M) 1K CK + 0 ms CKSEL=1010 SUT=10
低石英/陶瓷振荡器(0.4-0.9M) 1K CK + 4.1 ms CKSEL=1010 SUT=11
低石英/陶瓷振荡器(0.4-0.9M) 1K CK + 65 ms CKSEL=1011 SUT=00
低石英/陶瓷振荡器(0.4-0.9M) 16K CK + 0 ms CKSEL=1011 SUT=01
低石英/陶瓷振荡器(0.4-0.9M) 16K CK + 4.1ms CKSEL=1011 SUT=10
低石英/陶瓷振荡器(0.4-0.9M) 16K CK + 65ms CKSEL=1011 SUT=11
中石英/陶瓷振荡器(0.9-3.0M) 258 CK + 4.1 ms CKSEL=1100 SUT=00
中石英/陶瓷振荡器(0.9-3.0M) 258 CK + 65 ms CKSEL=1100 SUT=01
中石英/陶瓷振荡器(0.9-3.0M) 1K CK + 0 ms CKSEL=1100 SUT=10
中石英/陶瓷振荡器(0.9-3.0M) 1K CK + 4.1 ms CKSEL=1100 SUT=11
中石英/陶瓷振荡器(0.9-3.0M) 1K CK + 65 ms CKSEL=1101 SUT=00
中石英/陶瓷振荡器(0.9-3.0M) 16K CK + 0 ms CKSEL=1101 SUT=01
中石英/陶瓷振荡器(0.9-3.0M) 16K CK + 4.1ms CKSEL=1101 SUT=10
中石英/陶瓷振荡器(0.9-3.0M) 16K CK + 65ms CKSEL=1101 SUT=11
高石英/陶瓷振荡器(3.0-8.0M) 258 CK + 4.1 ms CKSEL=1110 SUT=00
高石英/陶瓷振荡器(3.0-8.0M) 258 CK + 65 ms CKSEL=1110 SUT=01
高石英/陶瓷振荡器(3.0-8.0M) 1K CK + 0 ms CKSEL=1110 SUT=10
高石英/陶瓷振荡器(3.0-8.0M) 1K CK + 4.1 ms CKSEL=1110 SUT=11
高石英/陶瓷振荡器(3.0-8.0M) 1K CK + 65 ms CKSEL=1111 SUT=00
高石英/陶瓷振荡器(3.0-8.0M) 16K CK + 0 ms CKSEL=1111 SUT=01
高石英/陶瓷振荡器(3.0-8.0M) 16K CK + 4.1ms CKSEL=1111 SUT=10
高石英/陶瓷振荡器(3.0-8.0M) 16K CK + 65ms CKSEL=1111 SUT=11
注:1、出厂默认设置
注意:CKOPT=1(未编程)时,最大工作频率为8MHZ
内部RC振荡1MHZ 6 CK + 4.1 ms CKSEL=0001 SUT=01
下一篇:AVR下载烧写的复杂熔丝设置尿性
史海拾趣
|
哪位大哥有关于MCS-51单片机定时计数技术应用方面的资料?小弟急需!!!有的话发到我的邮箱:passionatewave@126.com在这儿先谢了!!!… 查看全部问答> |
|
最近搞系统模型的辨识,但是测试仪器的输入模拟量,而编码器是数字编码器,输出的频率变化的脉冲,不知有没有人搞过编码器信号转换的,给指点一下!小弟在此不胜感激啊!… 查看全部问答> |
|
用驱动程序中DebugPrint/KdPrint写的调试信息,在DebugView中无显示出调试信息 我在写一个PCI驱动,芯片用的PCI9052,整个代码各个函数都有输出信息,我做得是驱动开发板的流水灯实验程序,主要在DispatchIoControl部分,但用DebugPrint/KdPrint写的调试信息,在DebugView中无显示出调试信息,总是显示UNLOCKING...,大家谁遇到 ...… 查看全部问答> |
|
转发: step into and step over do same thing in AG_GoStep in apntex_173 i am writing a AGDI Driver for the uVision Debugger base on apntex_173. my chip is using Cortex-M0, many functions (r/w registers, r/w memory, start/stop debug session, run, run to cursor line, step out of current function, break ...… 查看全部问答> |
|
vxwork想用PC机做目标机CPUInter酷睿双核可以吗? 在制作Build rom时 应该选择哪个BSP,我tornado 2.2 中有 pentium,pentium1,pentium2,pentium3,pentium4,pentium_mp 我选择的是pentium_mp,并且在config.h中 打开了 **_PC_CONSOLE的选项 … 查看全部问答> |
|
PC系统为XP,所用工具是EVC3.0 PDA为操作系统为WINCE,PPC2002,所用连接软件是ActiveSync,编译一个没有错误的程序时,在PDA上显示 Application CEMGRC.EXE has performed an illegal operation and will be shut down .If the problem persists, ...… 查看全部问答> |
|
这两天遇到客户提出的一个问题,讲的是STM8S的时钟自动切换出现问题,始终无法切换到外部时钟源(HSE),但切换HSI、LSI均正常。 偶一听还有这种事?客户用来测试的硬件 ...… 查看全部问答> |
|
1. 我的USART3的程序是借用USART1的. USART1是能接收中断; 2. USART3查询发送和接收都是OK的, 证明USART3的时钟和初始化设置是没有问题的. 3. 我的USART3初始化设置: void USART3_Configuration(void) { /* USART3 configuration ------- ...… 查看全部问答> |
|
我用的学习板是EK-LM3S811,用的开发环境是IAR FOR ARM 6.30。我硬件仿真的时候程序下不进去,我用LM flash programmer把flash都擦掉,然后用IAR仿真,memory里都是FF。请问高手option里怎么设置啊?我把工程文件传上来了,请高手不吝赐教。… 查看全部问答> |




