基于SD卡的DSP自举模块设计

2014-06-27 03:13毅,朱磊,任静,郭
西安工程大学学报 2014年4期
关键词:程序代码前面板扇区

董 毅,朱 磊,任 静,郭 力

(1.西安工程大学 电子信息学院,陕西 西安 710048;2.西安理工大学 科技处,陕西 西安 710048)

0 引 言

TMS320VC54x系列DSP应用广泛,但是这类DSP处理器掉电后易丢失用户程序代码,所以要对这类DSP处理器的电子系统进行自举设计.“自举”是指DSP系统上电时,将放在外部低速ROM中的用户程序代码加载到高速的RAM中,以便快速取址、译址和执行用户应用程序.

自举模块是TMS320VC54x系列DSP应用电子系统中不可或缺的重要组成部分.DSP自举加载方式多样,模块多变.目前的DSP自举模块按照存储代码器件类型不同可分为两类:一类是基于静态存储器的自举模块[1-3],一类是基于处理器的自举模块[4-5].基于静态存储器EEPROM的自举模块[1-2],具有电路简单,需要扩展的器件少、成本较低等优点,而基于静态存储器FLASH的自举模块[3],相比EEPROM自举模块,自举文件容量得到一定提高,基于处理器的自举模块[4-5]成本和复杂度提高,且更容易控制自举流程.然而,上述两类模块都存在DSP程序代码转换复杂,DSP用户应用程序代码大小受限和更新升级不便等问题.为解决这些问题,本文提出了一种基于SD卡的DSP自举模块的设计方案,该模块以LabVIEW程序执行代码转换,自举模块利用更多的CPU程序空间,方便快速地将用户程序代码加载到DSP片内RAM.

1 方案设计

设计分为用于代码转换的GUI软件和用于标准串行自举[6-7]的单片机子模块两部分.自举模块系统框图如图1所示,通过GUI软件将DSP用户应用程序转换成.dat格式,用个人计算机将程序载入到自举模块中的SD卡,然后单片机子模块的单片机通过SPI总线[8]读取SD卡内程序,并控制DSP目标板进行标准串行自举.

GUI软件完成DSP用户应用程序的格式转换工作.DSP用户应用程序通过CCS编译生成.out文件,然后需要.out转.hex,.hex转.dat等多步转换,.dat格式文件才是最后要载入DSP的用户应用代码.本方案的GUI软件一键完成上面的文件转换工作,再通过PC机将.dat文件写入单片机子模块的SD卡,DSP程序代码转换复杂的问题得到解决.然后,单片机子模块使用znFAT文件系统读取代码,控制DSP进行标准串行自举.本方案单片机子模块系统框图如图1,DSP自举文件存入SD卡后,单片机通过文件系统[9]读取存储在SD卡内的DSP用户应用代码件,复位并握手DSP,将自举程序加载到DSP片内RAM.这样既解决了DSP用户应用程序大小受限制的问题,又可直接通过计算机管理SD卡中的DSP用户应用程序实现程序的更新升级.另外本方案单片机子模块采用标准串行自举的方式,占用较少的DSP硬件资源.

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

2 硬件设计

本方案只有单片机子模块需要硬件设计,其硬件连接关系图如图2所示.硬件引脚连接比较简单,硬件设计主要包括SD卡与C8051F340的SPI通信,单片机与TMS320VC54x系列DSP复位与握手,单片机C8051F340与DSP目标板自举通信,图2中各芯片的接地、电源、保护电路、稳压电路等均未画出.

图2虚线框1中单片机C8051F340与SD卡采用硬件SPI通信,SPI接口是一种高速、全双工的同步通信总线,只占用芯片4个引脚.CLK为SPI时钟引脚,MOSI为SPI从输入/主输出,MISO为从输出/主输入,NSS为从设备使能信号.P0.0至P0.3管脚在单片机内部已经过弱上拉处理.图2虚线框2中单片机C8051F340与TMS320VC54x系列DSP多通道缓冲串口McBSP的BCLKR0、BFSR0、BDR0引脚模拟3线制SPI,组成标准串行自举总线,这3个接口设为推挽输出模式,同时均已经在单片机内部通过弱上拉处理,通信时以单片机为主机,DSP为从机.图2虚线框3为复位与握手通信,RS引脚接收单片机的复位信号,低电平有效,DSP复位完毕后触发INT0(XF)中断与单片机进行握手.

