APP下载

一种可在线更新程序的DSP自举模块※

2014-08-12朱磊郭力董毅王慧俊

单片机与嵌入式系统应用 2014年8期
关键词:程序代码存储器调用

朱磊,郭力,董毅,王慧俊

(西安工程大学 电子信息学院,西安 710048)

一种可在线更新程序的DSP自举模块※

朱磊,郭力,董毅,王慧俊

(西安工程大学 电子信息学院,西安 710048)

针对现有DSP自举模块普遍存在程序代码更新不便的缺陷,提出了一种可便捷高效地在线更新用户应用程序代码的DSP自举模块。该模块由基于LabVIEW的图形用户界面(GUI)软件与C8051F340单片机构成。GUI软件完成DSP应用程序代码的格式转换,并通过USB将转换完成的程序代码传送给C8051F340。C8051F340通过其片上USB外设接收DSP程序代码并存储于片上FLASH中,同时借助标准串行总线控制DSP完成应用程序代码的自举操作。该模块采用在线方式,可一键实现DSP应用程序代码的更新升级与自举操作。实验结果表明了该模块的有效性。

DSP自举;LabVIEW;GUI;USB;C8051F340

引 言

TMS320VC54x系列DSP作为一种低功耗高速处理器在消费电子、通信等领域应用广泛[1-2]。通常为实现DSP程序代码的高速运行,一般需要将DSP的应用程序代码存储于DSP片内RAM中运行,但TMS320VC54x处理器是RAM型器件,掉电后DSP不能保存任何用户应用程序代码。因此,基于该型DSP的电子系统通常需要设计自举模块。所谓“自举”是指:DSP芯片内的程序引导装载器(Bootloader)自动地将DSP应用程序代码从DSP外部非易失性存储器加载到片内RAM中,脱离仿真器模式独立运行的过程。

TMS320VC54x系列DSP有两类自举方式:基于静态存储器(如EEPROM、FLASH)的自举方式和基于处理器的自举方式。基于静态存储器的DSP自举方式[3-4]使用外扩的静态存储器存储DSP程序代码,由于该方式无需外加控制器干预,因此具有电路简单等优点。基于处理器的DSP自举方式[5-6],利用单片机存储DSP程序代码并控制DSP完成自举,具有可有效控制DSP自举时机、可灵活选择自举通信接口等优势。然而,无论哪类自举方式,要更新DSP应用程序代码都需要先将DSP开发软件CCS编译产生的.out程序代码文件通过一系列的格式转换,生成DSP自举所需的程序代码格式,并将得到的代码移植到DSP应用系统片外扩展的静态存储器或单片机中存储。显然,传统DSP自举模块的上述程序代码更新操作非常麻烦。为此本文提出一种便捷高效的DSP自举模块。借助该模块,用户无需熟悉DSP自举设计过程,便可一键实现DSP程序代码的更新升级与自举操作。

1 方案设计

DSP开发软件CCS编译生成的.out文件不能直接用来自举,需要将其进行一系列繁琐的格式转换得到合适的格式并移植到DSP的外部存储器进行自举[7]。为解决该问题,本模块通过基于LabVIEW的GUI软件完成上述转换并控制代码移植到外部存储器。DSP自举模块框图如图1所示。

图1 DSP自举模块系统框图

GUI软件首先将.out文件转换为.hex格式,并将得到的.hex文件转换为方便DSP自举的.dat格式。之后,GUI通过USB将数据传送给C8051F340单片机完成DSP程序更新。C8051F340是一款可提供USB功能并具有较大FLASH存储空间的混合信号微控制器。本模块使用其片上FLASH作为DSP的外部存储器,可省去外扩存储设备,节约成本,简化电路。自举开始时,单片机将FLASH中的代码数据通过标准串行自举方式传送给DSP,控制DSP的自举。标准串行自举与其他自举模式相比,占用DSP硬件资源少,电路简单。通过本模块,开发者可在PC机上实现一键完成DSP代码更新。

2 硬件设计

图2 自举模块主要硬件连接关系图

3 软件设计

本系统主要通过GUI软件完成DSP用户应用代码的格式转换和调用USB主机API控制USB传输数据;通过C8051F340程序调用USB器件API接收数据存入片内FLASH中,并通过标准串行通信控制DSP的自举。下面分别介绍各软件设计的功能和具体流程。

3.1 基于LabVIEW的GUI程序设计

LabVIEW开发的程序一般由一个或多个VI组成,所有VI都可分为前面板和框图两部分。前面板是VI的交互界面,用户输入数据通过前面板传递给框图,计算和分析结果在前面板上以不同方式显示出来。图3为本模块的GUI前面板。前面板分为“输入配置区”和“状态显示区”。通过在前面板的“输入配置区”设置文件路径进行DSP代码文件的二次更新。“状态显示区”可实时显示USB连接状况、文件转换信息、自举代码文件内容等详细信息。

