在USB2.0 spec 中规定了USB必须支持以下几种模式的Test Mode

由于usb 2.0 的接口可能是下面几种方式接出来的

在嵌入式设备上测试时发现,虽有几种方法,但是总会有设置testmode失败的情况。

方法1:uboot 下 usb 命令

uboot # usb
usb - USB sub-systemUsage:
usb start - start (scan) USB controller
usb reset - reset (rescan) USB controller
usb stop [f] - stop USB [f]=force stop
usb tree - show USB device tree
usb info [dev] - show available USB devices
usb test [dev] [port] [mode] - set USB 2.0 test mode(specify port 0 to indicate the device's upstream port)Available modes: J, K, S[E0_NAK], P[acket], F[orce_Enable]
usb storage - show details of USB storage devices
usb dev [dev] - show or set current USB storage device
usb part [dev] - print partition table of one or all USB storage    devices
usb read addr blk# cnt - read `cnt' blocks starting at block `blk#'to memory address `addr'
usb write addr blk# cnt - write `cnt' blocks starting at block `blk#'from memory address `addr'

方法如下:

cpu usb1 接出来的hub 的两个port
# usb start; usb test 1 1 P
# usb start; usb test 1 2 Pcpu usb2 直接出来的port
# usb start; usb test 2 1 P

这种方法,在我的两种测试环境下, cpu usb控制器 直接出来的port , pcie 转出来的 usb 接口 ,虽然在 uboot 下 usb 功能都正常 , 可以正常读取U盘,但是就是设置不成功, 其中 dev 和 port 两个参数,可能的都试过,都没有设置成功。

uboot # usb test 1 1 P
Setting Test_Packet mode on downstream facing port 1...
The request port(1024) exceeds maximum port number
Test mode successfully set. Use 'usb start' to return to normal operation.

只有 usb hub 出来的 两个port 设置成功了。

uboot # usb start; usb test 1 1 P
uboot # usb start; usb test 1 2 P
Setting Test_Packet mode on downstream facing port 1...
Test mode successfully set. Use 'usb start' to return to normal operation.

方法2:linux 下 利用 libusb 来修改 usb port test feature

参考代码 :testmode

这种方法,适合有 真正 usb id 的 hub 来测试。

下面就是 pcie 转 usb hub 的 id ,这个id是 linux 通用的。

[root@localhost ~]# lspci
08:00.0 USB controller: Renesas Technology Corp. uPD720201 USB 3.0 Host Controller (rev 03)[root@localhost ~]# lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

第一行是 3.0的,第二行是2.0的,这个 hub 下有两个port

如果接入的是 usb3.0的设备,就会挂在 bus2 上,

如果接入的是 usb2.0的设备,就会挂在 bus1 上。

下面是NXP LS104x CPU 直接出来的port ,还有 cpu usb host 接出来的hub

root@localhost:~# lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 006 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 005 Device 002: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

有单独usb id 的设备,可以测试成功,D+ D- 有正常波形。

root@localhost:~/testmode# ./testmode -D "0424:2514" -t test_packet
Test "test_packet":        success

但是通用id,设置失败。

方法3:修改kernel , 利用 sysfs ,添加一个节点,来修改testmode

需要修改内核,可参考 Linux USB Test Mode | wowothink

此种方法,三种情况都可用, 使用方法如下:

/* Input Format: PortNum USBTestPortNum:  1~maxchildUSBTest:  0 - Disable Test Mode1 - Test_J2 - Test_K3 - Test_SE0_NAK4 - Test_Packet5 - Test_Force_Enable*/

pcie 转 usb  hub 的两个port 操作

echo 1 4 > /sys/devices/platform/soc/40000000.pcie/pci0000:00/0000:00:05.0/0000:06:00.0/0000:07:00.0/0000:08:00.0/usb1/port_usbtest
echo 2 4 > /sys/devices/platform/soc/40000000.pcie/pci0000:00/0000:00:05.0/0000:06:00.0/0000:07:00.0/0000:08:00.0/usb1/port_usbtest
USB 1 <-> hub 出来的两个 port
echo 1 4 > /sys/devices/platform/soc/soc:aux_bus/3000000.usb/xhci-hcd.1.auto/usb3/3-1/port_usbtest
echo 2 4 > /sys/devices/platform/soc/soc:aux_bus/3000000.usb/xhci-hcd.1.auto/usb3/3-1/port_usbtestUSB1 直接出来的 usb
echo 1 4 > /sys/devices/platform/soc/soc:aux_bus/2f00000.usb/xhci-hcd.0.auto/usb1/port_usbtest

需要注意的是,上面操作的必须是 usb2.0 的 port_usbtest , 否则会失败

在 NXP LS1046 的平台,我们的板子上情况如下:

usb test mode 测试相关推荐

  1. A40I工控主板(SBC-X40I)USB接口读写测试

    SBC-X40I产品特性 采用Allwinner公司Cortex-A7四核A40i处理器,运行最高速度为1.2GHZ: 支持Mali-400MP2 GPU,支持OpenGL ES 2.0 / Open ...

  2. HUB集线器测试软件,USB Hub.Connectivity 测试先决条件

    USB Hub.Connectivity 测试先决条件 10/11/2018 本文内容 本主题介绍使用 Windows 硬件实验室工具包 (Windows HLK) 来测试 USB 集线器之前必须完成 ...

  3. FFmpeg实现获取USB摄像头视频流测试代码

    通过USB摄像头(注:windows7/10下使用内置摄像头,linux下接普通的usb摄像头(Logitech))获取视频流用到的模块包括avformat和avdevice.头文件仅include ...

  4. CH340E USB转串口 IC测试电路

    ▌01 CH340E芯片 手边拿到从龙邱公司寄送过来20颗 CH340E 的USB转UART的芯片.下面通过制作测试版验证它的功能. 1.管脚功能定义 ▲ CH340管脚功能定义 2.典型应用电路 V ...

  5. 树莓派 —— USB 摄像头简单测试 (拍照 视频)

    一.硬件连接 插入 USB 摄像头插入树莓派 USB 口中(注意:摄像头需要支持 Linux USB免驱动) 使用命令查看插入的USB设备,插入前查看一次,插入后再查看一次,新增的那个就是插入的 US ...

  6. 全志H616香橙派OrangePi Zero2开发板连接USB以太网卡测试

    1) 目前测试过能用的 USB 以太网卡如下所示,其中 RTL8153 USB 千兆网卡插入开 发板的 USB 2.0 Host 接口中测试可以正常使用,但是速率是达不到千兆的,这点请注意 2) 首先 ...

  7. 一台电脑连接多个同种USB摄像头区分测试

    最近忙于处理摄像头测试的事,发现电脑连接多个同种USB视频设备时设备的名字都是一样的,GUID也是一样的,不能再像以前使用opencv通过名字直接打开摄像头采集图像,摆在眼前的是同台电脑如何同时打开多 ...

  8. 树莓派 —— USB 摄像头简单测试 (拍照 录像)

    一.硬件连接 插入 USB 摄像头插入树莓派 USB 口中(注意:摄像头需要支持 Linux USB免驱动) 使用命令查看插入的USB设备,插入前查看一次,插入后再查看一次,新增的那个就是插入的 US ...

  9. Intel Realsense D435 是否启动pipeline.start()就开始传输帧,还是只有我们调用wait_for_frames()函数时它才会传输帧?(任务管理器USB带宽内存测试)

    我猜想Intel Realsense D435摄像头只要启动pipeline.start()函数,就会开始传输帧,无论我们是否调用wait_for_frames()或者poll_for_frames( ...

最新文章

  1. 记录智能指针使用shared_ptr使用错误
  2. golang RSA (PKCS#1)加密解密
  3. android从放弃到精通 第七天 tomorrow
  4. albumentations 安装
  5. JavaCC首页、文档和下载 - 语法分析生成器 - 开源中国社区
  6. 三百年前的AI骗局:骗过美国总统和普鲁士大帝的国际象棋AI
  7. 安装了ros后Python3 调用import cv2报错解决办法:
  8. 在ubuntu 12.04上安装tomcat 7.40
  9. 画图板-- 中点算法画圆
  10. IDEA工作笔记-对.idea及.iml文件的理解
  11. 加密算法使用(三):用用BASE64
  12. 只看当前分支_看小姐姐用动图展示10大Git命令
  13. 直播app源代码,单例模式
  14. 不用编程,快速实现西门子PLC与罗克韦尔(AB)PLC之间以太网通讯
  15. 最新最全MTK联发科手机芯片型号及参数汇总
  16. pano2vr 缩略图添加场景名称
  17. 疫情常态下的医院信息化建设新思考
  18. 程序员必备的 10 大国外技术网站
  19. rs485接口上下拉_RS-485总线为什么要加上拉下拉电阻?如何选择RS485的上下拉电阻?...
  20. 程序员办公桌都如此霸气,网友:砖头当杯垫也是不敢惹!

热门文章

  1. 2019年全国省市区代码Oracle数据库脚本
  2. 2017年11场下半年热门电子商务相关会议电商峰会合集
  3. 网站上传到服务器(上线)
  4. 什么是计算机的管家,他管理着计算机的运行,电脑的管家——“有效管理我的计算机”教学设计...
  5. 动态规划学习:零钱兑换
  6. 企业怎样管理问题职工?
  7. 易观方舟70秒可视化埋点SDK全部开源!
  8. 英语论文写作技巧-3(字的使用中特别注意事项)
  9. vue使用讯飞语音webapi
  10. 【redis】基本操作 (php)