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.

[参考译文] RTOS/TMS320C6678:PCIe LLD 驱动程序示例

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/670256/rtos-tms320c6678-pcie-lld-driver-sample

器件型号:TMS320C6678

工具/软件:TI-RTOS

我有一个需要配置为根复合体(RC)的 DSP C6678、它将连接到配置为单个端点(EP)的 FPGA。 我 只有一个通道、它将配置为第1代(2.5GHz)。 DSP (RC)将始终启动对 FPGA (EP)的读/写传输。 FPGA 永远不会发出读取/写入请求。

 

我 尝试获取 pdk_c667x_2_0_0随附的示例程序、以便 c6678正常工作。  我已经编译了使用位于 ti/drv/pcie/example/sample/src/pcie_sample.c 中 PDK 中的驱动程序的示例代码 我已在 ti/drv/pcie/lib/c678/C66/ti.drv.pcie 中链接到驱动程序。c678.ae66。 在 main 函数 pcie ()中,代码到达函数 pcieWaitLinkUp(),在这里它会轮询,以查找 LTSSM 状态是否达到 LO (0x11)。 这可以在 DEBUG0 (0x2180 1728) LTSSM_STATE 字段中看到。

 

主要问题是 PCIe_readRegs 和 PCIe_writeRegs 的 PCIe LLD API 调用似乎无法正常工作。 当我尝试在函数调用 pcieLtssmCtrl()中禁用链路训练时使用示例,该函 数成功返回 PCIe_RET_OK 值,但我无法禁用或启用链路训练。 我在0x21800004中查看要更改的 LTSSM_EN 位。

 

C6678的示例工程是否配置了错误?

 

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

    RTOS 团队已收到通知。 他们将直接在此处发布反馈。

    共享您正在使用的 TI RTOS 版本。

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

    Yordan、您好、我有以下配置。

    Code Composer Studio 6.1.2

    SYS/BIOS 6.45.01.29

    XDCTools 3.32.00.06

    编译器8.1.2

    pdk_c667x_2_0_0

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

    我没有该版本的 PDK、但我有最新的 Processor SDK RTOS 4.2、我查看了代码、看起来不错。 PCIe_readRegs 和 PCIe_writeRegs 是我们用于所有寄存器的通用 API。 对于特定的 pcieLtssmCtrl(),使用的寄存器结构为 deviceCmd。

    我尝试使用此 API 调用 enable 和 distsm、并在0x2180_0004位0处进行检查、没有问题。 此外、我们针对每个版本都进行了 PCIe 系统测试、PCIe 链路始终出现、这意味着 API 可以正常工作。 我不知道您为什么会看到这个问题。 如果仍然看到问题、可以直接写入该寄存器、绕过 API。

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

    我同意 API 的工作原理、但我不确定为什么在使用 PCIe_writeRegs 时看不到任何寄存器的任何更改。 我从未使用 API 获得稳定的链路状态。 我在示例底部添加了一个名为 TestOutboundAddressTranslation()的函数,在这里我直接读取和写入寄存器。 使用这种方法、我可以 修改寄存器并获得稳定的链路状态。 我要附上 reference.e2e.ti.com/.../pciesample_2D00_3.zip 的代码

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

    "为什么在使用 PCIe_writeRegs 时看不到任何寄存器的任何更改。" === >在启用链路训练之前、此 API 写入了许多寄存器、例如配置入站、出站转换、启用错误报告。 (笑声) 您是否说在每次 API 写入后、所有这些都不会反映在寄存器视图中?

    请注意、对于任何此类测试、您无需连接到 PCIe EP。 启用 PCIe 电源域后、您应该能够执行此操作。 测试中是否使用了此 C6678 EVM?

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

     Eric、您好、回答正确。 每次 API 写入后、所有这些都不会反映在寄存器视图中。 这是在 C6678 EVM 和我的目标硬件上进行的测试、结果相同。 您可以在屏幕截图中看到、我尝试设置 obSize = PCIe_OB_SIZE_8MB、这意味着地址0x2180 0030处的寄存器应设置为值0x3。 它保持为零、并且 RetVal = PCIe_RET_OK。 我确定我的配置不正确、但我似乎无法找到它是什么。

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

    您好!

    我已编译 PCIe 测试示例并在6678 EVM 上进行了测试、我随函附上了测试结果、请稍候。 注意我在下面注释了以用于测试目的(在 EVM PCIe 上电后、API 应该能够对 PCIe 寄存器进行编程)

     while (!lock)

     {

      CSL_BootCfgGetPCIEPLLLock (&L);

     }

    [C66xx_0]

    *       PCIe 测试开始         *

    *         RC 模式           *

    (小部分

    版本号:0x02020008;字符串 PCIe LLD 修订版本:02.02.00.08:2017年3月29日:17:25:23

    电源域已启用。  您可能在没有重置设备的情况下重新运行(这是正常的)

    PCIe 加电。

    (小部分

    *       PCIe 测试开始         *

    *         RC 模式           *

    (小部分

    版本号:0x02020008;字符串 PCIe LLD 修订版本:02.02.00.08:2017年3月29日:17:25:23

    电源域已启用。  您可能在没有重置设备的情况下重新运行(这是正常的)

    PCIe 加电。

    PLL 已配置。

    已成功配置入站转换!

    已成功配置出站转换!

    配置 PHY 环回...

    正在开始链路训练...

    我的 PDK 是 C667x 2.0.5、您的版本和最新版本都不是。 C66x PDK 处于维护模式、无需更改 PCIe 驱动程序、因此我希望不同版本无关紧要。 在我们确定后续步骤之前、请尝试我的示例以查看您是否反映了寄存器。

    e2e.ti.com/.../PCIE_5F00_evmc6678_5F00_wSoCFile_5F00_C66BiosExampleProject.out

    此致、Eric