图3 基于LabVIEW的GUI前面板

图形化的程序代码主要完成两个任务:调用USB主机的API函数控制USB数据传输和控制代码文件格式转换。

借助Silicon Labs公司为USB驱动程序开发提供的USBXpress,可以简便地实现在PC机上通过GUI软件与作为USB器件的C8051F340单片机的USB通信。USBXpress提供了10个USB主机API函数,通过LabVIEW中的CLF(调用库函数节点)调用USBXpress提供的USB主机API函数,便可访问USB底层硬件。图4为本设计LabVIEW上位机程序调用API的框图。图中VI作用分别是获取USB器件编号、获取USB器件序列码、设置USB读写延时、打开USB器件、向USB器件写数据块、关闭USB器件。

图4 LabVIEW调用USB主机API框图

在成功调用SI_Open()函数打开USB器件,并通过“file path control.vi”控件获取待转换文件的具体路径后,GUI软件对定位的代码文件开始进行转换。如图5所示,首先通过“Exec.vi”(“执行系统命令”VI)调用CCS软件环境提供的DOS批处理文件Hex500.exe软件(与自举文件位于同一个目录)将.out文件转换为.hex文件。Hex500.exe在DOS环境下运行需要输入大量转换配置文件,因此GUI需同时调用集中描述文件转换所需参数信息的.cmd文件。.cmd文件内容及注释如下:

bootloader.out //待转化的程序文件

-o bootloader.hex //输出文件名

-map bootloader.map //生成存储器映像文件

-boot //生成加载表

-I //输出文件为Intel Hex文件格式

-e_c_int00 //程序入口地址

-memwidth 16 //标系统的存储器为16位

-romwidth 16 //存储器芯片的位宽为16位

-bootorg SERIAL //串行装载

之后通过“Exec.vi”函数调用hex-to-dat.exe软件将.hex格式转换为.dat格式。最终在文件格式转换完毕之后提取代码并转换为数组,在循环中调用SI_Open()函数以每次512字节的速度将数据写入USB器件,直到所有文件传输完毕,关闭USB。

图5 LabVIEW转换DSP程序代码格式的框图

3.2 C8051F340程序设计

C8051F340通过USB从GUI软件接收DSP程序代码并存储到片内FLASH中,之后通过标准串行接口将代码传送给DSP进行自举。C8051F340程序主要包括初始化函数、自举函数、USB驱动函数、擦写FLASH函数几个部分。C8051F340程序的流程图略——编者注。

3.2.1 初始化程序

程序初始化部分主要包括USB设备初始化和C8051F340单片机初始化。USB初始化通过调用USBXpress提供的10个USB器件API函数实现,包括调用USB_Clock_Start()函数初始化USB总线时钟、调用USB_Init()函数使能USB总线、调用USB_Init_Enable()函数使能API中断;C8051F340单片机初始化中将单片机时钟设为48 MHz以满足USB全速工作方式的需要,配置单片机输出端口为推挽输出,开启外部中断0并通过配置寄存器“IT01CF=0x07”将P0.7配置为INT0的中断触发端口引脚,监视DSP所给自举信号。

3.2.2 自举函数

DSP启动速度比C8051F340快,因此自举之前需先复位DSP并初始化SPI接口,等待DSP的XF引脚触发INT0中断后启动自举操作。本程序使用16位标准串行方式对DSP自举。通信时序如图6所示,BFSR0脉冲之后可传输一个16位的数据,传输的每个16位数据之间需至少保证40个DSP时钟周期的延时时间。且单片机时钟频率(BCLKR0)不可超过DSP时钟频率的1/2。标准串行自举代码如下所示,程序中将BFSR0拉高后,传输一个字节的数据,并通过调用延时函数Delaynum(20)延时20 μs来满足传输两数据间最小CPU时钟间隔的要求,程序中w为当前传输的由4个ASCI字符转换而来的16位无符号整型变量。

图6 单片机标准串行自举时序图

BCLKR0=1;

Delaynum(20);

BCLKR0=0;

BFSR0=1;

Delaynum(20);

BCLKR0=1;

Delaynum(20);

BCLKR0=0;

Delaynum(20);

for(i=0;i<16;i++){

BDR0= (w & (0x8000 >> i)) > 0;

BCLKR0=1;

BFSR0=0;

Delaynum(20);

BCLKR0=0;

Delaynum(20);

}

3.2.3 USB驱动函数和FLASH读写函数

USB中断函数通过调用Block_Read()函数接收来自GUI软件的代码数据,并存入TempStorage[]数组。ReadStageLength为每次所读取的文件大小,最大为64字节(一个数据块大小)。因GUI软件每次发送512字节,FLASH中每512字节为一页,故下位机中每读取512字节后写入FLASH。

