1 问题描述
在CPU处理器无自带FLASH空间的情况下,我们选用市场上专用的FLASH芯片,通过硬件设计该FLASH芯片的每一个地址空间都是可以访问的,我们可以指定不同的区域存放不同的内容。FLASH芯片的自测试也有很多种方法,目前较普遍采用的是校验和的方法,即由专门的烧写工具(可以使用软件完成该工具)在烧写的过程中将校验和计算好直接放到指定的单元中,这个单元可以指定到烧程序时写不到的空闲空间,自测试时只需重新计算一遍校验和与该值进行比较即可。此种方法我们称之为方法一。
而TMSF240内部自带FLASH存储空间,烧录过程对于用户来说较透明。我们不直接指定向某一具体的Flash空间写入数据,而是通过执行TI公司提供的批处理文件,经由闻亭仿真器连接目标机来完成烧录程序的过程,因此直接使用方法一我们无处存放校验和为使用方法一来测试芯片内部的FLASH我们必须解决校验和的存放问题。
2 芯片内部FLASH自测试方法概述
下面介绍的方法实现的是解决程序本身自测试程序本身烧到FLASH后保存的是否正确的问题。该方法不是将校验和直接写到FLASH中,而是在待烧录的程序中定义一个变量,该变量最终用于存放事先计算好的校验和,通过两次烧录实现芯片内部FLASH自测试功能的。必须巧妙地避开因改变程序本身而引起的程序校验和改变而导致自测试算法失效的问题。
本方法需要事先将程序完全调试好烧录到FLASH中,然后才能读取FLASH内容计算校验和。此时将校验和值赋给事先定义好的变量,重新编译后得到最终的目标码,烧录到FLASH中。程序上电后自动运行,FLASH自测试程序在每次执行自测试功能时都将要测试的程序空间读出并计算校验和与该变量进行比较,比较结果一致则待测试FLASH空间正确,反之则表明FLASH空间有故障。
由于变量赋值的改变会导致整个代码校验和的改变,因此该问题必须得到恰当的解决。第一次烧写的程序的算法如图1所示。
以上步骤中第二步到第四步是此算法的实现重点,它属于代码的一部分,两次烧写要对其进行更改,详见第3节。第三步是本方法的关键所在,由于sum=0,所以经过“sum=sum+sum;”的运算后sum值还是0,并没有改变sum的值。而sum的初值0并没有对程序的真实校验和值做出贡献,这为第二次烧写的程序代码和计算做出铺垫。
3 芯片内部FLASH自测试方法详述
3.1 第一次烧写步骤
第一次烧写过程如下:
步骤1:将包含图1的代码编译后形成待烧录文件*.out;
步骤2:将代码编译生成待烧录文件*.out,然后通过TI公司提供的批处理文件和仿真器将其烧入片内自带的FLASH中。
3.2 第二次烧写步骤
第二次烧写过程如下:
步骤1:利用闻亭仿真器设置成烧录模式下代码调试模式,将硬件断点设置在FLASH自测试的函数入口处;
步骤2:将程序连续运行至断点处后,单步调试计算出真正的代码和sum=XXX;
步骤3:此时更改程序,将计算好的校验和写入程序中定义好的变量中,即将图1中第二步中sum=0更改为sum=XXX;
步骤4:将代码重新编译生成待烧录文件*.out,然后通过TI公司提供的批处理文件和仿真器将其烧入片内自带的FLASH中。
3.3 方法详细说明
在第二次烧写过程中,图1所示的算法变成图2所示内容。
由于原来的校验和为0,现在将其改为XXX,所以第二次固化的程序的校验和比第一次固化的程序的校验和增加了XXX。而第一次固化的校验和本应该为XXX,因此第二次固化程序的最终的校验和计算出来后应check sum为2XXX,图2中的第三步sum=sum+sum正好满足了上述要求,即sum=2XXX。因此第四步check sum=sum能正确反映自测试结果。
需要补充说明一点,该算法是基于第一次烧录成功后重新加载第一次烧录的程序由DSP处理器自动计算校验和是正确的基础上的,这是由CPU的加减乘除和逻辑运算等自测试正确保证的,在上电时PUBIT里有该项自测试。
4 结束语
DSP已经广泛应用于飞控计算机智能接口模块中。虽然其具有很高的可靠性,但在飞控系统的使用中也必须进行测试。本文就DSP芯片内部自带FLASH提出了一种自测试方法,通过两次烧写FLASH将待测空间的校验和计算出来并计入RAM中事先定义好的变量中,重新编译后生成新的目标码校验和变成第一次校验和的2倍。这样利用sum=sum+sum巧妙地避过了两次校验和增加而引起程序的改动。此方法简单有效地解决了DSP芯片内部FLASH自测试问题,并已在机载设备,包括飞控计算机接口模块中得到应用,对提高机载设备的可测试性和可靠性有一定的作用,值得推广使用。
上一篇:“嵌入式视觉”的处理技术选择
下一篇:分解4G智能手机天线设计的挑战
推荐阅读最新更新时间:2023-10-12 20:46