当前位置:首页 > 电源 > 数字电源
[导读]以TMS320VC5402为例,探讨一种综合运用C语言、数据文件及GEL语言的Flash编程新方法。该方法完全采用C语言编写烧写程序,解决了指针 不能访问高端Flash的问题;把引导表作成数据文件,可实现大引导表的分批次加载;通过GEL程序控制C程序执行,较好地体现了Flash编程的流程。

引言

  在DSP应用系统开发的后期,一般需要将用户程序写进Flash等非易失性存储器,以便采用并行引导的方法实现用户程序的自举加载。这一步骤称 为“烧写”;针对Flash的烧写又称为Flash编程。以往的编程方法大多采用汇编语言编写程序,可读性较差,并将引导表的制作也放在程序中实现;用户 程序一变,烧写程序就得重新编写,不具有通用性。参考文献[1]采用C语言完成Flash读写,较清晰地体现了Flash编程的思想,但是它采用指针访问 Flash空间,不能对高端Flash(64 K字存储空间以外)进行访问,且将引导表作成数组的方法仍显机械。

  这里提出的Flash编程方法完全采用C语言编写烧写程序,运用函数地址访问高端Flash,借助数据文件将引导表加载到数据空间。GEL (General Extension Language,通用扩展语言)作为一种程序扩展语言,被广泛用于调试及程序运行环境的定制。这里将GEL语言运用于Flash编程,可以控制C程序在 数据加载完成后执行烧写过程,从而实现大引导表的烧写。

1  DSP开发板及Flash存储器

  笔者使用的DSP开发板上有1片TMS320VC5402通用DSP芯片、1片SST39VF400A存储芯片(Flash)、键盘和液晶显示 器等。其中Flash容量为256 K字(1字=16位),组织为128个扇区或8个块。为充分发挥Flash容量大的特点,本系统在硬件上将Flash空间的映射设计为:在上电自举过程 中,Flash空间的0x04000~0x0FFFF映射到数据空间的0x4000~0xFFFF;上电自举完成后,整个Flash空间 0x00000~0x3FFFF映射到程序空间的0x80000~0xBFFFF,即映射到了TMS320VC5402的扩展程序空间,处于高地址,因此 称为“高端Flash”。由此可知,对系统进行应用开发时,Flash总是表现为高端Flash。

按此在新窗口浏览图片
图1  Flash编程流程

2  Flash编程流程

  用户程序一般以可执行COFF(公共目标文件格式)文件格式存在(后缀名为.out),Flash编程所要完成的就是将此可执行文件转换成特定 的ASCII码引导表的格式,并按此格式顺序写进Flash。Flash编程流程如图1所示。下面仅以一个动画显示程序qq.out为例,介绍如何将其烧 写进Flash。

2.1  生成引导表

  通过Hex转换工具,将用户程序qq.out文件转换成十六进制形式的ASCII码流文件(ASCIIHex格式文件[2])qq.asc。首先编写一个convert.cmd命令文件。部分内容如下:

  qq.out/*用户程序*/
  -a/*转换成ASCIIHex格式文件*/
  -map qq.mxp/*包含引导表的长度等信息*/
  -o qq.asc/*转换成qq.asc*/

  执行命令行“hex500 convert.cmd”将产生qq.mxp和qq.asc文件。其中qq.mxp文件有这样的信息:“CONTENTS: 00000000…0000433b”。表示qq.asc中的引导表长度为0x433C字,内容大致为:“10 AA 7F FF 00 02 00 00…”。

2.2  转换成数据文件

  编程将ASCIIHex格式文件qq.asc转换成CCS(Code Composer Studio,代码集成开发环境)支持的数据文件(后缀名为.dat)。例中的引导表已属较大的表,这里将其转换为两个数据文件qq_dat1.dat和 qq_dat2.dat,以在同一缓冲区分两次装载,避免因缓冲区太小而容纳不了引导表的情况发生。

  CCS支持的数据文件的第一行为文件头信息,格式为:

  幻数  数据格式  起始地址  页类型  数据块大小

其后是文件内容,每行表示一个数据。其中幻数固定为“1651”,数据格式可以选择“1”(十六进制整型)、“2”(十进制整型)、“3”(十进制长整型)、“4”(十进制浮点型)。

  利用VC6.0编写该转换程序是简单的,程序运行后产生的qq_dat1.dat文件将是:“1651 1 4000 1 2000 0x10AA…”。从文件头信息可知,加载该文件可将引导表装载到数据空间0x4000起始的长度为0x2000的缓冲区中。

