主题中讨论的其他器件: DRA821、 TUSB8041、 SK-AM69
工具/软件:
Champ、
客户要求赞扬以启用以下测试项目。
我假设这是测试数据包和 USB 眼图。
我们有 u-boot 或 Linux 内核中的测试模式指令吗?
|
1.03. |
USB |
|
|
1.03.01. |
USB_USB-Speed Host_High |
|
|
1.03.02. |
USB_DROP |
|
|
1.03.03. |
USB3.2 Gen1 |
Br、Rich
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.
工具/软件:
Champ、
客户要求赞扬以启用以下测试项目。
我假设这是测试数据包和 USB 眼图。
我们有 u-boot 或 Linux 内核中的测试模式指令吗?
|
1.03. |
USB |
|
|
1.03.01. |
USB_USB-Speed Host_High |
|
|
1.03.02. |
USB_DROP |
|
|
1.03.03. |
USB3.2 Gen1 |
Br、Rich
从 IP 供应商处收到:
"范围需要向控制器发送 LFPS.Ping 来切换合规模式。
通常、支持 USB 合规性程序的范围提供了自动运行整个 USB 合规性程序的工具。
在这种情况下、示波器控制发送 LFPS.Ping 并对每个合规模式进行适当的检查。
如果时钟启用了寄存器访问、则控制器不会锁定寄存器访问。"
另外、想知道您是否按照 Robert 的建议修改了电路板? Shreyas,
您是否分别使用 lockkey0和 lockey1引用下面的 kick0和 kick1?
锁定键0 0x68EF3490
锁定键1 0xD172BC5A
我发现 key0和 key1值与您在这里建议的值不同。
您能否提供完整的推荐设置以启用合规性测试?
•Key0 = 83E7 0B13h
•KEY1 = 95A4 F1E0h
•已锁定=启用写保护
•已解锁=已禁用写保护