图3 基于LabVIEW的GUI前面板

3 软件设计

程序设计分两部分,第一部分是PC机上的LabVIEW程序,用于代码转换;第二部分是单片机子模块程序,读取SD卡内的DSP用户应用程序,进行标准串行自举加载到DSP.

3.1 LabVIEW程序设计

LabVIEW程序设计的前面板包括有转换文件的路径选择,文件转换信息和转换开关等;后面板需要完成文件转换,转换细节文本输出和文件名更改等任务.

图3是基于LabVIEW的GUI前面板,前面板设计了2个输入分别是.out文件路径和转换开并,3个输出分别显示文件转换信息、DSP自举代码文件内容和自举代码文件路径.

图4是基于LabVIEW的GUI后面板,使用了DOS批处理文件hex500.exe(该文件位于CCS软件“CCStudio_v3.3C5400cgtoolsin”安装目录下)和hex-to-dat.exe文件(进行.hex文件到.dat文件格式的转换,其中.dat文件仅含有DSP的16进制纯机器代码).在平铺式顺序结构第一个子程序内调用hex500.exe,它将.out文件转换为.hex文件;平铺式顺序结构第二个子程序内调用hex-to-dat.exe,它将得到的.hex文件直接转换成.dat文件.点击布尔按钮后GUI依次调用这两个程序,将相关的转换信息文本输出到前面板,更改后缀名,并将得到的.dat文件存入.out相同目录下.

使用hex500.exe之前,需要先生成应用程序.out文件和引导表配置文件.cmd.DSP用户应用程序在CCS集成开发环境中编译链接后便可生成应用程序的.out文件,而描述文件转换参数信息的.cmd文件需要手动设置..cmd文件内容如下;

图5 单片机子模块程序主流程图

-bootloader.out//bootloader为文件名

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

-map bootloader.map//输出的MAP表

-boot//转换成引导表的形式

-i//生成Intel格式

-e _c_int00//用户程序的入口地址

-memwidth 16//目标系统存储器16位宽

-romwidth 16//16位存储器位宽

-bootorg SERIAL//标准串行方式

3.2 单片机子模块程序设计

单片机子模块的主流程图如图5所示.从图5可以看出,首先模块初始化,然后读取SD自举文件,进行标准串行自举.为此设计了C8051F340单片机初始化等函数,嵌入式文件系统znFAT的移植与SD卡的读写程序,C8051F340与TMS320VC54x系列DSP的SPI通信,DSP自举函数.

3.2.1 初始化函数设计 这部分包括单片机初始化、SD卡初始化、文件系统初始化等.其中单片机初始化又包括器件时钟初始化(系统时钟为48MHz),定时器初始化,I/O端口初始化将P0.0~P0.3配置为硬件SPI,XBR1=0x04,P1.0~P1.2设为推挽输出、中断初始化IE=0x81开启.

SD卡初始化程序,先打开片选NSS=0,调用函数SD-Write-Cmd(CMD1)即向SD卡写命令1(51单片机读写SD卡命令),其中CMD1为命令1的首地址,写不成功或超时返回0x02,初始化失败,继续调用函数SD-Write-Cmd(CMD1)直至成功,关闭片选,按照SD卡的操作时序补8个时钟,初始化成功返回.

