在CCS5.0.3创建了C6713b的工程,编译后生成了OUT文件,再用HEX6转换为HEX文件后,应该按照什么步骤烧写到FLASH中才能正常上电引导启动?
1 使用的FLASH是SST 16bits位宽,擦除和烧写程序已经完成,其中FLASH写操作每次写入一个16bits的半字;
2 C6713b芯片bootmode引脚配置的是16bits rom模式;
3 在out文件转hex文件时romwidth与memwidth两项需要设置为8,16还是32?
4 有没有在CCS5下能正常烧写和引导启动的程序例子(包括应用程序和引导程序)?
谢谢!
Shine:
回复 Shine:
另外, ROM bootloader只能搬移1K大小的代码, 如果你的代码超过1k, 需要用二次bootloader搬. 请参考下面的文档.http://www.ti.com/general/docs/lit/getliterature.tsp?baseLiteratureNumber=spra999&fileType=pdf
countryhotel:
回复 Shine:
再追问以下几个问题:
1 就是关于引脚HD10,9(用于决定boot mode)等类似引脚的上电采样值软件可以在什么寄存器内观察到吗?
2 还想问当emif boot不正常是,怎么使用仿真器跟踪boot的执行过程? 平时使用仿真器都是在线调试(下载out文件),但是这样烧写好以后的跟踪调试方法却是不知道? 如果能应该很有帮助。
谢谢!
Shine:
回复 countryhotel:
1. 没有寄存器可以观察
2. 板子上电, 打开CCS->connect, load symbols only, 不要load .out文件, 打开disassembly window反汇编窗口, 跟踪PC指针的运行, 具体见下面的wiki网站.http://processors.wiki.ti.com/index.php/Debugging_Boot_Issues
countryhotel:
回复 Shine:
现在使用TI开发板的GPIO翻转的例子可以在我们自己的开发板上烧写并上电引导启动成功了,但是加入外部中断模块后就出现程序引导启动不正常的现象,且仿真器连不上芯片。
想问一下:如程序中加入中断后(即会使用中断向量表),在进行EMIF BOOT烧写时连接器CMD文件,bootloader程序和中断向量表asm文件各需要做那些修改?
谢谢!
Shine:
回复 countryhotel:
你加了中断模块的程序先在仿真器模式下调通了么?
countryhotel:
现在能正常引导了,查处了是软件问题,在demo板的emif初始化程序中有一段这样的代码:
EMIF_Config MyEMIFcfg0={ 0x30 | EMIF_FMKS(GBLCTL,NOHOLD,DISABLE) | EMIF_FMKS(GBLCTL,EKEN,ENABLE) | EMIF_FMKS(GBLCTL,CLK1EN,DISABLE) | EMIF_FMKS(GBLCTL,CLK2EN,ENABLE),
EMIF_FMKS(CECTL,WRSETUP,DEFAULT) | EMIF_FMKS(CECTL,WRSTRB,DEFAULT) | EMIF_FMKS(CECTL,WRHLD,DEFAULT) | EMIF_FMKS(CECTL,RDSETUP,DEFAULT) | EMIF_FMKS(CECTL,TA,OF(2)) | EMIF_FMKS(CECTL,RDSTRB,DEFAULT) | EMIF_FMKS(CECTL,MTYPE,SDRAM16) | EMIF_FMKS(CECTL,RDHLD,DEFAULT),
EMIF_FMKS(CECTL,WRSETUP,DEFAULT) | EMIF_FMKS(CECTL,WRSTRB,DEFAULT) | EMIF_FMKS(CECTL,WRHLD,DEFAULT) | EMIF_FMKS(CECTL,RDSETUP,DEFAULT) | EMIF_FMKS(CECTL,TA,OF(2)) | EMIF_FMKS(CECTL,RDSTRB,DEFAULT) | EMIF_FMKS(CECTL,MTYPE,ASYNC16) | EMIF_FMKS(CECTL,RDHLD,DEFAULT),
EMIF_FMKS(CECTL,WRSETUP,DEFAULT) | EMIF_FMKS(CECTL,WRSTRB,DEFAULT) | EMIF_FMKS(CECTL,WRHLD,DEFAULT) | EMIF_FMKS(CECTL,RDSETUP,DEFAULT) | EMIF_FMKS(CECTL,TA,OF(2)) | EMIF_FMKS(CECTL,RDSTRB,DEFAULT) | EMIF_FMKS(CECTL,MTYPE,ASYNC16) | EMIF_FMKS(CECTL,RDHLD,DEFAULT),
EMIF_FMKS(CECTL, WRSETUP, OF(2)) | EMIF_FMKS(CECTL, WRSTRB, OF(10)) | EMIF_FMKS(CECTL, WRHLD, OF(2)) | EMIF_FMKS(CECTL, RDSETUP, OF(2)) | EMIF_FMKS(CECTL, TA, OF(2)) | EMIF_FMKS(CECTL, RDSTRB, OF(10)) | EMIF_FMKS(CECTL, MTYPE, ASYNC16) | EMIF_FMKS(CECTL, RDHLD, OF(2)),
EMIF_FMKS(SDCTL,SDBSZ,4BANKS) | EMIF_FMKS(SDCTL,SDRSZ,13ROW) | EMIF_FMKS(SDCTL,SDCSZ,9COL) | EMIF_FMKS(SDCTL,RFEN,ENABLE) | EMIF_FMKS(SDCTL,INIT,YES) | EMIF_FMKS(SDCTL,TRCD,OF(2)) | EMIF_FMKS(SDCTL,TRP,OF(2)) | EMIF_FMKS(SDCTL,TRC,OF(7)),
//EMIF_FMKS(SDTIM,XRFR,OF(1)) | EMIF_FMKS(SDTIM, CNTR, OF(0)) | EMIF_FMKS(SDTIM, PERIOD, OF(1400)),
EMIF_FMKS(SDEXT, WR2RD, OF(0)) | EMIF_FMKS(SDEXT, WR2DEAC, OF(2)) | EMIF_FMKS(SDEXT, WR2WR, OF(0)) | EMIF_FMKS(SDEXT, R2WDQM, OF(1)) | EMIF_FMKS(SDEXT, RD2WR, OF(0)) | EMIF_FMKS(SDEXT, RD2DEAC, OF(1)) | EMIF_FMKS(SDEXT, RD2RD, OF(0)) | EMIF_FMKS(SDEXT, THZP, OF(2)) | EMIF_FMKS(SDEXT, TWR, OF(2)) | EMIF_FMKS(SDEXT, TRRD, OF(0)) | EMIF_FMKS(SDEXT, TRAS, OF(5)) | EMIF_FMKS(SDEXT, TCL, OF(1))
};
该段代码用于初始配置EMIF接口相关控制寄存器,在使用仿真器在线调试的情况下可正确配置寄存器,但是在烧写到FLASH引导启动后就会将emif寄存器配置错位,现象是找到了,但是真是原因还不是很清楚,为什么这一段代码在在线仿真和烧写引导两种情况下会有如此差别?请清楚的高人指点。
另外,使用仿真器对引导程序的debug真是好用。谢谢楼上的相关回答。