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.

[参考译文] AM62A3:使用 devmem2寄存器写入启用 USB 测试模式

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1416661/am62a3-enabling-usb-testmode-with-devmem2-register-writes

器件型号:AM62A3

工具与软件:

您好!

我们的一个客户尝试在 xhci0实例上针对 AM62A USB 启用 USB 测试模式。

他们当前正在使用这些命令

 am62ax xhci0测试数据包                                                         
 ==============                                                         
 devmem2 0x31000420 w 0xA0              # PORTSC、PP='0'                        
 devmem2 0x31000020 w 0x4               # USBCMD、清除位0 (运行/停止)         
 devmem2 0x31000424 w 0x40000000        # POERPMSC、设置测试模式                

 am62ax xhci1测试数据包                                                         
 ==============                                                         
 devmem2 0x31100420 w 0xA0                                                       
 devmem2 0x31100020 w 0x4                                                        
 devmem2 0x31100424 w 0x40000000

但是、无法以某种方式访问寄存器0x31000424之一。

echo host > /sys/kernel/debug/usb/31000000.usb/mode
[ 1002.887632] dwc3 31000000.usb:请求00000000249a968f 没有排队到 ep0out
[ 1002.897985] Android_work:已发送 uevent usb_state=已断开连接
[ 1002.998541] xhci-hcd xhci-hcd.2.auto: xHCI 主机控制器
[ 1002.998569] xhci-hcd xhci-hcd.2.auto:已注册新的 USB 总线、已分配总线编号1
[ 1002.998708] xhci-hcd xhci-hcd.2.auto: usb3 root hub 没有端口
[ 1002.998715] xhci-hcd xhci-hcd.2.auto: HCC 参数0x0258fe6d HCI 版本0x110 quirks 0x0000008000010010
[ 1002.998756] xhci-hcd xhci-hcd.2.auto: irq 264、io mem 0x31000000
[ 1002.999596] HUB 1-0:1.0:找到 USB HUB
[ 1002.999638]集线器1-0:1.0:检测到1个端口

第一个寄存器

devmem2 0x31000420 w 0xA0
devmem2 0x31000424 w 0x/dev/mem 已打开。
存储器映射到地址0xff83e14000。
地址0x31000420 (0xffffff83e14420)处的值:0xA0002A0
写入0xA0;读回0xA0

第二个寄存器
devmem2 0x31000020 w 0x4

/dev/mem 打开。
存储器映射在地址0xff962be000。
地址0x31000020 (0xffffff962be020)上的值:0x5
写入0x4;读回0x4

第三个寄存器

devmem2 0x31000424 w 0x40000000
/dev/mem 打开。
[1010.633870] audit:type=1701 audit (1016.340:4):auid=4294967295 uid=0 gid=0 ses=4294967295 pid=483 comm="devmem2" exe="/usr/bin/devmem2 sig =7 res=1
已在地址0xff9a9aa000处映射存储器。
总线错误(已转储内核)

问题不仅是写入该地址,甚至读取,它崩溃:

devmem2 0x31000424
/dev/mem 打开。
[1421.145698] audit : type=1701 audit (1426.852:5): auid=4294967295 uid=0 gid=0 ses=4294967295 pid=493 comm="devmem2" exe=/usr/bin/devmem2 sig =7 res=1
在地址0xff9f620000处映射存储器。
总线错误(已转储内核)

请告知我们问题可能出在哪里。

谢谢!

