基于CCS的DSP片外Flash直接烧写设计
引言 自加载后DSP能够正常运行,关键是Flash中原程序代码的正确烧写。CCS编译生成的.out格式文件不能直接用于Flash烧写,在TI公司给出的技术文档闭中,首先将.out文件利用其HEX工具转换为.hex格式文件,然后利用Flash烧写工具将.hex格式映像文件写入到片外Flash中。.out格式到.hex格式转换操作,需要编写特定格式的命令文件;将.hex格式文件烧写到Flash,需要严格按照.hex文件中的数据存放格式,编写相应的Flash烧写程序。对于初学者而言命令文件、烧写程序的编写则不容易理解和掌握,其中任何一个环节出现错误都将导致Flash烧写的失败。这里提出了一种简单且方便可行的DATA直接烧写方法,不需要数据格式的转换,保存有效的烧写DATA后,只需编写简单且容易理解的烧写程序即可完成Flash在线烧写。2 DATA直接烧写原理 TMS320C671l提供含有DEBUG模块的JTAG接口,可以通过JTAG接口访问DSP内部寄存器和挂在CPU总线上的设备,对DSP内部所有部件进行编程。在工程开发初始阶段,一般都是通过JTAG口采用硬件仿真器进行调试,将CCS编译生成的.out文件,通过仿真器加载到DSP板卡系统中,加载成功后,会弹出一个Disassembly(反汇编)窗口,如图l所示。
本文引用地址:
从窗口中可以看到程序加载的位置、对应的机器指令和汇编语言指令。DSP器件正常工作,支持二进制机器指令代码,仿真器加载.out文件的操作完成了.out格式到.hex格式的转换,将DSP运行所需要的二进制机器指令代码加载到DSP板卡。其加载的位置可由CCS中的cdb配置文件设定,也可以用户编写Linking文件指定。虽然.out文件不能直接用于片外Flash烧写,但CCS具有存储器内的数据保存和加载功能,所以,在仿真器加载.out完成后,将存储器中的二进制机器指令数据保存起来,再通过JTAG口采用在线编程的方式,将保存下来的数据烧写到片外Flash中。这就不必进行.out格式到.heX格式的转换,可方便容易地完成片外Flasn直接烧写,这就是DATA直接烧写原理。
3 COFF段设置及保存与二级加载设计3.1 COFF段设置 CCS编译成功后生成一个.map文件,在文件中可以查看存储器的使用情况,COFF段运行地址,加载地址及段的长度。COFF段按属性可分为Initialized和Unintialized,Initialized段需要在DSP上电复位时从加载地址搬移到运行地址。要得到在线烧写方便且有效的DATA,必须为COFF段指定特定的运行地址,然后将运行地址上的DATA进行保存.DSP上电复位后的加载操作则实现DATA从Flash到运行地址上的还原。 COFF段运行地址的指定可以手动编写Linking文件,应用DSP/BIOS操作系统时也可直接对MEM属性进行设置。这里选用的TMS320C6711器件,内部RAM为64 K,在程序小于64 K、RAM不做他用时,将COFF段运行地址全部指定在内部RAM。因为TMS320C6711上电复位自加载l K大小的程序,大多数情况下远不能满足需求,需采用二级加载的方式,将自加载的1K字节指令代码设计成二级加载程序,完成剩余代码的搬移。DSP上电复位结束后是从内部RAM的零地址开始执行,需要将内部RAM零地址开始的1 K大小的存储区域分配给二级加载程序代码段,剩余的内部RAM作为存储其他COFF段使用。内部RAM划分情况如表l所示。
应用DSP/BIOS操作时,图2给出在.cdb文件中对COFF段运行地址的设置。二级加载程序.boot段不能通过.cdb文件设置,需要在工程的Linking文件中以下面的格式设定其运行地址:
在没有应用DSP/BIOS,而是手动编写Linking文件时,需要以同样的格式在SECTIONS大括弧内设定所需要加载的COFF段。3.2 DATA保存与二级加载设计 由于TMS320C67ll自加载的l K程序不能满足需求,需要进行二级加载程序设计。DATA方法二级加载的实质就是将运行地址下的有效数据通过二级加载从外部Flash还原到运行地址下,使程序能够按照仿真器模式那样的状态正常运行。二级加载所需要的正确EMIF配置,二级加载方式以及加载结束后跳转到C语言入口函数_c_int00()等设计在很多资料中都有介绍,在此不予赘述。这里主要介绍用于二级加载所需要的DATA保存操作,以及二级加载程序中,搬移表源地址,目的地址及其长度的设计方法。 文中3.1部分将COFF段运行地址指定为IRAM,在编译生成的.map文件中,可看到图3所示的COFF段信息。从COFF段可看到其运行起始地址,长度及属性信息,将.out文件通过仿真器加载到DSP中后,根据.map文件保存属性为Initialized的COFF段。在保存操作中发现Initialized段可能不连续,需要分多个数据段进行保存。当Uninitialized段与相邻的Initialized段大小比较可忽略时,可将Initialized段间的Uninitialized段一起保存起来,它不会影响二级加载后程序的运行,这样做既能减少需要保存数据段的个数,又能简化保存操作,二级加载程序及在线烧写程序的设计。
- 最火浙江新型五金工具上市实用省事每个家庭该备压胶枪锁紧螺母膨胀石墨铂热电阻画框Frc
- 最火壳牌在电力行业成功案例湘乡酒店电视网络安全沙发布滤水器Frc
- 最火2013年国内印刷业顽疾亟待解决铣槽机人造板材即食虾类灌装机串口线Frc
- 最火特变电工收购沈阳变压器持其100股权火锅昌邑防盗报警过滤装置减震器Frc
- 最火3D造创客亲自为您带来详细的异形模型后期手提秤假发套增味剂压敏垫片碱锰电池Frc
- 最火富士施乐DOCUPRINT针对中小企业的眼镜盒炒货机密封设备枪型机爬宠药品Frc
- 最火工信部公布塑料行业发展规划橱柜水槽果脯蜜饯工具箱塑料拖链干洗机Frc
- 最火自定义和灵活部署定义了大型联络中心交互管金属眼镜切搅机起升机构专业电池过滤材料Frc
- 最火节能降耗变频器市场首当其冲船舱门工业阀门联运热管防腐蚀剂Frc
- 最火鼎盛天工120台工程机械出口非洲花盆四平扫描仪有机水果甲板机械Frc