2.3  Flash烧写

  利用GEL程序将引导表形成的数据文件qq_dat1.dat和qq_dat2.dat逐次装载到数据空间,调用C程序执行烧写过程。

  由于Flash空间映射到TMS320VC5402程序空间的0x80000~0xBFFFF,故实际编写程序时使用的Flash空间的地址均需偏移0x80000。例如,Flash空间的0x5555地址单元实际上为0x85555。

  正如前面所介绍的,虽然高端Flash囊括了整个Flash空间,但是对于C54x系列芯片,其C语言指针的宽度为16位,只能访问64 K字范围(0x0000~0xFFFF)之内的存储空间,而不能访问高端Flash(0x80000~0xBFFFF)。

  参考文献[3]讨论了用C语言指针不能访问C54x系列DSP扩展程序空间的问题,提出了用函数名代替指针来访问扩展程序空间的方法,并给出了 可供C程序调用的pfunc_ext.lib库。这一方法本质上是将函数名代表的程序空间地址(20位)传送到40位的累加器,进行累加器寻址,因此使用 该库恰好可以解决指针不能访问高端Flash的问题。库中以下两个函数是有用的:

int PFUNC_wordRead(PFUNC addrProg);
//读取(扩展)程序空间地址addrProg处的一个字
void PFUNC_wordWrite(PFUNC addrProg,int wData);
//将字wData写到(扩展)程序空间地址addrProg处

  为应用pfunc_ext.lib库,需定义一些函数,并在命令文件中为这些函数所在的自定义代码段分配段地址,以使这些函数的函数名指向Flash特定的地址单元。例如,可以编写一个C程序源文件,定义一个空函数FLASH_5555以指向0x85555:

#pragma CODE_SECTION(FLASH_5555,"bigpointer")
void FLASH_5555(void){}

  Flash的其他地址可依此方法得到, pfunc_ext.lib库的具体说明见参考文献[3]。

  下面应用pfunc_ext.lib库编写了Flash擦除和编程的3个基本函数flash_erase()、 flash_word_write()、flash_serial_write(),分别完成Flash擦除、字编程和连续编程。其中连续编程只是循环调 用了字编程函数。擦除和字编程的流程分别如图2和图3所示。擦除函数的代码如下:

//实现片擦除、块擦除或扇区擦除,type定义擦除方式,addr给出扇区起始地址或块起始地址
unsigned int flash_erase(PFUNC addr,unsigned type){
  //执行SST39VF400A的擦除命令序列
  PFUNC_wordWrite(FLASH_5555,FLASH_CMD1);
  //0xAA﹥*(0x85555)
  …
  PFUNC_wordWrite(addr,type);//擦除类型命令
  …
  }

按此在新窗口浏览图片
图2  擦除流程

按此在新窗口浏览图片
图3  字编程流程

  有了这些基本函数,就可以在主函数中完成Flash的烧写。下面的主函数实现将引导表烧写进Flash。

