提到熔丝位,你一定吓坏了。因为很多介绍AVR的书籍或网络媒体都会大谈熔丝位设置是如何的关键,以致错误的设置熔丝位会造成芯片锁死等。其实,AVR单片机的熔丝位设置非常简便,而且熔丝位的设置是可逆的,错误的设置只会导致芯片功能的暂时失效,并不会对芯片造成物理的损害。配合Atmel Studio 6.1集成开发环境,正确地设置熔丝位与打开一个普通的Word窗口更改字体的难度基本相当。以下,我们就来详细地介绍ATmega32单片机的熔丝位以及如何快速地完成对熔丝位的设置。
bit 7OCDEN:片上调试系统OCD(On-chip Debug)使能位。该位默认值为1(未编程),禁用OCD。当使用JTAG接口的仿真功能时,需编程该位。
bit 6JTAGEN:JTAG接口使能位。该位默认值为0(已编程),JTAG接口使能。当JTAGEN位没有被编程的情况下,TDI、TDO、TMS、TCK引脚为正常的I/O端口,TAP控制器处于复位状态,JTAG功能关闭。通常情况下请勿关闭JTAG接口,否则通过JTAG接口的仿真和下载功能会无法使用。
bit 5SPIEN:SPI功能使能位。该位默认值为0(已编程),SPI串行程序和数据下载功能被使能。使用ISP串行下载方式对单片机编程时,该位会强制开启且无法更改。在使用JTAG接口编程/仿真器修改此位时,要特别注意禁用该功能会使基于SPI的串行下载器对芯片编程失效。
bit 4CKOPT:振荡器选择位。该位默认值为1(未编程),禁用此功能。CKOPT位用于提高单片机片内振荡器的输出功率,加大对晶振/陶瓷谐振器的驱动能力。该位启用后可以拓展晶振/陶瓷谐振器的频率适用范围,推荐在常规状态下启用该功能,但功耗会相应提高。
bit 3EESAVE:芯片擦除时E2PROM内容保护位。该位默认值为1(未编程)。此功能一般不使用。
bit 2-1BOOTSZ1:0:BOOT区大小选择位。该位默认值为0(已编程)。此功能一般无需更改。
bit 0BOOTRST:复位向量选择位。该位默认值为1(未编程),复位后程序从FLASH的0x0000地址开始执行。该位为0时,复位后程序从BOOT区开始执行。此功能可以用于IAP升级,编程此位会使单片机不能正常启动,通常情况下无需更改,使用默认值即可。
2.熔丝位的低字节
bit 7BODLEVEL:BOD触发电平选择位。该位默认值为1(未编程),此时BOD掉电检测门限电压为2.7V,如果系统电压低于此值时CPU复位。当BODLEVEL位为0时,BOD掉电检测门限电压为4V。
bit 6BODEN:BOD功能使能位。该位默认值为1(未编程),掉电检测功能禁用。当BODEN位为0时,掉电检测功能被允许。
bit 5-4SUT1:0:复位时启动时间选择位。具体设置详见附录B。
bit 3-0CKSEL3:0:时钟源选择位。默认值为0001,即时钟源为片内RC振荡器,输出时钟频率为1MHz。时钟源可以根据硬件实际情况进行选择,具体设置详见表6-1。
熔丝位的功能和默认值详见表5-1。
5.1.2
熔丝位的设定
在Atmel Studio 6.1集成开发环境中提供了一种便捷的熔丝位设置方法,它将各种配置进行了组合,并且使用下拉菜单的方式供用户选择,这使熔丝位的设置变得清晰且直观。接下来我们就一起体验一下在Atmel Studio 6.1集成开发环境中如何对熔丝位进行设置。
首先,将AVRISP mkⅡ编程器连接至AVR系统板,并将编程器的USB接口连接到电脑上,打开Atmel Studio 6.1软件,单击任务栏上的“Device Programming”(编程按钮)按钮,如图5-1所示。
在图5-3所示的下拉菜单中会有四组数字,每一组数字都是启动区大小和引导区(BootLoader)起始地址。如“2048W_3800”表示启动区大小是2048字,引导区起始地址为$3800。通过此下拉菜单,我们可以按照软件的提示来轻松设置启动区的大小,而无需记忆熔丝位BOOTSZ1和BOOTSZ0的状态,这也是Atmel Studio 6.1集成开发环境设置熔丝位的方便之处。这里需要说明的是,对于启动区域大小我们仅选择默认设置即可。
不仅如此,Atmel Studio 6.1集成开发环境对BOD触发电平、时钟源及启动时间也提供了类似的菜单方式供用户选择,对BOD触发电平的设置如图5-4所示。
单击SUT_CKSEL选项后面的下三角按钮,打开时钟源和启动时间组合选择菜单,如图5-5所示。
在SUT_CKSEL组合选项中,可选取内部RC时钟、外部RC时钟、外部石英晶体/陶瓷振荡器等时钟源及相应的启动时间。由于我们的AVR系统板上使用的是16M晶体振荡器,所以此处需要选择外部高频晶体振荡器/陶瓷谐振器作为时钟源,启动时间任意,即选择:“EXTHIFXTALRES_258CK_4MS”项,当鼠标停留在该选项上时会有相应的提示信息,如:“Ext.Crystal/Resonator High Freq……”
锁定位可以通过并行、SPI或JTAG编程器/仿真器进行设定,但要想使设置生效,必须通过芯片擦除命令来实现,这也是保护数据安全所必需的步骤。锁定位的设置与熔丝位一样具有可逆性,可根据不同的需要多次编程,灵活改变。在Atmel Studio 6.1集成开发环境下配合AVRISP mkⅡ编程器对锁定位进行设置的方法如下:
正确连接JTAG ICE仿真器和小系统板,打开Atmel Studio 6.1软件,单击任务栏上的“Device Programming”按钮,弹出“Device Programming”窗口,在“Tool”项中选择“AVRISP mkⅡ”,在“Device”项中选择目标单片机型号为“ATmega32A”,单击“Apply”按钮,在刷新后的窗口左侧选择“LockBits”(锁定位)选项,如图5-8所示。
在图5-8所示的锁定位设置窗口中,列出了三种不同的保护类型,我们尝试着更改LB选项,单击LB右侧的下三角按钮,打开设置下拉列表,选择“PROG_VER_DISABLED”项,鼠标停留在该选项上时会有详细功能提示“Further programming and verification disabled”,意思是禁止编程和校验,具体如图5-9所示。