——Gunter

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

    尊敬的 Gunter:

    Chen Si 说:
    echo host > /sys/kernel/debug/usb/31000000.usb/mode

    我从不使用这种推荐方法将 USB 端口配置为主机模式、也不知道它到底在做什么。

    您能否修改内核设备树以在&usb0节点中设置 dr_mode ="host"、然后运行3个 devmem2命令? 内核 devicetre 中的此 dr_mode 设置将 USB0端口配置为主机模式。

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

    刘斌、您好!

    我也尝试过。
    结果相同、从器件树中强制进入主机模式。 访问最后一个寄存器会触发一个异常;根本无法访问存储器。
    设备树配置:
     
           usbss0:dwc3-usb@f900000{
                   兼容="ti、am62-usb";
                   REG =<0x00 0x0f900000 0x00 0x800>
                         <0x00 0x0f908000 0x00 0x400>;
                   时钟=<&K3_CLKS 161 3>;
                   时钟名称="ref";
                   TI、SYSCON-PHY-PLL-REFCLK =<&usb0_phy_ctrl 0x0>;
                   #address-Cells =<2>;
                   #size-cells =<2>;
                   电源域=<&K3_PDS 178 TI_SCI_PD_Exclusive>;
                   范围;
                   状态="正常";

                   USB0:USB@31000000 {
                           Compatible ="SNPs、dwc3";
                           REG =<0x00 0x31000000 0x00 0x50000>;
                           中断= 、/* IRQ.0 */
                                        ;/* IRQ.0 */
                           中断名称="主机"、"外设";
                           最大速度="高速";
                           //dr_mode ="OTG";
                            DR_MODE ="主机";
                           状态="正常";
                   };
           };

     
    测试:
     
    Cat /sys/firmware/devicetree/base/bus@f0000/Dwc3-usb@f900000/usb@31000000/dr_mode
    主机
    devmem 不会执行任何特殊操作:
    MAP_BASE = mmap (0、MAP_SIZE、PROT_READ | PROT_WRITE、MAP_SHARED、FD、 Target &~map_mask);
    READ_RESULT =*((unsigned long *) vt_addr);
    该寄存器是否存在?
    0x31000424
    可能对于此平台、 PMSC 寄存器位于不同的偏移量/组中?
    Armando
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Armando:

    我刚刚在具有 Processor SDK v9.1 Linux 映像的 SK-AM62A EVM 上尝试了3条 devmem2命令、但我没有看到此总线错误问题。

    Chen Si 说:
    echo host > /sys/kernel/debug/usb/31000000.usb/mode
    [ 1002.887632] dwc3 31000000.usb:请求00000000249a968f 没有排队到 ep0out
    [ 1002.897985] android_work:已发送 uevent usb_state=disconnected

    我在内核源代码中找不到 android_work。 您使用什么内核?

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

    您好、Bin Liu

    我们使用的 TI Linux 内核基于:

    版本= 6
    PATCHLEVEL = 1
    SUBLEVEL = 80
    EXTRAVERSION =
    NAME =咖喱拉面

    您看到的日志来自 Android 的 adb (drivers/usbgadget/configfs.c)

    TI 的内核不支持 ADB;因此我添加了一些更改来支持 ADB。

    在第二次测试中、我执行了强制 USB 模式作为主机;因此 ADB 小工具不应产生干扰。 您认为我应该删除 USB 小工具内核 defconfigs 吗?

    Armando

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

    尊敬的 Armando:

    我想不出为什么在前2次写入通过时第三次寄存器写入会失败、因此值得尝试仅使用 SDK 中的内核 defconfig、而不进行任何更改、这与我所做的操作接近。

    我还注意到 devmem2命令的输出格式与我的不同、因此您似乎没有使用 SDK 中提供的 Linux rootfs。 因此、可能还需要切换 SDK rootfs 以查看 devmem2程序是否起作用。

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

    bin Liu

    我看,我更倾向于相信 devmem2是这里的罪魁祸首。 我来测试一下。

    谢谢

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

    您好、Bin Liu

    我从 SDK  10.00.00.08获得了 devmem2工具(以及需要的运行时库)、然后3个寄存器开始读取并运行

    devmem2 0x31000420 w 0xA0
    /dev/mem 打开。
    存储器映射在地址0xffa24ac000。
    在地址0x31000420 (0xffa24ac420)上读取:0x0A0002A0
    在地址0x31000420 (0xffa24ac420)处写入:0x000000A0、回读0x000000A0

    devmem2 0x31000020 w 0x4
    /dev/mem 打开。
    已映射地址0xffa17bc000处的存储器。
    在地址0x31000020 (0xffffff17bc020)上进行读取:0x00000005
    在地址0x31000020 (0xffffff17bc020)上进行写入:0x00000004、回读0x00000004

    devmem2 0x31000424 w 0x40000000
    /dev/mem 打开。
    内存映射在地址0xFFffbcbcd000。
    在地址0x31000424 (0xFFffbcbcd424)上读取:0x00000000
    在地址0x31000424 (0xFFffbcbcd424)上写入:0x40000000、回读0x40000000

    您是否知道 TI 的 SDK 从何处获得 devtool2源代码? 我需要在我们的环境中构建它

    内核更改不会影响这一点。 这只是你们得到的特定 devmem2风格。

    谢谢

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

    尊敬的 Armando:

    很高兴看到问题的根源已确定。 以下链接显示了 GitHub 上 devmem2的源。

    https://git.openembedded.org/meta-openembedded/tree/meta-oe/recipes-support/devmem2/devmem2_2.0.bb?h=master