才开始学习DM8168,一般上手时都希望写一个简单的程序验证一下整个开发流程。我想把hello world程序通过jtag烧写到arm中,出现下面错误:
CortexA8: Trouble Writing Memory Block at 0x40300000 on Page 0 of Length 0x5030: (Error -1065 @ 0x3D5A) Unable to access device memory. Verify that the memory address is in valid memory. If error persists, confirm configuration, power-cycle board, and/or try more reliable JTAG settings (e.g. lower TCLK). (Emulation package 6.0.14.5)CortexA8: File Loader: Verification failed: Target failed to write 0x40300000
CortexA8: GEL: File: C:\Users\RW\workspace_v6_1\HelloWorld\Debug\HelloWorld.out: Load failed.
我查阅过网上遇到此问题的帖子,总结错误出现的原因可能为cmd文件地址错误,我使用的是ccs提供的hello world模板,cmd是默认自动生成的。我检查过tms320dm8168的memory map,没有发现错误。还有一种可能是因为gel文件使用错了,我现在使用的开发板是第三方提供的,不是TI的评估板。但是使用的gel为第三方提供的,没有使用ti的gel,因此这应该也是没有问题的。现在卡死在这里了,不知如何分析
Chris Meng:
Wei Ren,
在TI DM8168 EVM的gel里面有使能OCMC时钟的配置(如下),请问你使用的gel里面是否有类似的操作?
Setup_PRCM(){ /* Enable the OCMC0RAM Clocks */ WR_MEM_32(CM_ALWON_OCMC_0_CLKSTCTRL, 2); WR_MEM_32(CM_ALWON_OCMC_0_CLKCTRL, 2); while(((RD_MEM_32(CM_ALWON_OCMC_0_CLKSTCTRL) & 0x100)>>8)!=1); while(((RD_MEM_32(CM_ALWON_OCMC_0_CLKCTRL)&0x30000)>>17)!=0);
/* Enable the OCMC1RAM Clocks */ WR_MEM_32(CM_ALWON_OCMC_1_CLKSTCTRL, 2); WR_MEM_32(CM_ALWON_OCMC_1_CLKCTRL, 2); while(((RD_MEM_32(CM_ALWON_OCMC_1_CLKSTCTRL) & 0x100)>>8)!=1); while(((RD_MEM_32(CM_ALWON_OCMC_1_CLKCTRL)&0x30000)>>17)!=0);
wei ren:
回复 Chris Meng:
有,已经解决问题了,原来在下载程序到目标板时,不能让kernel boot,否则kernel会占用ocmc的地址空间。
wei ren:
回复 Chris Meng:
有,已经解决问题了,原来在下载程序到目标板时,不能让kernel boot,否则kernel会占用ocmc的地址空间。
Chris Meng:
回复 wei ren:
你好,
应该是Linux起来后使能了MMU,导致地址映射关系变化,然后导致的问题。