C6726+Flash+Boot调试笔记.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C6726FlashBoot调试笔记

前几日调试TMS320C6726片外Flash启动,网上借鉴了很多方法,受益很多,现在也总结下我们的调试步骤,希望给初学者以帮助。 1.Flash操作 采用的Flash芯片是SST39LF200,是128K*16位,硬件连接采用的是EMIF(TMS320C672x DSP External emory Interface (EMIF))手册上的接法,EM_BA[1]接A[0]。高4位地址用GPIO来控制。 这里就需要注意:Flash芯片的偏移地址要*2才与DSP芯片上的偏移地址相对应。 其中,EM_A[11:0]给出的是32位字地址的最低有效位,EM_BA[1:0]给出半字(16bit)和字节(8bit)信号,或者给出EM_A[23:22]信号,这取决于A1CR中的数据线宽度配置。这里数据线宽度为16bit,所以EM_BA[1:0]给出半字和字节信号。(参看EMIF手册) 例如,Flash芯片上的偏移地址0x5555与DSP芯片上的0x9000AAAA 相对应,因此,有以下定义(这两个地址在对Flash操作时要用到): Uint16 *Flash_Add5555 = (Uint16 *)0x9000AAAA; Uint16 *Flash_Add2AAA = (Uint16 *)0 剩下的就是flash的erase 和program了,写入相应的关键字就行了,这个不难。 2.flash启动 2.1 两个重要的参数(参看手册Using the TMS320C672x Bootloader): The first 8-bits on the flash device gives information about the data bits (8/16) that can be accessed from the parallel flash simultaneously. 2. The first 1024 bytes of data are copied from the FLASH memory into the first 1kBytes of TMS320C672xx internal memory. The bootloader sets the program counter to 0(offset of 0x4 in internal memory) and execution of code begins at this address. 所以: 1.需要在flash的第一个空间里写入0x0001,表示16位 2.具体函数代码从flash的第3个空间开始,即0x2 2.2 程序小于1KB, 如果程序小于1Kb,则不需要second boot。有些文档里面提及烧写要经过.out---.hex---.bin的过程,我们在用这个方法时,卡在了.bin文件的生成上。后来借鉴了网友的经验:将存放程序的RAM空间上的数据,直接写入到flash中。 (参看/view/5dd6cc62caaedd3383c4d354.html) 例如,一个简单用GPIO口控制LED闪烁的程序 #pragma CODE_SECTION(Myboot,.MYBOOT); void Myboot(void) { int i; *(unsigned int *)(0xF0000010) = 0x086225bd;//配置EMIF,因为要用到EMIF从flash读数据,//PLLC就偷懒没配置了 *(unsigned int *)(0 = 0//配置mcaspa PFUCN *(unsigned int *)(0 = 0//配置mcaspa PDIR *(unsigned int *)(0 = 0// LOOP1: { for(i=0;i60000;i++) *(unsigned int *)(0 = 0 for(i=0;i60000;i++) *(unsigned int *)(0 = 0;// } goto LOOP1; } 在cmd文件里: MYBOOTLOADER: origin = 0x10030DA0 length = 0x0400 .MYBOOT: load = MYBOOTLOADER 在main函数里,调用flash烧写操作,将这段代码烧到flash中(先得擦除,并program 0x00,0x01空间) Uint16 * SecondBootRAMStart =

文档评论(0)

wuyuetian + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档