基于单片机的Flash在系统编程方法
时间:09-02
来源:互联网
点击:
编程过程
第一步,对整个Flash进行一遍擦除,因此Flash在编程时只能把“1”置为“0”,而不能“0”置为“1”。
第二步,判断擦除结束。通过DQ6、DQ7均可完成判断,当DQ6位不再跳变时说明擦除结束。这里通过读取最后一位数据是否为“0xFF”来完成判断。
第三步,进行软件复位。软件复位使Flash处于就绪状态,当Flash在进行擦除,编程时软件复位信号无效。
第四步,取得编程地址。如果地址超过最大地址则编程结束。
注意事项
对于不同的DSP,不同的Flash,在实现时可能不一样,这里有几个问题必须注意:
(1)文件1和文件2的.cmd文件要分配好各自的地址,地址空间不能重叠。
(2)不是每个DSP都可以实现在系统编程,如TMS320C6204就不行,而C621x,C64x等就可以。原因在于Flash在编程时速度较慢,一般为μs级,所以需要WE#信号的有效时间较长。但是,一般的WE#有效时间都只有几十ns,这么短的时间不足以让DSP把内容写进Flash。C64x等之所以能实现在系统编程,是因为在编程时DSP自动延长了编程的有效时间。
(3)如果用户程序不含加载器程序,那么用户程序的目的地址就不能从Flash的前1K的地址开始。
(4)不同型号Flash的编程时序和指令可能会有所不同,编程之前要弄清该Flash的编程时序和指令。如果Flash要求有偏移地址,就需要加上基地址。
(5)对于程序的未初始化段不必烧入Flash,可以参考.map文件,里面对于各段有详细说明。
结语
利用上面的方法,本文在TMS320DM642平台中通过JTAG仿真头,成功地实现了在系统编程,为程序的调试提供了一种非常方便的手段,也为用户程序的升级提供了一种简单异行的方法,同时这个方法也在C6211环境下成功实现,其他DSP同样可参考本方法。
第一步,对整个Flash进行一遍擦除,因此Flash在编程时只能把“1”置为“0”,而不能“0”置为“1”。
第二步,判断擦除结束。通过DQ6、DQ7均可完成判断,当DQ6位不再跳变时说明擦除结束。这里通过读取最后一位数据是否为“0xFF”来完成判断。
第三步,进行软件复位。软件复位使Flash处于就绪状态,当Flash在进行擦除,编程时软件复位信号无效。
第四步,取得编程地址。如果地址超过最大地址则编程结束。
注意事项
对于不同的DSP,不同的Flash,在实现时可能不一样,这里有几个问题必须注意:
(1)文件1和文件2的.cmd文件要分配好各自的地址,地址空间不能重叠。
(2)不是每个DSP都可以实现在系统编程,如TMS320C6204就不行,而C621x,C64x等就可以。原因在于Flash在编程时速度较慢,一般为μs级,所以需要WE#信号的有效时间较长。但是,一般的WE#有效时间都只有几十ns,这么短的时间不足以让DSP把内容写进Flash。C64x等之所以能实现在系统编程,是因为在编程时DSP自动延长了编程的有效时间。
(3)如果用户程序不含加载器程序,那么用户程序的目的地址就不能从Flash的前1K的地址开始。
(4)不同型号Flash的编程时序和指令可能会有所不同,编程之前要弄清该Flash的编程时序和指令。如果Flash要求有偏移地址,就需要加上基地址。
(5)对于程序的未初始化段不必烧入Flash,可以参考.map文件,里面对于各段有详细说明。
结语
利用上面的方法,本文在TMS320DM642平台中通过JTAG仿真头,成功地实现了在系统编程,为程序的调试提供了一种非常方便的手段,也为用户程序的升级提供了一种简单异行的方法,同时这个方法也在C6211环境下成功实现,其他DSP同样可参考本方法。
- 嵌入式系统的定义与发展历史(11-15)
- 嵌入式系统亲密接触(11-22)
- 嵌入式系统设计中的USB OTG方案(02-01)
- 嵌入式线控驾驶系统开发过程中设计和测试考虑(02-02)
- 一个典型的嵌入式系统设计和实现 (02-02)
- DDR SDRAM在嵌入式系统中的应用(02-07)