在嵌入式系统中,为了实现程序的脱机自动模压电感运行,程序往往固化在电可擦除的Flash存储器中。要实现一个嵌入式系统的带电脱机运行,在线编程就成为嵌入式系统开发过程的必经之路。由于在线编程涉及到硬件和软件方面的内容,因此要从顶层设计和系统的角度来考虑在线编程。硬件设计要为软件设计作铺垫,尽可能简化软件设计。
本文以TI公司的DSP芯片TMS320C6711D和AMD公司的塑封电感器4 Mb Flash存储器AM29LV400塑封电感B为例来介绍两种在线编程方式。
1 DSP与Flash存储器的两种硬件连接关系
1.1 以Ready信号作为硬件握手
带有Ready信号的TMS320C6711插件电感器D的EMIF(Exterhal Memory InteRFace)接口与Flash存储器AM29LV400B的硬件连接如图1所示。由于AM29LV-400B输出的就绪信功率电感号/忙信号()为OD(漏极开路)输出,需要在该信号上加上拉电阻并连接到VCC。
1.2 采用无Ready硬件连接的软件握手
不带Ready信号的TMS320C6711D与Flash存储器AM29LV400B的硬件连接如图2所示。
2 软件设计
2.1 带有硬件握手的软件设计
带有Ready信号连接的Flash存储器编程时序如图3所示。Flash的就绪信号/忙信号()输出为低电平时,表明Flash正忙,处于编程或擦除状态。由于DSP与Flash存储器采用Ready/Busy信号作为硬件握手信号,当Ready/Busy信号为低电平时,CPU在总线时序上插入等待周期,直到Ready/Busy信号解除(为高电平)。在Ready信号为低电平期间,由于CPU处于等待状态,程序被暂停执行,因此不需要通过软件来判断Flash存储器的编程或擦除状态。
Flash的就绪信号/忙信号()输出为低电平时,表明Flash正忙,处于编程或擦除状态,此时写入或读出的数据是无效的,不是程序员需要的数据;当该信号输出为高电平时,表明Flash已处于就绪状态,可对其进行写入或读出数据的操作。
由于DSP与Flash存储器的接口采用软件握手,在对Flash存储器进行编程或擦除时,DSP的总线周期中不会由硬件自动插入等待周期,如果此时仍采用2.1节的Flash编程函数对Flash存储器进行编程,则会得到错误的编程结果。编程结束后会发现Flash存储器中有一部分内容仍然是0xFFFF,处于编程前的状态。虽然对Flash存储器进行了编程操作,但由于Flash存储器上一次编程操作还未完成,本次的编程操作无效,数据根本写不进Flash存储器。在CCS3.1中用“View/Memery”功能查看Flash存储器,就会发现Flash存储器中的数据等间隔地出现编程正确和编程不正确的现象。笔者在自己设计的TMS320C6711D-250嵌入式模块(带有AM29LV400B Flash存储器)上,通过断开DSP与Flash存储器的硬件Ready信号进行编程测试,无等待状态的测试结果见表1,有等待状态的测试结果见表2。