Br、Rich
Shreyas,
我随附的图片来自 AM67x TRM 第12.7.3.3.3.2.1章
Lockkey0和 Lockkey1 似乎 适用于 PLL 寄存器。
锁定键0 0x68EF3490
锁定键1 0xD172BC5A
所附图片中是否有 MMR_CTRL 寄存器的密钥?
我们需要明确的推荐指令和顺序(使用脚本会很好)来在 Linux 中更改寄存器值。
我们无法长时间在 AM67x 上进行 USB 3.0合规性测试、因此我们正在寻找一种方法来实现该目标。
AM67x USB3.0合规性测试模式在内部实现的确切方式是什么?
我们希望帮助我们的全球客户能够在自己的电路板上进入合规性测试模式。
我们可以像 USB 2.0一样在 Linux 中简单推荐吗?
Br、Rich
Shreyas,
Key0和 Key1用于 CTRL_MMR 寄存器、我认为我们用于合规性测试的所有寄存器都属于 CTRL_MMR 寄存器。
对于通过 CCS 二进制文件进行的 USB 3.0合规性测试、您是在 AM67x EVM 或 Beagle AI 板上运行此测试吗?
AM67x EVM 上的 AM67x 和 USB 3.0 Type-A 连接器之间有 USB 3.0集线器。 测试是否可以在 AM67x EVM 上运行?
您能否为我提供二进制文件、以便在 AM67x EVM 上运行相同的测试?
Br、Rich
Shreyas,
我发现在引导至 Linux 时、CTRL_MMR0寄存器已填充您在下面列出的密钥。
相关控制寄存器仍然无法按预期更改。
锁定键0 0x68EF3490
锁定键1 0xD172BC5A
要解锁寄存器、请将这些值写入 Kick0和 Kick 1寄存器。
root@am67-sk:~# devmem2 0x00101008
/dev/mem 已打开。
映射到地址0xffac1f4000的存储器。
读取地址:0x00101008 (0xffffac1f4008):0x68EF3491
root@am67-sk:~# devmem2 0x0010100C
/dev/mem 已打开。
映射到地址0xffffb369f000的存储器。
在地址0x0010100C (0xffffb369f00c)处读取:0xD172BC5A
Br、Rich
您好 Rich、
我们在专门构建的板上进行了 USB 合规性测试内部测试、并使用 CCS/JTAG 进行测试。
我附加了2个二进制文件、您可以在 Serdes0 Lane0上生成 LFPS 和 CP1以符合 USB 标准。
如果您可以试用一下、告诉我吗?
e2e.ti.com/.../K3_5F00_J7AEN_5F00_BER_5F00_USB_5F00_LFPS_5F00_S0L0.out
e2e.ti.com/.../USB3_5F00_S0L0_5F00_UDD_5F00_CP1_5F00_INTSSC.out
丰富、
我想在与同事交谈后再次回顾此 USB3.0合规性流程。
最初、我提供了如下遵约程序:
0x31000420h、写入0x0A010340 -该寄存器用于 USB0 (仅具有 USB2.0)
对于 USB1、您需要修改0x31210490寄存器。
如前所述、您需要更改这3个字段。
在主机控制器中启用合规模式
-写入 USB3 PORTSC 寄存器设置以下位: - PP [9] - LWS [16] - PLS [8:5]= 0xA
您不需要对寄存器进行任何解锁。
devmem2 0x31210490、具有0x0A010340h。
请尝试以上操作并告诉我。
另外、我想确认原理图中现在是否已将 USB1连接到 SERDES 引脚、对吗? 之前、USB0连接到 SERDES。
它是由客户开发的 Linux 还是来自 SDK? 如果我需要复制 PCIe 或其他版本、我需要知道是否使用了任何特定的版本。
如果还有其他问题、我也会告诉您。
Shreyas,
这是我一直询问的 USB3合规性测试问题。
对于 USB3合规性测试、应该只有 USB 超高速信号、不应有 USB2.0 DP/DM 信号。
为什么我们需要配置仅支持 USB2.0的 USB0或 USB1?
下一个是 USB3需要与 USB1绑定的限制、但与 不能 USB 外设启动。
在软件方面、USB1 + SERDES0 (USB3.0)是否有任何设置要求?
USB1 + SERDES1是否可以用作 USB3.0?
客户原始原理图使用 USB0 + SERDES0和蓝线 USB1 + SERDES0。 使用最新的 SDK 10.1。
我们还想知道使用 USB1 + SERDES0需要更改哪些特定配置、或者它与 EVM 相同、但仅 USB3.0连接到 USB 3.0集线器。
我在这里总结了测试建议、只是在下面写一个建议、以便实现
写入 USB3 PORTSC 寄存器设置以下位: - PP [9] - LWS [16]- PLS [8:5]= 0xA
devmem2 0x31210490、带 0x0A010340
Br、Rich
Shreyas,
在寄存器中、USB0部分中的所有寄存器显示 USB2SS、USB1中的所有寄存器显示 USB3p0SS。
我们将尝试使用客户电路板。
USB0
3100 0420h -> USB2SS_PORT_XHCI_PORT_20_PORTSC_20
3100 0434h --> USB2SS_PORT_XHCI_PORT_30_PORTPMSC_30 (这仅查找 PM)
USB1
3121 0480h --> usb3p0ss_ctrl_xhci_PORTSC1 USB2
3121 0490h --> usb3p0ss_ctrl_xhci_PORTSC1 USB3
Br、Rich
您好 Rich、
Shreyas 和我在实验室做了一些实验。 我们尚未能够进入 USB 的合规性模式、但会共享您的更新。
我们沿着2条不同的路径来调试问题:
Bottomline 是 USB 合规模式问题正在进行中、但上面是我们所取得的进展。
此致、
Takuma
Takuma
我尝试了 AM67x SK EVM 上的 devmem2 0x31210490 w 0x0A010340、并获得了与您获得相同的结果。
a.在 Linux 下、运行"devmem2 0x31210490 w 0x0A010340h"以设置 PP、LWS 和 PLS 字段。
b.寄存器已部分更新(也即、最高有效位0x0A 部分已更新、但最低有效位0x10340未更新)
root@am67-sk:~# lsusb
Bus 001 Device 001:ID 1d6b:0002 Linux Foundation 2.0根集线器
Bus 001 Device 002:ID 0451:8142 Texas Instruments、Inc. TUSB8041 4端口集线器
Bus 002 Device 001:ID 1d6b:0003 Linux Foundation 3.0根集线器
Bus 002 Device 002:ID 0451:8140 Texas Instruments、Inc. TUSB8041 4端口集线器
Root@am67-sk:~# devmem2 0x31210490
/dev/mem 已打开。
映射到地址0xffff9162d000的存储器。
读取地址0x31210490 (0xff9162d490):0x00001203
Root@am67-sk:~# devmem2 0x31210490、带0x0A010340
/dev/mem 已打开。
映射到的存储器地址0xff7f7d8000。
读取地址0x31210490 (0xff7f7d8490):0x00001203
写入地址0x31210490 (0xffff7f7d8490):0x0A010340、回读0x0A010340
Root@am67-sk:~# devmem2 0x31210490
/dev/mem 已打开。
映射到地址0xffffb2823000的存储器。
读取地址0x31210490 (0xffb2823490):0x0A001203
root@am67-sk:~#在 Linux 下运行"devmem2.
Br、Rich
Takuma
我尝试了 AM69x SK EVM、观察到了相同的结果。
我想这是否是因为 USB 控制器后面还有一个 USB 集线器。
Root@AM69A:/opt/edgeai-gst-apps
root@AM69A:/opt/edgeai-gst-apps devmem2 0x06010490
/dev/mem 已打开。
映射到地址0xffffbb83f000的存储器。
读取地址0x06010490 (0xffffbb83f490):0x00001203
root@AM69A:/opt/edgeai-gst-apps devmem2 0x06010490 w 0x0a010340
/dev/mem 已打开。
存储器映射到地址0xffffbee2c000。
读取地址0x06010490 (0xffbee2c490):0x00001203
写入地址0x06010490 (0xffffbee2c490):0x0A010340、回读0x0A010340
root@AM69A:/opt/edgeai-gst-apps devmem2 0x06010490
/dev/mem 已打开。
映射到地址0xff9d002000的存储器。
在地址0x06010490 (0xff9d002490)处读取:0x0A001203
Root@AM69A:/opt/edgeai-gst-apps
Br、Rich
Shreyas,
感谢您提供的指南并验证了 J7AHP (SK-AM69)、并确认了在 DRA821 (J7200) EVM 上同样的过程工作原理。
这两个芯片使用相同的 USB3 IP 和相同的寄存器集来使用。
我今天已经通过 devmem2推荐并确认了实验室中的 DRA821 EVM。
对于 AM67x、您可以指定是否 devmem2 0x31210490、带 0x0A010340 CP0的正确寄存器是什么?
其次、下一个进入 CP1的寄存器是什么?
devmem2 0x06010490 w 0x0a010340
devmem2 0x0601812c、具有0x18230c10 (CP1模式)
第三、我今天不检查回波合规性模式、但它看起来只能启用 CP0、但不确定如何切换到 CP1。
是否继续推荐从 CP0切换到 CP1?
Br、Rich
---------------------------------------------------------------------------------------------------------------------------------------------------------------
J7AHP:
主机测试装置板或 USB 3.1合规性负载板程序。
使用 devmem2命令进入兼容性模式:
确保使用 DIP 开关将 EVM 设置为 USB 主机模式–有关开关设置、请参阅 EVM 指南。
EVM 未连接到主机测试装置(Type-C 至 TYPEA 连接器保留插入 TYC 端口)
启动 Linux
"evmem2 0x06010490 w 0x0a010340"‘D
将主机测试装置连接到 EVM
("evmem2 0x06010490"‘D应读回0x0a000340、以确保进入合规性模式)
观察结果:
CP0模式持续–测量 USB 测试套件上的 CP0
对于 CP1:
断开并重新启动 EVM
进入合规模式:
devmem2 0x06010490 w 0x0a010340
devmem2 0x0601812c、具有0x18230c10 (CP1模式)
将测试装置重新连接到 EVM
观察结果:
CP1模式(在奈奎斯特频率2.5GHz 时钟下)、但必须在 SERDES 内部启用 SSC。 从 CP0切换到 CP1 (无 BERT 控制 Ping.LFPS)。 USB 控制器未启用 SSC。 在 USB 测试套件上测量。
回波符合性模式:
EVM 未连接到测试装置。
启动 Linux
回波顺应性>/sys/kernel/debug/usb/xhci/xhci-hcd.x.auto/ports/port02/portsc–x =在../usb/xhci 之后 它会自动填充。
检查合规性命令:Cat /sys/kernel/debug/usb/xhci/xhci-hcd.x.auto/ports/port02/portsc
连接测试装置
观察结果:
LFPS (和 CP0)模式重复突发
使用 USB 测试套件测量 LFPS。
您好 Shreyas & Rich、
很抱歉、我没有密切关注此主题、也不知道您目前在该合规性测试工作中的确切位置、但我不确定以下注意事项是否会对您有所帮助。
早在2021年、我们就在 AM64x 上进行了 USB3.0合规性测试、下面是我在计算机上看到的关于这项工作的一些注释。
1.当使用命令"echo compliance >/..../portsc 进入合规性模式时、xHCI 驱动程序会检查 HCC2_CTC 是否已启用、然后再进入合规性模式。 请参见内核驱动程序/usb/host/xhci-debugfs.c 函数 xhci_port_write ()中的以下代码:
if (!strncmp(buf, "compliance", 10)) {
/* If CTC is clear, compliance is enabled by default */
if (!HCC2_CTC(xhci->hcc_params2))
return count;
在 AM64x 上、由于 drivers/usb/host/xhci.c、函数 xhci_gen_setup()、变量 xhci->hcc_pams2未填充、因为 AM64x 上 xhci 版本为 v1.00、但它确实具有 hcc_pams2:
if (xhci->hci_version > 0x100)
xhci->hcc_params2 = readl(&xhci->cap_regs->hcc_params2);
因此、我们添加了以下破解以确保 AM64x USB 可以进入合规性模式:
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
index a8d97e23f601..5579d50158e1 100644
--- a/drivers/usb/host/xhci.c
+++ b/drivers/usb/host/xhci.c
@@ -5234,7 +5234,7 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks)
xhci->hcc_params = readl(&xhci->cap_regs->hc_capbase);
xhci->hci_version = HC_VERSION(xhci->hcc_params);
xhci->hcc_params = readl(&xhci->cap_regs->hcc_params);
- if (xhci->hci_version > 0x100)
+ if (xhci->hci_version >= 0x100)
xhci->hcc_params2 = readl(&xhci->cap_regs->hcc_params2);
2.内核器件树绑定 doc Documentation/devicetree/bindings/phy/cadence cadence-Sierra .yaml 和 phy-cadence-torrent.yaml 具有:
cdns,ssc-mode:
description:
Specifies the Spread Spectrum Clocking mode used. It can be NO_SSC,
EXTERNAL_SSC or INTERNAL_SSC.
因此、我们使用以下内核器件树补丁来在 AM64x USB 上启用 SSC:
diff --git a/arch/arm64/boot/dts/ti/k3-am642-evm.dts b/arch/arm64/boot/dts/ti/k3-am642-evm.dts
index a1fc366df82e..1844c2f7cc4f 100644
--- a/arch/arm64/boot/dts/ti/k3-am642-evm.dts
+++ b/arch/arm64/boot/dts/ti/k3-am642-evm.dts
@@ -702,6 +702,7 @@ serdes0_usb_link: phy@0 {
#phy-cells = <0>;
cdns,phy-type = <PHY_TYPE_USB3>;
resets = <&serdes_wiz0 1>;
+ cdns,ssc-mode = <TORRENT_SERDES_INTERNAL_SSC>;
};
};BIN、
感谢分享。
这些更像是驱动程序实现、我想向用户询问需要使用什么订单和建议/说明来完成客户实验室的合规性测试。
对于回波合规性模式、假设以下步骤可以启动 CP0模式、如何在 CP0之后切换到 CP1?
是否要设置类似的注释?
Br、Rich
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
回波符合性模式:
EVM 未连接到测试装置。
启动 Linux
回波顺应性>/sys/kernel/debug/usb/xhci/xhci-hcd.x.auto/ports/port02/portsc–x =在../usb/xhci 之后 它会自动填充。
检查合规性命令:Cat /sys/kernel/debug/usb/xhci/xhci-hcd.x.auto/ports/port02/portsc
连接测试装置
观察结果:
LFPS (和 CP0)模式重复突发
使用 USB 测试套件测量 LFPS。
尊敬的 Bin:
感谢您提供的有关 Linux 驱动程序设置的大量信息。
看起来串行器/解串器 PHY 也设置为启用 SSC。 SSC 是在合规模式下始终启用一次、还是仅在 TX 上输出 CP1模式时启用? 因为 CP1模式需要启用 SSC、而不需要启用 CP0模式。 看起来如果启用了 SSC、那么所有 TX 输出都上都将有 SSC?
丰富、
对于 CP1模式、 要启用 CP1模式、请在进入合规模式后进入该模式。
devmem2 0x31210490 w 0x0a010340 -合规模式
devmem2 0x3121812c、带0x18230c10 -输出奈奎斯特频率时钟信号(2.5GHz -CP1模式)