嵌入式设备上软件分为应用程序模块和升级模块。应用程序模块执行嵌入式系统的实际应用功能。升级模块对应用程序进行升级更新,由网络通信模块、烧写模块构成。网络通信模块包含网卡的驱动和裁剪的TCP/IP协议,并实现自定义的应用层协议。网络通信模块利用以太网进行嵌入式设备和上位机之间的信息交换和升级过程的协调。烧写模块主要是Flash API函数,实现将升级数据烧写进程序存储器中。整个嵌入式设备升级平台的总体软件流程如图所示。
图2-3 嵌入式升级平台总体软件流程
从图2-3中可以看出,嵌入式系统在正常运行时,除了执行应用程序,还实时查询接收缓冲区有没有新的数据到来。当用户开始升级时,上位机软件先读取升级文件,接着与嵌入式设备建立网络连接,并发送升级请求。嵌入式设备的网络模块在检测到上位机发送的升级请求后,进入升级流程。此时嵌入式设备上升级模块和上位机软件进行密切协调通信,将升级数据传送到嵌入式设备RAM中,并对升级数据进行校验。嵌入式设备在正确接收到升级数据后,利用烧写模块,将新的应用程序烧写到程序存储器中,然后使能看门狗,系统重启。重启后,DSP从程序存储器起始地址开始执行新的应用程序。
3 利用在应用编程(IAP)技术实现Flash烧写
3.1 Flash烧写原理
要将新的软件数据烧写到Flash里以实现DSP的升级,涉及到对F2812的片内Flash存储器的烧写。传统的固件烧写解决方法有:利用TMS230C2000 Code Composer StudioTM Flash烧写插件通过JTAG口把程序烧写进Flash,或者使用Spectrum Digital公司的SDFlash来烧写程序,但这些方法一般需要借助CCS或者其他软件,通过硬件仿真器和JATG口传输数据,所以这些方法都一般适合应用程序开发初期的程序调试和首次烧写固化,而课题要实现程序实际运行过程中通过以太网进行的自动化升级,所以这些方法都不适用,需要定制自己的烧写解决方案。
TI为TMS320F2812的开发用户提供了专门的Flash Application Program Interface(Flash API)函数来擦出、烧写、校验芯片内的Flash阵列。用户的应用程序调用Flash API包含的函数来执行特定Flash操作,即通过调用Flash API库里的CPU执行算法来管理Flash阵列和OTP单元模块中的内容。图3-1说明了应用程序和Flash API所处的位置和运行关系。
图3-1 通过Flash API进行对存储器进行烧写
从图3-1中可以知道,Flash API必须运行在零等待周期片内的SARAM存储器中,这是因为(1)TMS320F281x系列处理器只有一块Flash阵列,而Flash阵列的物理结构决定了其在同一时刻只可以进行一种读写操作,所以在对Flash执行擦除、烧写或者恢复算法时,算法代码本身就不能从Flash上执行,只能从其他存储器上执行。(2)Flash API中需要延时来执行正确的操作,这些延时是通过软件精确延时来实现的,所以Flash API必须在零等待周期SARAM中执行以确保其精确性。因此Flash API函数必须在烧写Flash存储器之前,被装载到零等待周期片内SARAM中,并从零等待周期片内SARAM运行。常见的装载方式有如图3-2所示的三种方法。
图3-2 Flash存储器的编程方式
方案A:Flash API代码通过JTAG口直接装载进片内SARAM。CCS和SDFlash就是采用这种方法。
方案B:通过SCI,SPI和并口加载Flash API代码到片内SARAM。这种方案主要用于通过SCI口等加载数据的应用程序。
方案C:API代码属于存储在Flash,OTP等存储器中软件的一部分,在这种方案中,Flash API必须在执行之前从Flash等存储器中复制到零等待周期SARAM中。
方案A需要上位机上的CCS或SDFlash和硬件仿真器支持,方案B需要额外的接口和片外存储空间,所以课题使用方案C,即Flash API代码存储在Flash中,升级模块在升级之前,先从Flash中拷贝出Flash API到SARAM中,这样可以实现软件独立的自动化升级,且占用系统资源最少。
- 上一篇:基于非线性规划的数据校正联合算法的研究
- 下一篇:STC89C52单片机控制的高精度脉冲恒流源的设计与实现
-
-
-
-
-
-
-
酸性水汽提装置总汽提塔设计+CAD图纸
十二层带中心支撑钢结构...
中考体育项目与体育教学合理结合的研究
杂拟谷盗体内共生菌沃尔...
河岸冲刷和泥沙淤积的监测国内外研究现状
乳业同业并购式全产业链...
大众媒体对公共政策制定的影响
电站锅炉暖风器设计任务书
java+mysql车辆管理系统的设计+源代码
当代大学生慈善意识研究+文献综述