主题中讨论的其他器件: DP83869
工具与软件:
您好、E2E 团队:
am6442 SR2 USB 控制器出现了问题。 如果我们通过设置脚本配置 USB 器件、控制器有时会导致系统挂起。 只有硬下电上电有助于重置系统。
am6442系统:
- TI am6442 SoC SR2
- Linux 6.1.20+RT
- Sysfw: v09.00.07
- 引导器件:eMMC
测试设置:
定制 am6442板通过 USB2.0连接到 Win10 PC。 PC 尝试通过 RNDIS 以太网设备建立 SSH 连接。 成功建立连接后、Windows 系统会向器件发送重新启动命令。 关闭并重新打开电源后、Windows 系统尝试通过 USB RNDIS 再次连接。 测试过程中不会移除 USB 电缆连接、而是在进行孔测试时连接 Windows 10 PC 和器件。 系统挂起不可重现,有时需要7次重启,有时超过500次。
以下脚本使用 CDC-ECM 和 RNDIS 在 Linux 初始化时将 USB 控制器配置为器件。 控制器在 Linux 内核的器件树中配置为"OTG"。
脚本摘要:
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#配置1适用于 CDC
mkdir -p configs/C.1
echo "${NET_USB_ATTR}"> configs/C.1/bmAttributes
echo "${NET_USB_PWR}"> configs/C.1/MaxPower
mkdir -p "configs/c.1/strings/${CONFIG_USB_LANGID}"
echo "CDC">"configs/C.1/strings/${CONFIG_USB_LANGID}/CONFIGURATION"
mkdir -p 函数/ ecm.usb0
mkdir -p configs/c.2.
echo "${NET_USB_ATTR}"> configs/C.2/bmAttributes
echo "${NET_USB_PWR}"> configs/C.2/MaxPower
mkdir -p "configs/c.2/strings/${CONFIG_USB_LANGID}"
echo "RNDIS">"configs/c.2/strings/${CONFIG_USB_LANGID}/CONFIGURATION "
mkdir -p 函数/ rndis.usb0
#在 Windows 7和更高版本上,默认情况下将使用 RNDIS 5.1驱动程序。
#但它不是很好的工作。 RNDIS 6.0驱动程序工作得更好。 In
#为了使该驱动程序自动加载,我们必须使用
# Microsoft 特定的 USB 扩展。
echo "1"> os_desc/use
echo "${MS_VENDOR_CODE}"> os_desc/b_vendor_code
echo "${ms_qw_sign}"> os_desc/qw_sign
init_mac_leases 3.
本地 host_mac;host_mac=$(get_mac "${NET_USB_INTERFACE}""${NET_USB_ConfigFile}""host_")
log_info "使用 host_mac ${host_mac}和序列号${serial_number}初始化接口${NET_USB_INTERFACE}的 USB net "
echo "${host_mac}"> functions/rndis.usb0/host_addr
本地 Mac;mac=$(get_mac "${NET_USB_INTERFACE}""${NET_USB_ConfigFile}")
log_info "使用 IP ${NET_USB_IP}和 MAC ${Mac}设置接口${NET_USB_INTERFACE}"
echo "${Mac}"> Functions/ecm.usb0/dev_addr
echo "${Mac}"> Functions/ecm.usb0/host_addr
echo "${Mac}"> Functions/rndis.usb0/dev_addr
echo "${Mac}"> Functions/rndis.usb0/host_addr
echo "${MS_COMPAT_ID}"> functions/rndis.usb0/os_desc/interface.rndis/compatible_id
echo "${MS_SUBCOMPAT_ID}"> functions/rndis.usb0/os_desc/interface.rndis/sub_compatible_id
ln -s functions/ecm.usb0 configs/C.1
LN -s 函数/ rndis.usb0 configs/C.2
ln -s configs/C.2 os_desc
#添加适当的 USB 设备到小工具( AM64x 特定)
echo "f400000.usb"> UDC"
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
出现"echo "f400000.usb"> UDC"后、系统挂起。
在系统挂起的情况下、Linux 停止工作、无法通过 UART、以太网和 USB 进行通信。
我们检查了 am6442的芯片勘误表、添加了"i2409—USB:USB2 PHY 由于短暂暂停而锁定"的 bugfix、很遗憾该问题没有解决。
阅读 Cadence 器件勘误表(https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/tree/drivers/usb/cdns3/cdns3-gadget.c?h=ti-rt-linux-6.1.y-cicd)、
我们 从 cdns-plat.c 驱动程序代码中删除了电源管理部分:
遗憾的是、这对于在初始化时卡住没有帮助。 移除 PM 任务可让系统引导、但 USB 设备上没有通信、通过脚本重新配置设备会导致系统挂起。
我们发现这个 E2E 帖子可能与我们的问题相关:
此致、
Stefan