编辑文件系统初始化函数需要了解文件系统与存储卡,其实与文件系统及分区相关的参数信息都会被记录在磁盘上专门的地方DBR(DOS 引导记录),真正记录这些参数的是一个被称为BPB(BIOS 参数块)的区域.文件系统初始化先定义一个bpb型指针(BPB),将数据缓冲区指针转为bpb型指针,装入设备号0(代表SD卡),调用znFAT_Find_DBR()找到BPB所在扇区号,调用znFAT_ReadSector(pArg->BPB_Sector_No,znFAT_Buffer)读取BPB扇区信息并赋值给znFAT_Buffer(数据缓冲区),然后向pArg(用于指针文件系统参数集合的指针)内装入BPB参数如FAT表占用扇区数、根目录簇号、每扇区字节数、每簇扇区数、第一个FAT表扇区号、磁盘的总容量(单位是字节)等信息.CISC的CPU通常是小端(低字节在前),所以znFAT也设计为小端,而单片机这种RISC的CPU,通常来说都是大端(高字节在前),所以装入BPB时需要将小端转大端,将字节的存放次序进行调整,才能得到正确的数值.初始化最后调用Search_Last_Usable_Cluster()获取最近一个空闲簇,文件系统初始化完毕.

3.2.2 znFAT文件系统的移植与SD卡的读程序设计 图5中第3步单片机打开读取SD卡内容;SD卡容量都较大,需要移植嵌入式Fat32文件系统,其中znFAT系统拥有较为完备的功能,如文件打开、数据读写等.还有长名、数据重定向等扩展功能.在本自举模块中只要能对SD卡进行查找文件,打开/关闭一个文件,读文件等基本几个文件操作与管理即可.

打开文件函数znFAT_Open_File(*pf,*filepath,item,is_file),pfi指针,用来装载文件的参数信息例如文件的大小、文件的名称、文件的开始簇等,以备后面使用.filepath是文件的路径,支持任意层目录例如“\dir1\dir2\dir3\…\test.tx”,变量item在文件名中有通配符*或?的情况下,实现与之匹配的文件并非一个,item就是打开的文件的项数,这里取0.该函数返回0说明成功,返回1说明文件不存在,返回2说明目录不存在.

SD卡读函数SD-Read-Sector(addr,buf)读取addr扇区的512个字节到buffer指向的数据缓冲区,addr为扇区地址,buffer为指向数据缓冲区的指针外部.调用成功,返回0x00;否则返回0x04.SD卡初始化成功后,读写扇区时,尽量将SPI速度提上来,提高效率.

3.2.3 复位与握手程序设计 图5标准串行自举流程图中4~5打开单片机外部中断,复位DSP,等待握手信号.因为DSP复位比较慢,需要等待较长时间,握手成功后才可进行数据传输,DSP复位完成后XF引脚变为低电平,触发INT0中断提示单片机复位完成,握手成功.如图2自举模块引脚连接图虚线框3.

3.2.4 标准串行自举程序设计 图5中第6步调用DSP自举函数并发送代码.单片机开始向DSP写入SD卡内的自举文件,由于TI公司在TMS320VC5416内掩膜了Boot Loader程序,该程序也包含了与单片机的通信协议,所以不用再单独编写自举程序和通信协议.标准串行自举正常工作的时序程序如下:Delay(20)代表延时20μs;P1.0,P1.1,P1.2是图2虚线框2中单片机引脚,依次代表BDR0,BFSR0,BCLKR0,P1.0输入无符号整型变量,P1.1为帧步信号,P1.2输出同步时钟,组成标准串行自举总线,时序图如图6所示.

znFAT_Read_File(&FileInfo_loaderFile,j*4,4,loader_ARRAY);//读取SD卡内自举文件并赋值给loader_ARRAY

w=ASCII_Transform();//将loader_ARRAY中存放的直接从SD卡文件中读取的ASCII字符数据转换为相应16进制数,w为16bit的unsigned int型变量,传输用户应用程序代码

图6 标准串行自举时序图

P1.2=1;

Delay(20);

P1.2=0;

P1.1=1;

Delay(20);

P1.2=1;

Delay(20);

P1.2=0;

Delay(20);

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

{

P1.0=(w & (0x8000 ≫ i)) >0;

P1.2=1;

P1.1=0;

Delay(20);

图7 步骤一实验结果GUI的前面板

P1.2=0;

Delay(20);

}

自举完毕后,单片机关闭SD的DSP应用程序文件,此时自举文件数据已经载入到DSP,拔掉JTAG接口后DSP系统可以自启动了.

4 测 试

