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.

TMS320F28335: XINTF Parallel Boot数据流传输方式问题

Part Number: TMS320F28335

在《 TMS320x2833x, TMS320x2823x Technical Reference Manual》(即sprui07,TMS320x2833x, TMS320x2823x Technical Reference Manual (ti.com))中的2.2.19节 XINTF_Parallel_Boot Function中,host发送数据流的流程如下:

即主机host要将数据流放到XINTF的数据总线XD[15:0]上,以供DSP读取。

实现上述流程时,我的想法是:由于DSP在XINTF_Parallel_Boot时,只会从zone6的地址0x10_0000读取数据,所以在host中需要将数据流一个一个地放到主机host的地址0x10_0000,即DSP通过XINTF访问host的zone6,下载数据流实现boot。但是在实现时发现,host要向地址0x10_0000写数据,就必须启用XINTF;而DSP的XINTF在XINTF_Parallel_Boot过程中是始终使能的。这样host和DSP同时启用了XINTF,且同时访问host的zone6,会出现竞争的问题导致host和DSP都访问出错。请问我的思路是否正确?若正确,如何解决XINTF竞争的问题?若错误,正确的实现思路是什么?

另外,关于图中的“Load XD[15:0] with data”,我想到是否可以通过类似2.2.18节中Parallel_Boot Function (GPIO)的方法实现,即host不使能XINTF,XD[15:0]也配置成通用IO,通过控制对应GPIO的电平高低来发送数据。实践后发现并不成功,DSP接收到的数据仍然是从host的地址0x10_0000读取的。

总之,主机host要怎样将数据发给DSP XINTF_Parallel_Boot读取?求解答,谢谢!

  • 您好我们已收到您的问题并升级到英文论坛寻求帮助,如有答复将尽快回复您。谢谢!

  • 我用示波器看了信号,发现访问出错的原因可能是同时使能两个XINTF导致输出冲突的问题。DSP和host都使能XINTF后,任一方进行读操作时,会将片选XZCS6和读使能XRD拉低,但另一方的输出却为高,两个设备的输出冲突,导致信号波动、产生大量毛刺,从而使读操作失效。地址线XD[0:19]也有相同的问题。

  • 好的我们反馈给工程师看下,今天是国外的假期所以给到您答复可能会稍晚些,给您带来的不便敬请谅解!

  •  您好,

    host要向地址0x10_0000写数据,

    主机不写入。 DSP 读取。 了解这一关键差异非常重要。 

    这样host和DSP同时启用了XINTF,

    不太明白您的意思? XINTF 是 DSP 内部的外设。 只有 DSP 可以使能 XINTF。 主机刚刚映射到 DSP 存储器空间的地址0x10 0000。 

    且同时访问host的zone6,

    并不能这么说,zone6 of host。 zone6是相对于 DSP来说的。 主机并不知道什么是"zone6"。 

    会出现竞争的问题导致host和DSP都访问出错。

    不确定如何发生争用。 只有当两个实体竞争同一资源时才会发生争用。 在这种情况下,DSP 仅通过提供0x10 0000的地址从主机读取。 主机将数据放置在数据总线上以供 DSP 读取。 数据流的方向始终是从主机到 DSP。 争用如何发生? 

    若正确,如何解决XINTF竞争的问题?

    如以上答复,并不会出现竞争的问题。

    即host不使能XINTF

    也请参见以上答复,主机不能使能 XINTF。

    XD[15:0]也配置成通用IO,

    不,对于此模式,XD[15:0]无法配置为 GPIO。 由于这些引脚现在是 XINTF 的一部分,只应该被配置为 XD[15:0]。 

    主机host要怎样将数据发给DSP XINTF_Parallel_Boot读取?

    该链接中的2.2.19 XINTF_Parallel_Boot 函数中对此进行了明确解释。 请参阅figure2-24上方和下方的文本。 

    发现访问出错的原因可能是同时使能两个XINTF导致输出冲突的问题。

    数据流的方向是从主机到 DSP。 请问您的主机是什么? 能否分享下原理图。 

    任一方进行读操作时,

    两侧都不读取。 只有 DSP 读取。 

  • 感谢回复,帮我解决了不少疑惑。

    目前我已成功实现了XINTF Parallel Boot,其实和Parallel Boot (GPIO)的实现思路是一致的,整体思路和我提的问题中

    另外,关于图中的“Load XD[15:0] with data”,我想到是否可以通过类似2.2.18节中Parallel_Boot Function (GPIO)的方法实现,即host不使能XINTF,XD[15:0]也配置成通用IO,通过控制对应GPIO的电平高低来发送数据。

    一段中的方式相同,就是host通过控制DSP的XD[0:15]的电平高低来实现传输数据(也就是手册中说的“load XD[0:15] with data”),硬件连线上只需要连XD[0:15]和握手协议的GPIO12、GPIO13即可。我在实验时使用另一块DSP作为host,这样只需要将host的GPIO79:64配置为常规I/O且为输出,然后通过寄存器GPCDAT就可以控制电平高低来传输数据了。只不过我之前犯了一个低级错误,XD[0:15]对应于GPIO79:64,这样直接放入GPCDAT的数据0x10AA在被读取时会变成逆序的0x5508,导致了boot失败。

    总之还是十分感谢!

  • 实现上述流程时,我的想法是:由于DSP在XINTF_Parallel_Boot时,只会从zone6的地址0x10_0000读取数据,所以在host中需要将数据流一个一个地放到主机host的地址0x10_0000,即DSP通过XINTF访问host的zone6,下载数据流实现boot。但是在实现时发现,host要向地址0x10_0000写数据,就必须启用XINTF;而DSP的XINTF在XINTF_Parallel_Boot过程中是始终使能的。这样host和DSP同时启用了XINTF,且同时访问host的zone6,会出现竞争的问题导致host和DSP都访问出错。

    另外,这种思路在软件上可能无法实现,也不是XINTF Parallel Boot的正确方法。问题在于2个设备的GPIO互连,一个输出为高,一个输出为低,导致存储器接收到的信号不稳定,也许可以通过硬件上的方法解决?不过这就与本问题无关了。

  • 如果您需要其他技术支持,您可以创建一个新的帖子,会有相应的工程师来跟进您的新问题。