嵌入式开发 > 详情

浅析TMS320F2812片内Flash在线烧写技术

发布时间:2020-07-03 发布时间:
|

TMS320F2812(以下简称F2812)是美国德州仪器公司(TI)新一代32位定点数字信号处理器(DSP),主要应用于逆变器控制、电机控制等领域,并拥有工作频率高达150 MHz的32位DSP内核处理器,可以高效可靠地实现自适应控制和状态控制等。因此,TMS320F28X系列DSP已成为自动控制领域的首选控制器件。F2812片内拥有高达128 KBx16位的F1ash程序存储器,可以满足大多数程序存储需要。在研究基于JTAG接口的两种常用Flash烧写技术(CCS插件烧写技术Flash281x_API函数库烧写技术)的基础上,提出了一种利用RS485与PC机的串行通讯实现Flash烧写的方法。

F2812片内Flash简介 TMS320F2812原理与开发
F2812带有128 KBxl6位的片内Flash存储器,分为4个8 KBxl6位和6个16 KBxl6位的扇区,用户可以单独擦除、编程和验证Flash的一个扇区而不会影响其他扇区,但不能用F1ash的一个扇区执行Flash的算法对其他扇区擦除或编程。F1ash还可映射到程序数据空间,因此它既可用于执行代码,也可存储数据信息。

TI代码产生工具所产生的目标文件是一种模块化文件格式一一COFF格式,即.out文件。程序中的代码和数据在COFF格式文件中以段形式形成,不同的段存放不同类型的内容.应用中通过编写连接器命令文件(.cmd)将这些段正确地分配到DSP的地址空间,DSP集成开发环境CCS经编译链接之后。生成.out文件和.map文件。.map文件详细描述了.cmd文件中定义的各段起始地址以及使用长度。而out文件为COFF格式,DSP能够识别,但不能直接烧写到Flash,必须将.out文件转换为Flash能识别的数据格式,即.hex的数据文件。利用CCS转换和.hex转换工具HEX2000进行转换。

基于JTAG的烧写技术

3.1 CCS插件烧写技术

利用烧写插件完成Flash的烧写无需数据转换,只需通过程序调试生成.out文件即可。由于调试阶段程序的.cmd文件存放在F2812的RAM,而烧写阶段程序则存放在Flash,即调试阶段程序的重新定位不能在CCS环境下运行,需要编写两个不同的.cmd文件。

3.2 Flash281x_API函数烧写技术

F1ash281x API函数库烧写技术是利用TI公司的编程算法.该算法定义良好,操作简单,而且可以脱离烧写插件,真正实现在线烧写。

编程算法中函数定义如下:(1)擦除扇区的函数为Uintl6F1ash2812 Erase(SectorMask,FStatus),其中,SectorMask为擦除指定扇区;Fstatus为状态值,判断操作是否成功。(2)烧写程序到F1ash函数为Uintl6 Flash2812_Program(FlashAddr,BuffAddr,Length,FStatus),其中FlashAddr为程序在Flash中烧写的起始地址;BuffAddr为程序当前存放在内存空间的首地址:Length为程序长度;Fstatus为状态值,判断操作是否成功。(3)校验烧写到Flash中的程序为Uintl6 Flash2812_Verifv(&FlashAddr,&BuffAddr,Length,&FStatus)。

Flash28x_API函数烧写步骤如下:

(1)先将.hex格式数据下载到F2812的内存.在CCS环境下完成File→Data→Load,并存放地址和数据长度两个参数,其中数据长度可以通过HEX转换为.map文件获得。

(2)编写基于Flash281x_API函数的烧写程序。先擦除相应的Flash扇区,通过Flash2812_Erase函数完成;将数据的起始地址和数据长度两个参数分别赋给FlashAddr和Length变量,然后调用Flash2812_Program函数开始烧写,最后调用Flash2812_Verify函数确定烧写是否成功。

Flash API与用户工程建立关联后,目标代码通过调用API函数,实现对Flash的擦除、烧写和校验等操作,Flash的密码保护值不全为0,否则Flash将被锁死导使无法解锁。

串口烧写FlaSh技术

基于JTAG的烧写技术必须在CCS环境下通过JTAG接口实现。虽然基于JTAG接口的两种烧写方法易于操作,方便调试,但常常受空间和传输距离限制。比如一台DSP系统安装在复杂、封闭的环境下,当程序需要更新或升级时,利用JTAG接口难以实现Flash的在线烧写。而通过串口烧写技术采用“程序”烧写“程序”的方法则不受限制。前一个“程序”指已固化程序,用于实现串口烧写的时机判断、数据接收及烧写的具体实施等,该程序使用了Flash281x_API库编程算法;而后一个“程序”是用户的应用目标代码。

实现串口烧写技术软件分为PC机内用于数据发送的顶层软件和目标机内的底层软件。顶层软件可实现用户程序的解析等;而底层软件可实现由串口发送的数据烧写至Flash。F2812 DSP每次上电复位,先运行底层软件,判断是否需要重新烧写Flash。若需要,则将串口发送的目标代码烧写至F2812片内Flash指定扇区;否则将继续执行原有的用户目标代码。

4.1 顶层软件

顶层软件可实现用户程序的解析等工作。其用户程序为.oul文件,顶层软件主要完成.hex文件的解析,并将解析后的有用数据发送至目标DSP。.hex文件的组织格式严格,只要提取数据在内存中的存放地址和数据长度就可以按照要求将数据发送给目标DSP。如果用户程序很大而目标DSP的内存空间不足时,该过程还可以分段进行。顶层软件可以使用VC++或者LabVIEW等实现。

4.2 底层软件

底层软件用于实现将串口发来的数据烧写至Flash.涉及到用户程序的正确定位和复位后的启动过程,是整个软件设计的重点。底层软件主要实现以下功能:

(1)烧写程序搬移功能。由于F2812片上Flash不支持在其中一个扇区运行程序去擦除或烧写其他扇区,故完成接收数据和烧写Flash工作的这部分程序需搬移至片内RAM或片外RAM上运行。实现程序搬移的函数为:

其中,SourceAddr为Flash中程序的起始地址,即源程序开始地址;SourceEndAddr为Flash中程序的结束地址,即源程结束序地址;DestAddr为搬移至内存的首地址。

(2)上电复位查询功能。上电复位后查询一个通用I/O端口的状态以确定是否需要烧写程序。这个通用I/O端口可由用户自行确定,但I/O端口占用后其特殊功能便不可用,上电复位后保证其确定状态,否则会不间断烧写程序或者不能正确跳转到用户应用程序。

(3)接收PC机发送的数据并保存到目标DSP内存。这是在串口接收中断服务子程序中完成的,并确定用于数据保存的这部分内存未占用。

(4)接收结束后将内存中的数据烧写至指定Flash扇区,这由Flash28lx_APl库函数完成。图1为底层应用软件流程图。




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
定时器CTC模式的测试