为验证本模块存储并更新DSP用户应用程序实现自举的有效性,测试分为两步.第一步,LabVIEW程序代码转换,验证LabVIEW程序是否能够实现自举文件.out到.dat的格式转换;第二步单片机子模块自举,验证单片机子模块是否能够通过znFAT文件系统管理SD卡,是否能够进行TMS320VC54x系列DSP的标准串行自举.

4.1 步骤一

DSP用户应用程序是LCD显示程序.在LabVIEW前面板找到并选定LCD显示程序在CCS集成开发环境中编译链接后生成的.out文件,然后运行LabVIEW软件点击转换按钮,观察3个输出文本框.结果如图7所示.实验成功完成代码转换,文件转换信息由LabVIEW后面板的执行系统指令hex500.exe产生,意思是将bootloader.out转换成Intel Hex格式,其后缀名为.hex,DSP自举代码文件内容由hex-to-dat.exe输出,原来的.out文件变成16进制数,超级编辑器打开的.out,.hex,.dat文件内容如图8所示,DSP用户应用程序剔除了冗余,文件内容减少,变成了16进制纯机器码,自举代码文件路径就是.dat文件的路径,与.out文件在同一目录下.

4.2 步骤二

自举模块以TMS320VC5416为DSP目标板,在步骤一中前面板的自举代码文件路径下找到.dat文件并通过PC机载入到SD卡,再将SD卡插入自举模块,然后运行调试自举模块的单片机程序,这时会看到LCD显示内容,如图9所示.最后撤掉单片机仿真器,重启自举模块电源,察看LCD显示屏,实验结果如图9所示.说明TMS320VC5416自举成功,图9中自举模块左下角接的是USB电源,没有接任何仿真器,LCD显示内容与DSP接仿真器调试LCD显示程序相同.该实验证明自举模块单片机能够对SD卡内文件进行管理和DSP目标板TMS320VC5416完成了标准串行自举.

图8 out,.hex,.dat文件 图9 步骤二实验结果实物图

5 结束语

设计了一种基于SD卡的DSP自举模块,该模块用SD卡作为DSP的引导代码文件存储载体,使DSP的引导代码存储不受容量限制,SD卡形成文件系统存储管理DSP用户应用程序代码,使自举代码更新升级非常方便;通过GUI软件将CCS生成的应用程序文件直接转换成为.dat的文件,使DSP应用程序更新升级免去代码转换步骤.另外DSP标准串行引导的自举方式占用DSP芯片较少的硬件资源.实验表明本文提出的自举模块合理可行.

参考文献:

[1] 陈孟奇,严新荣.TMS320VC5509A串行EEPROM自举的方法研究[J].舰船电子工程,2012(6):73-75.

[2] 陈若珠,胡金平,李站明.TMS320VC5509在线烧写Falsh并自兴趣启动方法研究[J].软件天地,2011(30):9-11.

[3] 张彪,方方,黄洪全,等.TMS320VC5502外扩FLASH自举引导方法的设计与实现[J].核电子学与探测技术,2009,29(6):1303-1306.

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

[5] 李辉.C8051F023通过HPI对TMS320C5402自举的实现[J].工程应用,2005,35(3):35-37.

[6] 秦承虎.TMS320VC5416自举技术[J].电子测量技术,2005(5):48-49.

[7] 张喜平,梁书斌.TMS320VC54x系列DSP芯片自举程序的优化设计[J].自然科学,2012,27(3):24-28.

[8] 朱广斌,朱德明,孟小利.MCU与DSP的SPI通信设计[J].技术纵横,2008(1):33-35.

[9] 李世奇,董浩斌,李荣生.基于FatFs文件系统的SD卡存储器设计[J].测控技术,2011,30(12):79-81.

猜你喜欢
程序代码前面板扇区
分阶段调整增加扇区通行能力策略
颜值高和散热强可以并存3款高品质机箱推荐
电竞潮牌范航嘉GX520S机箱评测
电竞潮牌范 航嘉GX520S机箱评测
管制扇区复杂网络特性与抗毁性分析
U盘故障排除经验谈
计算机网络信息安全未来发展趋势
基于图元装接模式由程序流程图自动生成源代码
基于贝叶斯估计的短时空域扇区交通流量预测
个性化的机箱选择