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.

[参考译文] TMDS64EVM:XFR2VBUS 数据传输卡滞

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1643448/tmds64evm-xfr2vbus-data-transfer-stuck

器件型号: TMDS64EVM

我在以下 TI 代码工程中遵循以太网接收代码:

SORTE_G:支持 200 字节输入数据和错误修复 — PRU-software-support-package/PRU-software-support-package - PRU 软件支持包

从 rx.asm 文件运行代码时、 我从 Tx L2 FIFO 中提取数据:

 XIN RXL2_BANK0_XID、&R2、32

然后使用传输检查的写入状态:

DMA:
 XIN 0x62、&R20、1
 qbeq DMA、R20、1

然后尝试使用 xfr2vbus 命令将其发送到我的 RAM 缓冲区:

 LDI R10、0x00000200

 XOUT 0x62、&R2、32

首次执行此代码时、写入状态检查显示为“IDLE“、因此会立即超过条件检查。 但是、数据绝不会显示在存储在 R10 中的地址中。

第二次、R20 中的状态存储卡在 1、表示传输处于活动状态、但绝不会清除回 0。 因此、原始传输无效(目标地址中没有数据)、XFR 操作受阻、无法再次访问。 如何调试其原因?

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

    您好、Seth。

    我将快速将您的代码与中的示例代码进行比较
    https://git.ti.com/cgit/pru-software-support-package/pru-software-support-package/tree/examples/am243x/SORTE_G/SORTE_g_master_AM243x/xfr2vbus_widget.inc?id=d09576fa217feb446c53a95fed65b2f7db3130aa

    XOUT 命令需要传输数据和目标地址。 您的“XOUT“命令仅 通过宽边接口将总共 32 个字节从 PRU 内核传输到 XFR2VBUS 加速器(即存储在 R2-R9 中的 32 个字节数据)。 但实际上、您需要发送 40 个字节也要发送地址(即,从 R2-R11 复制数据)。

    如下所示:

    ;issue a write of 32 bytes from address _lo|_hi, one shot
    ; data in r2-r9
    ; clobbers r10,r11
    XFR2VBUS_WRITE32 .macro  xid,addr_lo,addr_hi
        mov r10,addr_lo
        ldi r11,addr_hi
        xout xid,&r2,40
        .endm
    

    此致、

    Nick

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

    此操作的目标地址是否有任何限制? 对代码的这种更改修复了 XFR 命令卡在活动状态中、但完成操作后、目标目标地址中没有显示数据。 当尝试写入共享存储器区域 (0x9_0100) 或本地 PRU RAM (0x0200) 时、会发生这种情况。 这是由 Memory Browser 中的所有 0 观察到的、并在写入完成后尝试在代码中读回数据。

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

    您需要将全局地址加载到 R10(请参阅 TRM 表 2-1。 MAIN 域存储器映射)

    ICSS_G0 数据 RAM:0x3000 0000

    ICSS_G0 共享 RAM:0x3001 0000

    -托马斯

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

    有关为何需要全局地址的更多信息、请参阅此常见问题解答中的总线图:
    【常见问题解答】PRU 仲裁延迟 

    您将看到 XFR2VBUS 实例连接到 外部访问路径。 这是使用全局地址时所采用的路径。

    但是、这些加速器未连接到 内部访问路径。 因此、它们无法使用 PRU 本地地址。

    请注意、XFR2VBUS 仍然能够访问 PRU 子系统内的资源。 XFR2VBUS 读取或写入操作所遵循的路径是 、读取/写入需要退出 PRU 子系统、进入系统总线、然后通过 内部访问路径 图中的“入站 VBUSP“返回到 PRU 子系统。 这意味着、对于 XFR2VBUS、PRU 子系统中本地资源的读取/写入延迟将比使用本地地址直接进行读取/写入的 PRU 内核更长。 (我预计使用系统地址的 PRU 内核需要更长的时间、就像 XFR2VBUS 实例一样)。但是、PRU 内核将读取/写入转移到加速器、因此它消耗的 PRU 时钟周期更少、这会释放 PRU 内核以在内核等待读取/写入完成时执行其他指令。

    有关 XFR2VBUS 的更多信息、 请参阅 更新的 PRU Academy 页面“XFR2VBUS(传输到 VBUS)“:
    https://dev.ti.com/tirex/explore/node?isTheia=false&node=A__AYpwfe.o-fVoSO1rkaT80g__AM64-ACADEMY__WI1KRXP__LATEST 

    此致、

    Nick

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

    Xf2vbus 命令有时会失败的原因是否有? 我可以看到它有时会起作用、但在其他情况下、它将永远停止检查 R20 寄存器、先执行多次迭代后状态始终保持在 1(活动)。 附加了卡在代码循环中时的寄存器屏幕截图:

    XIN RXL2_BANK0_XID,&R2, 32;从 bank1 捕获数据字

    DMA:
    Xin 0x62,&R20, 1;检查 xf2vbus 写入命令的状态
    qbeq dma、r20、1;循环(如果处于活动状态)

    XOUT XFR2VBUS_WR_XID、&R2、40;写入共享内存缓冲区(32 字节数据、8 字节 DEST 地址)

    我卡在“dma“循环中。