Atmega 128下载与熔丝位
一、简介
1.1 内核介绍
AVR单片机指令总线长度时16位,取操作数的数据总线长度位8位。
Atmega 128 共53个IO,复位之后IO时高阻态。
Flash中有自引导加载程序,可用于启动装载功能实现自我编程,
ATmega 128的堆栈指针指向的地址必须高于0x60。
1.2 boot锁定位
boot锁定位可以通过软件、串行编程、并行编程的方式进行设置。实际上boot锁定位属于Lockbit,具体如下:
一般Lockbit位全为1时,不用担心程序无法下载。
1.3 熔丝位
熔丝位本身是写“1”禁止,写“0”使能。
M103C:0代表以ATmega103兼容模式工作。
器件进入编程模式时熔丝位的值被锁存。其间熔丝位的改变不会生效,直到器件退出编程模式。不过这不适用于 EESAVE 熔丝位。它一旦被编程立即起作用。在正常工作模式中器件上电时熔丝位也被锁存。
注意事项:不要加密芯片,否则需要先全片擦除并解除锁定才能编程熔丝位。
1.4 程序下载的方式
-
JTAG ICE
使用JTAG编程,需要熔丝位JTAGEN使能,同时MCUCSR寄存器的JTD位清零。如果JTD被置1,则可以将外部RESET强制拉低,经过两个时钟周期后,JTD会自动清零。 -
串行编程
-
并行编程
-
bootloader
1.4.1 并行编程
除非另行说明,脉冲宽度至少250ns,周期至少500ns,频率最大2MHz
并行编程的功能如下所示:
- 芯片擦除
- 读写flash
- 读写EEPROM
- 读写熔丝位
- 读写标定字节
- 读标识字节
1.4.1.1 硬件连接
其中命令引脚如下:
1.4.1.2 进入并行编程模式
编程之前,首先要保证芯片进入编程模式,步骤如下:
- 在 VCC 及 GND 之间提供 4.5 - 5.5V 的电压,并至少等待 100 µs。
- 将 RESET 拉低,并至少改变 XTAL1 电平 6 次。
- Prog_enable 引脚置为 “0000”,并等待至少 100ns。
- 给 RESET提供 11.5 - 12.5V的电压。在向 RESET提供 +12V电压后的 100 ns 内,Prog_enable 引脚的任何行为都会导致芯片无法进入编程模式。
- 发送命令前等待至少50ns
注意事项:如果芯片使用内部时钟,此时必须使晶振断开,才能保证XTAL1输入合格的脉冲信号。
1.4.1.3 编程熔丝位
所有情况下,Reset拉高到12V,OE拉高,PAGEL拉低。并且按照由低到高的顺序进行编程熔丝位
低8位编程
置 BS1 为 “0”, BS2 为 “0”。
- A:第一个周期内,XA1置1,XA0清零。DATA加载命令 “0100 0000”。
- C:第二格周期内,XA1和XA0清零。加载数据低字节,若某一位为 "0” 表示需要进行编程,否则需要擦除。
- 第二个周期结束后,时钟停止,给 WR 提供一个负脉冲,并等待 RDY/BSY 变高。
高8位编程
- A:第一个周期内,XA1置1,XA0清零。加载命令 “0100 0000”。
- C:第二格周期内,XA1和XA0清零。加载数据高字节,若某一位为 "0” 表示需要进行编程,否则需要擦除。
- 第二个周期结束后,时钟停止,将 BS1 置 "1”、 BS2 置 "0”,选择高位数据字节。给 WR 提供一个负脉冲并等待 RDY/BSY 变高。
- 将 BS1 置 "0”。
扩展位编程
- A:第一个周期内,XA1置1,XA0清零。加载命令 “0100 0000”。
- C:第二格周期内,XA1和XA0清零。加载数据低字节。若某一位为 "0” 表示需要进行编程,否则需要擦除。
- 第二个周期结束后,时钟停止,将 BS1 置 "0”、 BS2 置 "1”,选择扩展数据字节。给 WR 提供一个负脉冲并等待 RDY/BSY 变高。
- 将 BS2 置 "0”。
二、目前存在的问题
- 程序无法下载
- STK500并行下载工具:修改不了国内SPIEN位;编程国外Flash总是失败;(不能写国外Flash,可能跟PCB有关)
- JTAG ICE能擦除Flash,能读取Flash,不能写Flash和熔丝位;(能正常读写国外芯片Flash)
- SPI
- FPGA实现并行编程
开发资源
www.avrfreaks.net
www.sl.com.cn