技术中心
 
 

可在线更新应用程序代码的DSP自举模块

   日期:2015-02-10    
核心提示:针对现有DSP自举模块普遍存在程序代码更新不便的缺陷,提出了一种可便捷高效地在线更新用户应用程序代码的DSP自举模块。该模块由基于LabVIEW的图形用户界面(GUI)软件与C8051F340单片机构成。

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

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

 

 

图1 DSP自举模块系统框图

2 硬件设计

本模块使用C8051F340的片上FLASH作为DSP的外部存储器。C8051F340通过标准串行接口与DSP通信,通过USB与处理代码格式转换的GUI软件通信。如图2所示,虚线框1为3线制的标准串行总线,负责数据的传输。虚线框2为复位与握手信号。DSP的bootloader通过拉低XF引脚通知单片机DSP已准备好接收数据;而单片机通过P1.3引脚拉低ˉRS来复位DSP。C8051F340与PC机通过USB连接。如图2所示,VBUS为USB电缆VBUS引线的感应输入端,当该引脚出现5V高电平信号时,表示该设备已经和主机连接好。D+、D-为USB的差分信号线,D+信号线接1.5k的上拉电阻R1使USB设备工作于高速。电容C1、C3为15pF的滤波电容。为了消除差模干扰,两信号线连接大小为33pF的电容C2。REGIN为C8051F340片内电压调节器的输入端。VDD为C8051F340片内电压调节的3.3V输出端。通过将REGIN和VDD短接,C8051F340被配置为USB固件自供电,片内稳压器禁止的工作模式。另外,C8051F340电路模块中,通过C2调试接口(包括C2CK时钟信号和C2D双向数据信号)连接JTAG对单片机程序进行烧写和调试。

 

 

图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 Laboratories公司为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器件。

在成功调用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 //行装载

 

 

图4 LabVIEW调用USB主机API框图

之后通过“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函数几个部分。图6为C8051F340程序的流程图。

3.2.1 初始化程序

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

 

 

图6 C8051F340程序流程图

3.2.2 自举函数

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

 

 

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

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++;

}

4 实验验证

为测试该模块的可行性,以TMS320VC54x目标板为基础,设计了如下实验进行验证。

实验第一步首先需要验证GUI软件控制代码格式转换,和移植的可行性。利用DSP开发软件CCS编写一段LCD显示程序并编译生成.out文件。通过JTAG仿真后,LCD上显示“DSP自举模块液晶显示自举测试”等信息。之后去除JTAG进行自举试验。通过USB将PC机与C8051F340相连。待GUI软件成功获取USB器件编号并打开USB器件后,设置自举文件路径,点击 “下载更新DSP自举代码”按键开始更新代码。图8、图9为试验结果。

图8为GUI前面板的实验数据。图中两个USB检测灯在USB连接成功并被功打开时被点亮表明。状态显示区中的“文件转换执行信息”由GUI调用Hex500.exe软件之后产生、“DSP自举代码文件路径”为所转换生成的.dat文件路径,通过路径转换为字符串产生、“DSP自举代码文件内容”,由“读取文本文件VI”读取生成的.dat文件产生。实验数据与设想的一致,表明该模块已成功完成了程序代码的格式转换。最下方的灯被点亮并显示“DSP自举代码下载更新完成”表示GUI软件成功的通过USB将代码数据更新给C8051F340,DSP自举代码更新完成。

 

 

图8 前面板详细信息实验数据

图9为GUI软件控制DSP代码文件格式转换部分的框图在高亮运行模式下截取的数据。探针[1]为转换完成后所获得.dat文件的路径,探针[2]为所得到.dat文件的大小。表明上位机已成功完成代码文件格式的转换得到.dat格式文件

 

 

图9 代码文件格式转换实验结果

第二步需验证C8051F340利用FLASH存储DSP代码并通过标准串行自举控制DSP自举的可行性。实验第一步成功之后,将C8051F340与DSP通过标准串行总线,C8051F340自动控制DSP开始自举。图10为C8051F340在获取GUI软件传送的更新代码并成功通过标准串行自举控制完成DSP自举的实物照片。LCD显示数据与通过JTAG仿真情况下完全一致,证明了该DSP自举模块的有效性,且该自举模块可实现一键更新DSP代码文件,方便快速。

 

 

图10 自举完成实验实物图

5 结语

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

 
标签: 单片机 LabVIEW
  
  
  
  
 
更多>同类技术
 
全年征稿 / 资讯合作
 
推荐图文
推荐技术
可能喜欢