如下代码中,BytesRead为已读取数据的大小,当C8051F340通过USB接收了一页FLASH可容纳最大数据512字节(Block_PR_Page为每页FLASH可容纳最多数据块= 512/64)或者GUI软件发送的最后一组数据,写入FLASH。PageIndices[0]为下位机自举的基指针,指向FLASH中0x2000开始的地址,其中0x2000~0x2200用来存放接收数据信息(大小、所含数据块量);PageIndex为当前操作的Flash相对于基页0x2000的偏移量,PageIndices[0]+PageIndex*0x200指向Flash当前操作地址,自举程序代码从0x2200地址处开始。

BytesRead+= Block_Read((BYTE*)(&TempStorage[BlockIndex]),ReadStageLength);

BlockIndex++;

if((BlockIndex==(Block_PR_Page))||(BytesRead==BytesToRead)){

Page_Erase((BYTE*)(PageIndices[0]+PageIndex*0x200));

Page_Write((BYTE*)(PageIndices[0]+PageIndex*0x200));

PageIndex++;

}

为测试该模块的可行性,以TMS320VC54x目标板为基础进行验证。具体方法略——编者注。

结 语

本文提出了一种可在线更新程序的自举模块。该模块在GUI软件中将DSP程序代码进行格式转换,并通过USB将代码数据导入C8051F340单片机的片内FLASH中存储。C8051F340通过标准串行总线控制DSP进行自举。利用该模块,用户更新DSP程序代码可完全在计算机上操作,无需了解自举的具体细节,实现一键更新代码;同时该自举模块可在短短数秒内完成代码更新,从而大大减轻了开发难度和缩短开发周期。另外,由于单片机FLASH存储量为64 KB,除去单片机的程序占用空间,从0x2200地址开始,共可存储55.5 KB左右的DSP程序代码,满足大多数中小DSP应用程序的自举需求,因此该系统可广泛用于程序代码不超过55.5 KB的DSP系统中。

[1] 杨萍,张玉杰,杨良煜,等. 基于DSP的新型智能超声波相关流量计[J]. 计算机测量与控制,2006,14(9).

[2] 刘炜,龙宪惠. TMS320VC5402在汽车防撞警示雷达中的应用[J]. 电子技术应用,2001,27(9).

[3] 陈红梅,陈健.TMS320VC5402的Flash并行Bootloader技术[J].单片机与嵌入式系统应用,2003(11).

[4] 徐书杰,刘宏立.TMS320VC5416 DSP并行自举方案的设计与实现[J].计算机工程与科学,2009,31(8).

[5] 邹翼,曾文海,陈续喜. 基于TMS320VC5402 DSP的HPI方式自举的设计与实现[J]. 计算机系统应用,2009(3).

[6] 李辉.C8051F023通过HPI对TMS320C5402自举的实现[J]. 无线电工程,2005,35(3).

[7] 朱磊,刘东. C8051F340与LabVIEW基于API的USB通信[J]. 单片机与嵌入式系统应用,2007(1).

朱磊(副教授),研究方向为嵌入式系统。

DSP Bootloader Module with Online Program※

Zhu Lei, Guo Li, Dong Yi, Wang Huijun

(School of Electronics and Information, Xi’an Polytechnic University, Xi'an 710048, China)

This paper presents a convenient online-update-program DSP bootloader module for DSP to overcome the inconvenience in updating program codes, which is ubiquitous in existing DSP bootloader module. This module consists of a Graphical User Interface (GUI) software based on LabVIEW and a C8051F340 MCU. DSP application codes are transferred into needed format by GUI and sent to the C8051F340 by using USB. The C8051F340 stores DSP application codes in its on-chip FLASH and controls DSP to finish booting by using standard serial boot mode. The advantage of the design proposal is that it is convenient and fast for DSP to update and boot using online programing. The experimental results show this module is feasible and reliable.

DSP bootloader;LabVIEW;GUI;USB;C8051F340

陕西省教育厅自然科学项目(12JK0547);西安工程大学博士科研启动基金项目(BS1205);西安市科技局技术转移促进工程项目(CXY1349(2))。

TP311/368

A

2014-02-15)

猜你喜欢

程序代码存储器调用
静态随机存储器在轨自检算法
核电项目物项调用管理的应用研究
LabWindows/CVI下基于ActiveX技术的Excel调用
计算机网络信息安全未来发展趋势
基于图元装接模式由程序流程图自动生成源代码
基于系统调用的恶意软件检测技术研究
存储器——安格尔(墨西哥)▲
基于Nand Flash的高速存储器结构设计
利用RFC技术实现SAP系统接口通信
嵌入式系统中程序的优化策略