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.

[参考译文] TMS320C6424:TMS320C6424 PCIBARnMSK 配置问题

Guru**** 1788580 points
Other Parts Discussed in Thread: TMS320C6424
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/844299/tms320c6424-tms320c6424-pcibarnmsk-configuration-problem

器件型号:TMS320C6424

尊敬的 TI 团队:

我正在使用 TMS320C6424 PCI 模块。 我成功开发了能够读取 ADC 数据的 Linux 驱动程序和固件。 我只使用了6个条中的2个。 我用于通过 PCIBARnMSK = 0禁用棚舍。

我的固件在同一 PCI 总线上连接2个 TMS320C6424之前一直工作正常。 经过几天的调试后、我发现 PTRDY_N 信号由两个 DSP 反向驱动。 下面是总线信号的图片:

如果我启用所有条形图、问题消失。 到目前为止、通过将所有6个条形图配置为相同大小和相同位置、我可以在一条总线上使用两个 TMS320C6424。 看起来、如果至少有一个 PCIBARnMSK 寄存器设置为0、则 PCI 通信会中断。

能否确认这是否是 TMS320C6424中的错误? 在 TMS320C6424中禁用条形的正确方法是什么?

此致、

基里尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Kirill、
    让我看看这些文档、我将提供反馈。

    此致、
    Yordan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我查看了 C64x PCI 文档、但未找到相关信息。 在您的设置中、什么是 PCI 主机、Linux 是否在主机上运行? 两个 C64x 是如何连接到主机的? "我的固件在同一  PCI 总线中连接了2个 TMS320C6424之前运行良好"========== >两者之间是否有桥? 我知道、如果你将 BARnMSK 设置为0、那么该条就会被禁用。

    如果总线上只有一个 C64、但只有两个电阻、它是否正常工作? 当您在同一总线上有两个相同的器件时、Linux 如何确定哪一个? 到目前为止、通过  将所有6个条形图配置为相同大小和相同位置、我可以在一条总线上使用两个 TMS320C6424。 =========== >当您从主机进行存储器事务时,如何确定哪个 C64x 应该响应?

    此致、Eric   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Eric!

    下面是我的设置图:

    我在 Windows XP 和 Linux Ubuntu 上进行了测试:相同的双板问题。

    我使用基于 FPGA 的电路板来监控 PCI 总线信号。 所有 FPGA 引脚均配置为输入将禁用上拉/下拉。 如果不使用此 FPGA 板、我也会得到相同的结果。 稍后我将通过信号分路器向您提供图片。

    以下是6条固件板的 lspci 输出:

    可以通过器件编号(本例中为0b 和0e)识别电路板。 对于特定 PCI 总线拓扑、这些数字是固定的。 要了解哪个器件编号对应于物理端口、我使用 JTAG:只需读取 PCIBARnTRL:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Eric!

    "我知道、如果您将 BARnMSK 设置为0、则该栏将被禁用。" ->这正是我所期望的! 当我在总线上仅使用单个 C64时、这种方法就能正常工作。

    "如果您在总线上只有一个 C64、但只有两个电阻、它是否正常工作?" ->我仅使用 C64板进行了测试。 我想、如果我连接 C64 +任何其他 PCI 板、可能会有相同的问题、但我没有尝试此设置。 是的、仅使用单个 C64板、我的驱动程序就能正常工作。 我可以在主模式下配置 C64并获取数据。

    "当您在同一总线上有两个相同的器件时、Linux 如何确定哪一个?" ->对于双 C64设置、配置阶段工作正常。 我想 C64 PCI 地址解码器中存在问题。 配置读/写事务不使用它。 当我开始在从模式下读取/写入数据时、我遇到了问题。

    "当您从主机执行存储器事务时、如何确定哪个 C64x 应该响应?" ->查看我之前的消息。 我使用信号分路器来监控总线、使用 JTAG 来识别总线上的电路板。 我在 DSP 上看到总线地址和条形图。

    嗯、我只有一个 JTAG、我没有同时检查两个板的条形图设置。 不过、我已经检查了一个和另一个板的条形图设置。 配置顺序始终相同:可以在信号分接头上看到它。

    此致、

    基里尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    为了证明问题、我已将固件恢复为使用2条而不是6条。

    以下是 Linux 中的 lspci 输出:

    以下是信号分路器上的单个配置读取事务:

    数据读取事务是假的:

    我可以在 JTAG 连接中看到以下内容:

    以及我怀疑地址解码机制的原因。 以下是 SPRUEN3C 第27页的屏幕截图:

    如果 PCIBARnMSK =0和 PCIBARn =0、则任何 AD 都将匹配[n]=1。 如果此图与实际地址解码有关、则 C6424的 PCI 有问题。

    基里尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Kirill、

    感谢您提供的图表和详细的解释! 无论您使用2条或6条、当 PCI 总线上有两个 C64器件时、Linux lspci 的结果都是正确的。 枚举两个器件、主机端的2个或6个存储器窗口在起始地址和大小方面均已正确分配、不存在与 PCIBARnMSK 寄存器请求的重叠和匹配。

    此外、PCIBARnMIR 寄存器具有正确的值(主机分配的起始存储器)、因此我觉得您的驱动程序可以毫无问题地访问器件1或器件2存储器。  

    图8使用条匹配作为入站转换。 例如、将收入总线地址1280ABC 转换为 C64x 器件地址1080ABC。 因此、 如果 PCIBARnMSK = 0和 PCIBARn = 0、则任何 AD 都将匹配[n]= 1。 则输出地址将与输入1280ABC 相同。 您能否确认、仅使用一个 C64且只有两个条(其余条为0)时、没有虚假结果?

    在2个器件的情况下、正如您在 AD{31..0}上看到的伪数据、是否有一种简单的方法来了解此读取的来源? 是否从下一个地址开始? 还是来自未翻译的有效 SOC 地址? 您可以使用模式填充某些可疑的存储器区域、以查看是否有助于隔离数据来自何处。   

    此外、是否为两个器件对所有6个条进行编程(一个器件的每个条可能不同、而器件1和器件2条可能因实际使用情况而不同)、是该问题的权变措施?

    此致、Eric  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    有更新吗?

    此致、Eric