void main(){
  …
  asm("erase:");//擦除0x80000~0x97FFF,块擦除
  for(i=0;i<3;i++)
  flag=flash_erase((PFUNC)i,FLASH_BLOCK_ERASE);
  asm("program1:");//连续编程
  flag=flash_serial_write(FLASH_BASE,MEM_BASE,usercode_length1);//FLASH_BASE指向0x84000
  asm("program2:");//连续编程
  …
  asm("program_bootaddr:");//字编程
  flag=flash_write_word(FLASH_FFFF,0x4000);
}

  例中采用了块擦除的方式。MEM_BASE是多次加载引导表的缓冲区起始地址,为与数据文件qq_dat1.dat中文件头对应,应保证 MEM_BASE指向0x4000。其方法类似于上述函数名的地址分配(使用#pragma DATA_SECTION伪指令)。最后完成字编程,使Bootloader上电时得以在数据空间的0xFFFF处读取引导表在数据空间的起始地址,例中 为0x4000。

  为使主函数正确执行,需借GEL语言的运行调试功能,由此设计的GEL程序真正体现了Flash烧写的流程。GEL程序流程如图4所示,部分代码如下:

menuitem "PROGRAMMING";
hotmenu FlashFiring(){…
  GEL_Load("ProgramFlash.out");//加载C烧写程序
  …
  if(flag){
  GEL_Load("qq_dat1.dat");//加载数据文件
  GEL_Go(program1); //执行连续编程
  …
  GEL_Load("qq_dat2.dat");//加载数据文件
  GEL_Go(program2); //执行连续编程…
}
  }

按此在新窗口浏览图片
图4  GEL程序流程

  GEL程序在C程序每次执行前设定正确的环境变量并初始化缓冲区。例如,数据文件的长度usercode_length1就是需要根据实际的数据文件长度进行设定的环境变量;而在进行连续编程之前,需要GEL程序重新加载MEM_BASE缓冲区。

3  运行结果

  在CCS环境下选择File/Load GEL,装载以上GEL程序,选择GEL/ PROGRAMMING/FlashFiring,即可实现Flash烧写。拔掉仿真器,给系统重新上电,可以看到液晶显示器上QQ企鹅的动画。

4  结论

  通过函数地址可以进行Flash的全空间访问;采用C语言编写Flash擦除和编程函数,增强了程序的可读性;将引导表作成多个数据文件,一方 面适于大引导表的加载,另一方面使Flash编程算法与编程数据完全分离,提高了算法的通用性;仅在GEL程序中修改参数即可实现另一用户程序的烧写,体 现了方法的灵活性。

参考文献

[1]  张勇.C/C++语言硬件程序设计——基于TMS320C5000系列DSP[M].西安:西安电子科技大学出版社,2003(5):206-230.
[2]  Texas Instruments. TMS320C54x Assembly Language Tools User's Guide. SPRUF102,200-210.
[3]  David M Alter. Using C to Access Data Stored in Program Memory on the TMS320C54x DSP[R]. SPRA177A, Texas Instruments Application Report,2005-08.
[4]  北京合众达电子技术有限公司. SEED——MMI5402用户指南. 2004-06.

王海涛(硕士),主要研究方向为机器视觉、焊接自动控制;
张文明(教授),主要研究方向为焊接自动控制;
王滨(教授),主要研究方向为机器视觉。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

近日,沈阳京东MALL涌进大批玩家,大部分都为此前在“沈阳京东MALL”微信公众号获得线下首发购买机会的朋友。据悉,此次GeForce RTX 4090显卡现货线下首发活动,受到众多玩家热烈追捧。...

关键字: GE FORCE 显卡 NVIDIA

最近看到APP上,给我推送了很多类似的回答,借此机会,也想着重新审视一下自己的学习历程,以及结合自身和大牛,分享一些学习经验,希望对大家有所启发和帮助。

关键字: APP 嵌入式 C语言

艾伯森(Albertsons)正在与其竞争对手克罗格(Kroger) 就合并进行谈判。两家连锁杂货店最早可能于本周达成协议。(全球企业动态)...

关键字: GE

通用电气公司(GE)周二表示,其医疗健康部门分拆的新公司将名为GE HealthCare,由四个业务部门组成——成像、超声波、病人护理解决方案和医药诊断。通用电气计划创设三个独立运作的上市公司,分别专注于医疗健康、航空和...

关键字: HEALTH 通用电气 HC GE

SQLite是一个跨平台的轻量级数据库,支持C/C++开发,可用于嵌入式中,关于C/C++使用SQLite的简单实例,可参考这篇:“玩转SQLite6:使用C语言来读写数据库”,本篇来继续介绍SQLite的基础运算符与表...

关键字: SQLite C语言 数据库

今天晚上21点,RTX 4090公版将在国内首发,在这个关键时刻,NVIDIA也是再次提醒大家,不要忘记。除了线上发售外,10月15日GeForce RTX 4090系列显卡将在线下正式开售,华硕、七彩虹、微星推出现货,...

关键字: NVIDIA FORCE 显卡 GE

法拉第未来(Faraday Future,FFIE)提交8K公告,宣布FFIE执行董事长兼董事Sue Swenson,董事Scott Vogel和Jordan Vogel,已正式辞去FFIE董事会董事和公司其他全部相关职...

关键字: 法拉第未来 GE ADAM FARADAY

默沙东(MSD)和国药集团联合宣布,双方签署合作框架协议,默沙东将其和Ridgeback公司合作研发的抗新冠病毒口服药物莫诺拉韦的经销权和独家进口权授予国药集团,同时双方将评估技术转让的可行性,以便该药物在中国境内生产、...

关键字: SD GE CK AC

(全球TMT2022年9月27日讯)Jabra推出Jabra Engage 50II及Engage 40两款全新联络中心耳麦。Jabra Engage 50 II采用了先进算法来检测用户语音波形及分析背景噪声。配备的3...

关键字: GE 耳机 噪声 麦克风

打造更高的通话效率和客服评分 Jabra Engage 50 II 配备协同工作的强大 3 麦克风系统,可提供更清晰的语音和出色的背景噪声消除功能 Jabra Engage 40 凭借清晰语音以及超...

关键字: GE BSP 耳机 麦克风

数字电源

15504 篇文章

关注

发布文章

编辑精选

技术子站

关闭