通过EHPI接口下载程序到5509a,然而EHPI接口读写失败。
项目中CPU和c5509a之间是16位的HPI接口,非复用模式。
下载程序的过程基本上是按照SPRA375F的顺序来做的:
1.将5509a芯片复位:reset引脚拉高;
2.检测5509a的IO4管脚是否下降沿:实际量测发现5509a的IO4管脚一直是低电平;
3.通过EHPI接口将文件写入到EHPI接口可以操作的DRAM中,SPRA375F上推荐从0x100这个地址开始烧写程序。
在做这步之前,我先验证EHPI接口读写是否正确。我向5509a的0x100这个地址开始,写256个字节;然后再回读。发现读出的结果是:2字节正确,接着4字节是以前老的数据,再接着2字节正确,再接着4字节是以前老的数据…
请教各位大师:
是不是步骤2就出问题了? 5509a的IO4管脚应该是先高后低,有一个下降沿?
还有我看SPRA375F上说:EHPI (non-multiplexed mode)引导,需要向EBSR寄存器[1:0]写入10b, 需要这步操作么? 而且EBSR寄存器地址是0x6c00, 超出了EHPI (non-multiplexed mode)引导的读写范围(0x0100–0x3fff),怎么操作这个寄存器呢?
我是一名新手,还希望论坛里的高手能够指点一下!万分感谢!
user5871948:
再补充一下:5509a 用spi eeprom boot mode是加载成功的,并且hpi读写成功。所以硬件电路和软件hpi读写函数是可以的。
现在因为项目需求,公司要求我用hpi引导,硬件电路上除了改变bootm引脚,其它没有做修改。
Shine:
IO4应该有个下降沿。检查第3步host HPI口的写时序,host写完后,可以在ccs里观察写的数据对不对。
user5871948:
回复 Shine:
非常感谢Shine的回复! HPI读写的这个问题解决了,解决方法就是修改hpi口的写时序。
现在我准备往5509a写入引导程序,但是我对word-address不太理解,有三个问题,请大师帮忙继续解答下,谢谢!
问题1:
spra375f上说:it is recommended that the memory image loaded through the EHPI be limited to word-address range 000100h-003FFFh (16,128 bytes total).
也就是说:字地址000100h-003FFFh包含16,128字节。host最多可以一次发送16,128字节给5509a,如果超过16,128字节则会越界对吗?问题2:
参照spra375f的Figure 1. EHPI Wait Flag and Entry-Point Address
也就是说:5509a字地址0061h包含了两个字节,字地址0060h-0061h包含了4字节;和问题1的结论矛盾。问题3:
假设我在map文件中entry point address定义为00100h, 那么我向0060h、0061h应该写多少呢?
user5871948:
回复 Shine:
Thanks Shine.
请教下,字地址0x60、0x61的值是可读的吗?
通过EHPI接口将文件写入到DRAM的字地址0x100–0x3fff,在做这步之前,我先读了下DRAM地址0x60的值,发现就是非0的,所以不知道是我读的不对,还是DRAM地址0x60的值是不可读的?
Shine:
回复 user5871948:
可以读,通过memory view里看到的值是多少?
user5871948:
回复 Shine:
Thans Shine.
从memory view上,看到0x60地址值是0x0000,0x0000。用仿真器跟踪,程序也是一直在如下循环里。FF80EE a4c0 MOV @#60h,T0FF80F0 7dff0044 AND #65280,T0,T0FF80F4 0404f7 BCC #0xff80ee,T0 == #0
但是我bin文件是有写进去的。我map文件中是 ENTRY POINT SYMBOL: "_c_int00" address: 00002300从仿真器看0x2300地址开始的值,一个个字节比较过去,和我的bin文件是一致的。
但是0x60地址的值却没有写进入,这是为什么呢?