利用F206片内Flash进行在线编程

利用F206片内Flash进行在线编程,第1张

引言



图1

1 实现F206在线编程需要注意的几点

①进行硬件设计时,必须将F206的Vccp引脚直接接于+5V电源上。

②片内CPU的工作时钟不得高于20MHz。如果用倍频连接方式,则输入时钟频率不得高于10MHz,否则会使擦、写过程出现错误,从而导致“在线”擦、写失败。

③正常情况下F206的擦、写次数寿命是1000次。因此,对Flash块的“在线”编程应该做到一次擦除、多次写入,直到整个Flash存储块写满后再重新擦除,这样可以充分延长Flash存储器的使用寿命。

④不要将写Flash的程序和被写数据放在同一块Flash存储器上(后面说明)。由于F206的中断向量从0000H单元开始,所以第一块Flash存储器(Flash0)用于保存固化程序,另一块Flash存储器用于存放重要参数,进行“在线”编程。

2 Flash存储器的特点

存储器的 *** 作有读和写两种基本 *** 作,利用F206片内Flash进行在线编程,第2张各种类型存储器的读 *** 作都相同,而写 *** 作则各不相同。RAM型存储器的读/写 *** 作幸免通过址/数据总线和片选、读/写控制线来完成;EEPROM型存储器读 *** 作和RAM相同,写 *** 作由片内定时完成擦除和编程 *** 作,并有一个状态信号线来指示写 *** 作是否完成;PROM型存储器的写 *** 作则由特殊工具来完成,系统中只有读 *** 作;Flash型存储器的写 *** 作则由清“0”、置“1”和编程 *** 作构成。清“0”和置“1” *** 作按扇区(一块存储区),如F206的一块存储区的大小为32个字,Flash0的起始地址为0000H,Flash1的起始地址为40000H,每个Flash块包含512个扇区。

Flash存储器的写 *** 作由控制寄存器控制,状态寄存器反馈的信息指示 *** 作过程。Flash型存储器的写 *** 作既可以“在线”完成,也可以由特殊工具来完成。由此可见,对Flash型存储器的访问由两部分构成,一为Flash存储单元,二为Flash寄存器。访问存储单元和寄存器公用一组外部总线,究竟是访问存储单元还是访问寄存器则由工作模式决定。作在访问存储单元模式(只读)时,从数据总线上读到的是存储单元中的数据;工作在访问寄存器模式(读/写)时,从数据总线读到的是寄存器的状态信息。因此,如果将写Flash的程序和将写入数据放在同一块Flash上,则对Flash写 *** 作时需要切换工作模式,从而导致取指令时取到的是状态信息,Flash写 *** 作失败,所以不能将程序和数据放在同一块Flash存储器上。

3 F206进行Flash“在线”擦写的基本步骤

(1)模式切换

Flash的“在线”编程由清“0”、置“1”和数据写入等 *** 作组成。进行这些 *** 作前首先要将Flash由存储器工作模式(mode 1)切换至于寄存器工作模式(mode 0)。F206中Flash存储器工作模式由映射于I/O地址中的两个寄存器控制,分别为F_ACCESS0寄存器(FFE0h)和F_ACCESS1寄存器(FFE1h)。向Flash模式控制寄存器的最低位写入0,则Flash工作于寄存器模式;反之写入1,则工作于存储器模式。复位后,自动处于存储器模式。如图2所示,两种工作模式之间切换后,Flash内容变化。处于模式1时,Flash存储器显示的是其所存储的数据;处于模式0时,Flash存储器显示寄存器的内容,并且以4个为一组重复显示于整个Flash块中。

F206的Flash存储器块中只有4个寄存器SEG_CTR、TST、WADRS、WDATA,其余都是重复显示相同的内容,其功能如下所述。

*SEG_CTR:片段控制寄存器,其高8位(MSBS)用于选择相应片段。该位置“1”,则使能相应的片段,可以进行擦写。因此F206中16K×16的Flash块分为8个片段,每个片段2KB.低8位(LSBS)用来控制Flash块的擦除、写入、校验等 *** 作,如图3所示(各个控制位的具体设置方法请查阅TI相关参考资料)。

*TST:测试寄存器,通常不用。(保留,用于测试。)

*WADRS:写地址寄存器,用于存储写 *** 作地址。

*WDATA:写数据寄存器,用于存放写 *** 作数据。

(2)清“0” *** 作

清“0” *** 作按扇区进行,F206的Flash每一区的大小为32个字(WORD)。进行清“0” *** 作就是对Flash存储单元的非零位(即值为“1”)写入0,使各数据位的边缘保持一致;通常的做法是将Flash存储单元中的数据读出,与FFFFh进行异或(XOR)后,再写回Flash存储单元中。清“0” *** 作后,需调用VER0功能对Flash块进行0校验。

(3)置“1” *** 作

置“1” *** 作按扇区进行,对每个存储单元写入“1”;执行置“1” *** 作后需要调用VER1功能进行校验。置“1” *** 作后,Flash块存储单元的值均为FFFFh。如果置“1”正确,则可以进行下一步的数据写入数据。

图3 

    (4)数据写入

数据只能写入已经置“1”的存储单元,对于同Flash存储单元只能写一入一次;如要改变存储单元中的内容,必须重新进行清“0”和置“1”的 *** 作后才能写入新的数据。否则,会使存储单元中各个数据位的“边缘”不一致,从单元中读出的数据与写入的数据不一致。由于Flash擦除次数有限,因此不可能每次修改和定改数据时都进行擦除 *** 作,而应将每次修改后的参数(表)连续写在已置“1”但沿未写入数据的Flash存储单元中,并对参数(表)作起始和结束的标记(如55AA);程序调用参数(表)时可以很方便地找到最新修改的参数(表),当已置“1”的Flash存储单元已写完,再重新进行清“0”和置“1” *** 作后,从Flash块的起始位置(对F206的Flash1存储块为4000h)写入新的数据,这样可以充分延长F206片内Flash的使用。

结语

本文对TI公司的TMS320F206为例,介绍了DSP进行Flash“在线”编程的方法,具有较强的实用价值。笔者将该技术用于由F206构成的微机过流保护装置中,使得保护装置的现场校验、调试和动作值整定都非常方便。对于具有三个Flash块的TMS320FL2407系列,只要找出相应Flash块控制寄存器,也能用同样的方法进行“在线”编程。Flash进行“在线”编程的程序较为复杂,进行编程时需要加入一定的时间延时,编程时可参阅TI公司的例程,该例程可以从TI公司的网页www.ti.com下载。由于篇幅有限,此处不作详细介绍。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2420724.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-01
下一篇 2022-08-01

发表评论

登录后才能评论

评论列表(0条)

保存