熔丝是一个保护知识产权的设计。简单的说,你在特定的引脚上加电压,足够的电流,就可以烧断里边的这根熔丝,烧断以后,片里的程序就不可以被读出来也不能改写了,只能用来运行。一般成品出售时都这样做。专用的写片机支持这个功能。自己也可以根据芯片的官方文档来操作。熔丝位是在一个特定的地址上可以读到熔丝状态的一个位。0表示已熔断,1表示未熔断。
英文-中文对照
On-Chip Debug Enabled 片内 调试 使能
JTAG Interface Enabled JTAG 接口 使能
Serial program downloading (SPI) enabled 串行编程下载(SPI) 使能 (ISP下载时该位不能修改)
Preserve EEPROM memory through the Chip Erase cycle; 芯片擦除时EEPROM的内容保留
Boot Flash section size=xxxx words 引导(Boot)区大小为xxx个词
Boot start address=$yyyy; 引导(Boot)区开始地址为 $yyyy
Boot Reset vector Enabled 引导(Boot)、复位 向量 使能
Brown-out detection level at VCC=xxxx V; 掉电检测的电平为 VCC=xxxx 伏
Brown-out detection enabled; 掉电检测使能
Start-up time: xxx CK + yy ms 启动时间 xxx 个时钟周期 + yy 毫秒
Ext. Clock; 外部时钟
Int. RC Osc. 内部 RC(阻容) 振荡器
Ext. RC Osc. 外部 RC(阻容) 振荡器
Ext. Low-Freq. Crystal; 外部 低频 晶体
Ext. Crystal/Resonator Low Freq 外部晶体/陶瓷振荡器 低频
Ext. Crystal/Resonator Medium Freq 外部晶体/陶瓷振荡器 中频
Ext. Crystal/Resonator High Freq 外部晶体/陶瓷振荡器 高频
好多人都存在烧新硬件的问题,本文以arduino UNO的atmega328P为例,
如果您有ISP程序员或正在使用另一个Arduino作为ISP程序员,则使用avrdude命令。 将编程器连接到ATmega16U2的ICSP接头并上传固件。 该命令冗长乏味,我需要在某处记录命令,并将其复制并粘贴到命令行。 它太长了,我通常把它分成不同的行。 它是这样的:
通过短接ATmega16U2的ICSP接头上的引脚5和6来复位芯片,激活ATmega16U2芯片上的DFU引导加载程序后,Mac或Linux上的dfu-programmer命令用于使用USB电缆上传固件。
由于所有AVR指令都是16或32位宽,因此Flash的结构为16K x 16.对于软件安全性,
闪存程序存储空间分为两部分,引导程序部分和应用程序
部分。
引导程序部分的操作和
用于软件保护的相关引导锁定位在“存储器编程”中有详细描述
第353页的“存储器编程”包含有关Flash数据串行的详细说明
使用SPI引脚或JTAG接口下载。
其中bootsz两项为熔丝位大小配置,根据你的bootloader大小配置。
11 128B
10 256B
01 512B
00 1K
据说UNO的bootloader只有512字节不到,那把BOOTSZ置01即可。
如果出现无法编程的情况,也许是两种可能:芯片已经被锁(新的不会);硬件焊接有问题(DIY经常出现的问题)。
PS:没打算学avr单片机的人,就别去深究每个熔丝位的作用了,arduino本来就是为了省去这些麻烦的过程,跑去深究就本末倒置了。
想弄得更清楚的孩子,那注意了,在此我重点说几个熔丝位:
CKSEL这几个熔丝位为晶振配置,很多人遇到芯片被锁的情况都是因为这个熔丝位配置出错;一般arduino都使用16M晶振,所以全部置1即可。(如何解锁?下次有时间我再写~~~)
CKOPT置0为开启全幅震荡,当你晶振大于8M时,就要开启。
SPIEN,spi使能,这是唯一一个千万不能置1的熔丝位,如果关了,那USBASP就无法使用了,这时只能通过并行编程或者JTAG来修改熔丝位了(mega8没JTAG...)
BOOTSZ,是对BOOT区大小进行配置的熔丝,根据相应bootloader大小配置。
BOOTRST,是对复位向量的配置,置0时复位向量指向BOOT起始位置,置1时指向APP区起始位置。很多人烧了bootloader后,不能下载或者只能下载一次,大多是因为BOOTRST没有置0。(想搞懂什么是BOOT区?APP区?这些个XX区怎么分配?那去图书管找本AVR的书认真学习吧,数据手册上面也有,但非专业人士还是很难看懂)
RSTDISBL,为硬复位功能使能端,如果置0,可以将reset端做数字IO使用,但在arduino上可能经常用到复位按键,所以这里置1。
WTDON为看门狗设置,置0后将打开看门狗,如不进行喂狗操作,将无限复位。一般我们的非工业制作都不使用看门狗功能,所以这里置1即可。