This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320VC5509通过EHPI (non-multiplexed mode)下载程序的问题,求教!!

通过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),怎么操作这个寄存器呢?

我是一名新手,还希望论坛里的高手能够指点一下!万分感谢!

  • 再补充一下:5509a 用spi eeprom boot mode是加载成功的,并且hpi读写成功。所以硬件电路和软件hpi读写函数是可以的。
    现在因为项目需求,公司要求我用hpi引导,硬件电路上除了改变bootm引脚,其它没有做修改。
  • IO4应该有个下降沿。检查第3步host HPI口的写时序,host写完后,可以在ccs里观察写的数据对不对。
  • 非常感谢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应该写多少呢?
  • 1. 不能越界,HPI能访问的memory区间是0~3FFF。

    2. 和问题1不矛盾, HHPI能访问的memory区间是0~3FFF,只是0~0x100这段ROM bootloader会用到,所以建议boot image要从0x100开始放。

    3. 0x61写0100,0x60写FF00
  • Thanks Shine.

    请教下,字地址0x60、0x61的值是可读的吗?
    通过EHPI接口将文件写入到DRAM的字地址0x100--0x3fff,在做这步之前,我先读了下DRAM地址0x60的值,发现就是非0的,所以不知道是我读的不对,还是DRAM地址0x60的值是不可读的?
  • 可以读,通过memory view里看到的值是多少?
  • Thans Shine.

    从memory view上,看到0x60地址值是0x0000,0x0000。
    用仿真器跟踪,程序也是一直在如下循环里。
    FF80EE a4c0                     MOV @#60h,T0
    FF80F0 7dff0044                 AND #65280,T0,T0
    FF80F4 0404f7                   BCC #0xff80ee,T0 == #0

    但是我bin文件是有写进去的。
    我map文件中是 ENTRY POINT SYMBOL: "_c_int00"  address: 00002300
    从仿真器看0x2300地址开始的值,一个个字节比较过去,和我的bin文件是一致的。

    但是0x60地址的值却没有写进入,这是为什么呢?