ARM Linux DIY(八)USB 调试

这篇具有很好参考价值的文章主要介绍了ARM Linux DIY(八)USB 调试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

V3s 带有一个 USB 接口,将其设置为 HOST 或 OTG 模式,这样可以用来接入键盘、鼠标等 USB 外设。

USB 简介

USB 有两种设备:HOST 和 USB 功能设备。
在 USB2.0 中又引入了一个新的概念 OTG,即设备角色可以动态切换。
切换方式一:硬件
使用 USB_ID 引脚,默认上拉,处于 device 状态。
如果需要 OTG 控制器进入 HOST 状态,需要外接的 USB 口将 USB_ID 短接到地。
切换方式二:设备树
设备树直接配置

&usb_otg {
        dr_mode = "otg"; /* 三个可选项: otg / host / peripheral */
        status = "okay";
};

切换方式三:手动修改 /sys
进入 Linux 系统,执行,usb 将会被设置成为 host 模式

echo host > /sys/devices/platform/soc/1c13000.usb/musb-hdrc.1.auto/mode

我们使用硬件方式切换

硬件

USB 电路简单,只有两根线 D+、D-,器件也简单,就一个 USB 母座,甚至连电阻电容都不需要,其它外设如果也能像 USB 这样就好了。😊😊😊
焊接就很简单了,就一个 USB 母座,我使用的是 Type C 母座
arm linux操作usb设备读写,嵌入式,# 硬件,# Driver,arm开发

设备树

arch/arm/boot/dts/sun8i-v3s-licheepi-zero.dts


/ {
    soc {
        // 增加 ehci0 (usb2.0)、ohci0 (usb1.1) 这两个节点
        ehci0: usb@01c1a000 {
            compatible = "allwinner,sun8i-v3s-ehci", "generic-ehci";
            reg = <0x01c1a000 0x100>;
            interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>;
            clocks = <&ccu CLK_BUS_EHCI0>, <&ccu CLK_BUS_OHCI0>;
            resets = <&ccu RST_BUS_EHCI0>, <&ccu RST_BUS_OHCI0>;
            status = "okay";
        };

        ohci0: usb@01c1a400 {
            compatible = "allwinner,sun8i-v3s-ohci", "generic-ohci";
            reg = <0x01c1a400 0x100>;
            interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
            clocks = <&ccu CLK_BUS_EHCI0>, <&ccu CLK_BUS_OHCI0>,
            <&ccu CLK_USB_OHCI0>;
            resets = <&ccu RST_BUS_EHCI0>, <&ccu RST_BUS_OHCI0>;
            status = "okay";
        };
    };
};

&usb_otg {
	dr_mode = "otg";
	status = "okay";
};

&usbphy {
	usb0_id_det-gpios = <&pio 5 6 GPIO_ACTIVE_HIGH>;
	status = "okay";
};

调试

# lsusb 
Bus 003 Device 001: ID 1d6b:0002
Bus 001 Device 001: ID 1d6b:0002
Bus 002 Device 001: ID 1d6b:0001

插入键盘

# 
[   64.047789] usb 2-1: USB disconnect, device number 2
[   69.109743] usb 2-1: new full-speed USB device number 3 using ohci-platform
[   69.410757] usbhid 2-1:1.0: can't add hid device: -71
[   69.417442] usbhid: probe of 2-1:1.0 failed with error -71
[   69.438942] input: Gaming KB  System Control as /devices/platform/soc/1c1a400.usb/usb2/2-1/2-1:1.1/0003:258A:1006.0001/input/input1
[   69.520323] input: Gaming KB  Consumer Control as /devices/platform/soc/1c1a400.usb/usb2/2-1/2-1:1.1/0003:258A:1006.0001/input/input2
[   69.536532] input: Gaming KB  Keyboard as /devices/platform/soc/1c1a400.usb/usb2/2-1/2-1:1.1/0003:258A:1006.0001/input/input3
[   69.558009] hid-generic 0003:258A:1006.0001: input: USB HID v1.11 Keyboard [Gaming KB ] on usb-1c1a400.usb-1/input1
[   71.259791] usb 2-1: reset full-speed USB device number 3 using ohci-platform
[   73.019839] usb 2-1: reset full-speed USB device number 3 using ohci-platform
[   74.999799] usb 2-1: reset full-speed USB device number 3 using ohci-platform
[   76.809912] usb 2-1: reset full-speed USB device number 3 using ohci-platform
[   77.469746] usb 2-1: device not accepting address 3, error -62
[   77.679753] usb 2-1: reset full-speed USB device number 3 using ohci-platform
[   79.639774] usb 2-1: reset full-speed USB device number 3 using ohci-platform
[   81.230445] usb 2-1: reset full-speed USB device number 3 using ohci-platform
[   83.079769] usb 2-1: reset full-speed USB device number 3 using ohci-platform
[   85.079781] usb 2-1: reset full-speed USB device number 3 using ohci-platform
[   85.354764] usb 2-1: device descriptor read/all, error -71
[   85.569730] usb 2-1: reset full-speed USB device number 3 using ohci-platform

报错 usb 2-1: device descriptor read/all, error -71
拔插一次

# 
[  207.536060] usb 2-1: USB disconnect, device number 3
[  210.899724] usb 2-1: new full-speed USB device number 4 using ohci-platform
[  211.196755] usbhid 2-1:1.0: can't add hid device: -62
[  211.203540] usbhid: probe of 2-1:1.0 failed with error -62
[  211.231919] input: Gaming KB  Gaming KB  System Control as /devices/platform/soc/1c1a400.usb/usb2/2-1/2-1:1.1/0003:258A:1006.0002/input/input4
[  211.310302] input: Gaming KB  Gaming KB  Consumer Control as /devices/platform/soc/1c1a400.usb/usb2/2-1/2-1:1.1/0003:258A:1006.0002/input/input5
[  211.327496] input: Gaming KB  Gaming KB  Keyboard as /devices/platform/soc/1c1a400.usb/usb2/2-1/2-1:1.1/0003:258A:1006.0002/input/input6
[  211.359852] hid-generic 0003:258A:1006.0002: input: USB HID v1.11 Keyboard [Gaming KB  Gaming KB ] on usb-1c1a400.usb-1/input1

还是报错 usbhid: probe of 2-1:1.0 failed with error -62

# ls /dev/input/ -lh
total 0      
crw-------    1 root     root       13,  64 Jan  1 00:00 event0
crw-------    1 root     root       13,  65 Jan  1 00:03 event1 // 键盘
crw-------    1 root     root       13,  66 Jan  1 00:03 event2 // 键盘
crw-------    1 root     root       13,  67 Jan  1 00:03 event3 // 键盘

/dev/input 目录下虽然产生了键盘对应的 event 设备,但是监听这些设备,按下键盘,没有任何反应

# hexdump /dev/input/event1

# hexdump /dev/input/event2

# hexdump /dev/input/event3

起初怀疑是供电不足,于是使用一个电源适配器专门给 HUB 供电,还是报错。
又怀疑是 1 拖 4 的 USB HUB 质量不好,或者耗电太大,于是又买了个 1 拖 1 的 USB HUB(其实不能算是 HUB,应该只能算是 Type C 转 Type A 转换器),结果还是报错。
还怀疑是 USB_ID 引脚没有下拉,于是飞线到 GND 进行下拉,还是报错。
就这样调试了两天未果,最终从《USB 为什么一般选择48MHz》 这篇文章中找到了线索,

USB 的系统时钟需要时 bitrate 的 4 倍, 如低速 USB,传输速率是 1.5Mbps, 系统时钟需要选择为1.5*4 == 6Mhz,全速 usb 12MHz * 4 == 48Mhz

想到我使用的晶振是 26MHz,不是 4 的整数倍,难道是这个原因?
将晶振从 26MHz 换成了 24MHz,相应地,uboot 和 kernel dts 也修改成 24MHz,上电测试竟然还真的正常了。

测试

插入 USB HUB
arm linux操作usb设备读写,嵌入式,# 硬件,# Driver,arm开发

# 
[  290.679671] usb 1-1: new high-speed USB device number 2 using ehci-platform
[  290.881127] hub 1-1:1.0: USB hub found
[  290.886219] hub 1-1:1.0: 4 ports detected

# lsusb 
Bus 003 Device 001: ID 1d6b:0002
Bus 001 Device 001: ID 1d6b:0002
Bus 001 Device 002: ID 1a40:0101 // USB HUB
Bus 002 Device 001: ID 1d6b:0001

插入键盘

# 
[  587.679662] usb 1-1.1: new full-speed USB device number 3 using ehci-platform
[  587.936322] input: Gaming KB  Gaming KB  as /devices/platform/soc/1c1a000.usb/usb1/1-1/1-1.1/1-1.1:1.0/0003:258A:1006.0001/input/input1
[  588.020368] hid-generic 0003:258A:1006.0001: input: USB HID v1.11 Keyboard [Gaming KB  Gaming KB ] on usb-1c1a000.usb-1.1/input0
[  588.049607] input: Gaming KB  Gaming KB  System Control as /devices/platform/soc/1c1a000.usb/usb1/1-1/1-1.1/1-1.1:1.1/0003:258A:1006.0002/input/input2
[  588.130279] input: Gaming KB  Gaming KB  Consumer Control as /devices/platform/soc/1c1a000.usb/usb1/1-1/1-1.1/1-1.1:1.1/0003:258A:1006.0002/input/input3
[  588.147663] input: Gaming KB  Gaming KB  Keyboard as /devices/platform/soc/1c1a000.usb/usb1/1-1/1-1.1/1-1.1:1.1/0003:258A:1006.0002/input/input4
[  588.170084] hid-generic 0003:258A:1006.0002: input: USB HID v1.11 Keyboard [Gaming KB  Gaming KB ] on usb-1c1a000.usb-1.1/input1

# lsusb 
Bus 003 Device 001: ID 1d6b:0002
Bus 001 Device 001: ID 1d6b:0002
Bus 001 Device 003: ID 258a:1006 // 键盘
Bus 001 Device 002: ID 1a40:0101
Bus 002 Device 001: ID 1d6b:0001

# ls /dev/input/ -lh
total 0      
crw-------    1 root     root       13,  64 Jan  1 00:00 event0
crw-------    1 root     root       13,  65 Jan  1 02:04 event1 // 键盘
crw-------    1 root     root       13,  66 Jan  1 02:04 event2 // 键盘
crw-------    1 root     root       13,  67 Jan  1 02:04 event3 // 键盘
crw-------    1 root     root       13,  68 Jan  1 02:04 event4 // 键盘

监听键盘按键

# hexdump /dev/input/event1
0000000 1dbd 0000 9338 0007 0004 0004 000b 0007
0000010 1dbd 0000 9338 0007 0001 0023 0001 0000
0000020 1dbd 0000 9338 0007 0000 0000 0000 0000
0000030 1dbd 0000 eaec 0008 0004 0004 000b 0007
0000040 1dbd 0000 eaec 0008 0001 0023 0000 0000
0000050 1dbd 0000 eaec 0008 0000 0000 0000 0000
0000060 1dbe 0000 01b8 0000 0004 0004 0009 0007
0000070 1dbe 0000 01b8 0000 0001 0021 0001 0000
0000080 1dbe 0000 01b8 0000 0000 0000 0000 0000
0000090 1dbe 0000 1ae3 0001 0004 0004 0009 0007
00000a0 1dbe 0000 1ae3 0001 0001 0021 0000 0000
00000b0 1dbe 0000 1ae3 0001 0000 0000 0000 0000
00000c0 1dbe 0000 d8e5 000b 0004 0004 0015 0007
00000d0 1dbe 0000 d8e5 000b 0001 0013 0001 0000
00000e0 1dbe 0000 d8e5 000b 0000 0000 0000 0000
00000f0 1dbe 0000 8e63 000d 0004 0004 0015 0007
0000100 1dbe 0000 8e63 000d 0001 0013 0000 0000
0000110 1dbe 0000 8e63 000d 0000 0000 0000 0000

插入鼠标

# 
[  806.739667] usb 1-1.4: new full-speed USB device number 4 using ehci-platform
[  806.996984] input: Logitech G102 Prodigy Gaming Mouse as /devices/platform/soc/1c1a000.usb/usb1/1-1/1-1.4/1-1.4:1.0/0003:046D:C084.0003/input/input5
[  807.022588] hid-generic 0003:046D:C084.0003: input: USB HID v1.11 Mouse [Logitech G102 Prodigy Gaming Mouse] on usb-1c1a000.usb-1.4/input0
[  807.067548] input: Logitech G102 Prodigy Gaming Mouse Keyboard as /devices/platform/soc/1c1a000.usb/usb1/1-1/1-1.4/1-1.4:1.1/0003:046D:C084.0004/input/input6
[  807.150288] input: Logitech G102 Prodigy Gaming Mouse Consumer Control as /devices/platform/soc/1c1a000.usb/usb1/1-1/1-1.4/1-1.4:1.1/0003:046D:C084.0004/input/input7
[  807.168723] input: Logitech G102 Prodigy Gaming Mouse System Control as /devices/platform/soc/1c1a000.usb/usb1/1-1/1-1.4/1-1.4:1.1/0003:046D:C084.0004/input/input8
[  807.193232] hid-generic 0003:046D:C084.0004: input: USB HID v1.11 Keyboard [Logitech G102 Prodigy Gaming Mouse] on usb-1c1a000.usb-1.4/input1

# lsusb 
Bus 003 Device 001: ID 1d6b:0002
Bus 001 Device 001: ID 1d6b:0002
Bus 001 Device 003: ID 258a:1006
Bus 001 Device 002: ID 1a40:0101
Bus 002 Device 001: ID 1d6b:0001
Bus 001 Device 004: ID 046d:c084 // 鼠标

# ls /dev/input/ -lh
total 0      
crw-------    1 root     root       13,  64 Jan  1 00:00 event0
crw-------    1 root     root       13,  65 Jan  1 02:04 event1
crw-------    1 root     root       13,  66 Jan  1 02:04 event2
crw-------    1 root     root       13,  67 Jan  1 02:04 event3
crw-------    1 root     root       13,  68 Jan  1 02:04 event4
crw-------    1 root     root       13,  69 Jan  1 02:08 event5 // 鼠标
crw-------    1 root     root       13,  70 Jan  1 02:08 event6 // 鼠标
crw-------    1 root     root       13,  71 Jan  1 02:08 event7 // 鼠标
crw-------    1 root     root       13,  72 Jan  1 02:08 event8 // 鼠标

监听鼠标移动、点击

# hexdump /dev/input/event5
0000000 1e91 0000 9be6 000e 0002 0000 0001 0000
0000010 1e91 0000 9be6 000e 0000 0000 0000 0000
0000020 1e91 0000 befd 000e 0002 0000 0001 0000
0000030 1e91 0000 befd 000e 0000 0000 0000 0000
0000040 1e91 0000 caa5 000e 0002 0001 0001 0000
0000050 1e91 0000 caa5 000e 0000 0000 0000 0000
0000060 1e92 0000 3dfc 0001 0002 0000 0001 0000
0000070 1e92 0000 3dfc 0001 0000 0000 0000 0000
0000080 1e93 0000 cb9d 0008 0002 0000 0001 0000
0000090 1e93 0000 cb9d 0008 0000 0000 0000 0000
00000a0 1e93 0000 15c0 0009 0002 0000 0001 0000
00000b0 1e93 0000 15c0 0009 0000 0000 0000 0000
00000c0 1e93 0000 f24a 000a 0002 0000 0001 0000
00000d0 1e93 0000 f24a 000a 0000 0000 0000 0000
00000e0 1e93 0000 1950 000b 0002 0000 0001 0000
00000f0 1e93 0000 1950 000b 0000 0000 0000 0000
0000100 1e93 0000 3c95 000b 0002 0000 0001 0000
0000110 1e93 0000 3c95 000b 0000 0000 0000 0000
0000120 1e93 0000 5bc9 000b 0002 0000 0001 0000
0000130 1e93 0000 5bc9 000b 0000 0000 0000 0000
0000140 1e93 0000 7afe 000b 0002 0000 0001 0000
0000150 1e93 0000 7afe 000b 0000 0000 0000 0000
0000160 1e96 0000 5793 0000 0004 0004 0001 0009
0000170 1e96 0000 5793 0000 0001 0110 0001 0000
0000180 1e96 0000 5793 0000 0000 0000 0000 0000
0000190 1e96 0000 3fd6 0002 0004 0004 0001 0009
00001a0 1e96 0000 3fd6 0002 0001 0110 0000 0000
00001b0 1e96 0000 3fd6 0002 0000 0000 0000 0000
00001c0 1e96 0000 e13b 0007 0004 0004 0002 0009
00001d0 1e96 0000 e13b 0007 0001 0111 0001 0000
00001e0 1e96 0000 e13b 0007 0000 0000 0000 0000
00001f0 1e96 0000 d35f 0008 0004 0004 0002 0009
0000200 1e96 0000 d35f 0008 0001 0111 0000 0000
0000210 1e96 0000 d35f 0008 0000 0000 0000 0000
0000220 1e96 0000 3cce 0009 0004 0004 0002 0009
0000230 1e96 0000 3cce 0009 0001 0111 0001 0000
0000240 1e96 0000 3cce 0009 0000 0000 0000 0000
0000250 1e96 0000 ae11 0009 0004 0004 0002 0009
0000260 1e96 0000 ae11 0009 0001 0111 0000 0000
0000270 1e96 0000 ae11 0009 0000 0000 0000 0000

至此,USB 调试 OK文章来源地址https://www.toymoban.com/news/detail-831137.html

到了这里,关于ARM Linux DIY(八)USB 调试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • V4L2+QT+USB摄像头实时显示视频(Arm,Linux,window均适用)

    笔者自从学习了Framebuffer编程和V4L2编程之后,就想实现在LCD屏上显示实时视频 笔者学习过正点I.MX6U Linux C编程中的相关内容,然而原子的例程是针对OV5640摄像头写的,像素格式是RGB 然而USB摄像头大多支持MJPEG或者YUYV格式,如果要在屏幕上显示需要进行格式转换,而 转换像素

    2023年04月08日
    浏览(45)
  • linux usb设备网络共享 usb/ip

    USB设备的网络共享可以通过USB/IP来实现, USB/IP把USB I/O信息封装成TCP/IP格式在网络端传输 ,可以实现usb的全部功能,且跨平台,是个透明的设备共享机制。 -b 后为上面列出的busid ip地址和端口号换成自已的 可以看出串口usb设备已经在客户端显示出来了

    2024年01月23日
    浏览(50)
  • Linux USB 设备检测

    最常用的命令就是 lsusb ,但是 lsusb 仅能查看当前的简单 USB 设备信息,要查看详细的 USB 设备信息,最好还是借助 Linux 下的 debugfs 机制。 debugfs 挂载: 通过 debugfs 查看 USB 设备信息 通过 /sys/kernel/debug/usb/devices 设备节点可以看到当前 USB 设备的详细信息,具体如下: 针对上面

    2024年02月15日
    浏览(40)
  • ARM DIY 硬件调试

    之前打样的几块 ARM 板,一直放着没去焊接。今天再次看到,决定把它焊起来。 为了提高焊接效率,先使用加热台焊接。不过板子为双面贴片,使用加热台只能焊接一面,那就优先焊主芯片那面,并把 Type C、SD 卡座还有一些关键电阻电容一并焊接。 (不过后来发现这个决定

    2024年02月12日
    浏览(36)
  • linux 下查看 USB 设备

    在 sysfs 文件系统下,查看 USB 设备,看到一些乱七八糟的设备显示,它们都是什么呢?今天来介绍一下。 usb1 usb1 表示该 SOC 上接了 1 条 USB 总线,即 1 个 USB Controller。 PS:如果有多个 USB Controller,将会是 usb1、usb2、usb3。。。 1-0:1.0 而 1-0:1.0 表示什么呢? 1:表示 1 号总线,或

    2024年02月04日
    浏览(35)
  • ARM DIY(六)音频调试

    今天,调试一下音频 硬件部分核心是 LM4871 音频功放芯片 对于 SOC 来讲很简单,就一个引脚 HPOUTL(单声道);对于扬声器来讲也很简单,就两个引脚,插上就可以了。 另外一个关键点是电容和电阻要焊到位,有没有噪音,音质好坏,全屏电容电阻打下手。 arch/arm/boot/dts/sun

    2024年02月10日
    浏览(38)
  • linux|操作系统|centos7物理机安装网卡驱动8188gu(内核升级,firmware固件,USB设备管理,module管理)

    目前服务器领域centos7基本是主流的操作系统,而linux相对于Windows来说,软硬件方面的支持是差很多的,在硬件方面来说,以一个免驱的网卡为例,window xp可能不会自动识别到,但Windows10基本都会自动识别到,简简单单的即插即用。根本原因在Windows随着版本的升级,内置的各

    2024年01月20日
    浏览(84)
  • ARM DIY(四)WiFi 调试

    换个粗点的风枪嘴,让热风覆盖 RTL8823BS 整体模块,最终实现自动归位 焊接 SDIO 接口的上拉电阻以及复位引脚上拉电阻 硬件部分就这么多比较简单,接下来是软件部分 搜索 RTL8723BS RTL8723BS 默认关闭,不过要使能该驱动之前,需要先使能 WLAN 和 CFG80211 搜索 WLAN 使能 WLAN 搜索

    2024年02月11日
    浏览(35)
  • Linux:主机USB设备驱动简析

    限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 本文基于 linux-4.14.132 内核代码进行分析。 其中: 一个 USB 主机控制器(HCD) 上最多可连接 127 个设备(HUB或Func),每个设备在枚举完成后会分配1个地址,地址区间为1~127,特殊地址0用于在设

    2023年04月21日
    浏览(47)
  • ARM DIY(七)麦克风调试

    上篇文章介绍了扬声器调试,今天介绍下麦克风调试。 焊接:咪头、电阻、电容 音频调试时已完成,参考上篇文章 使能 mic1 录音 10s -f 是设置录音质量, -f cd 表示录音质量为 cd 级别。-d 是指定录音时间,单位是 s,这条指令就是录制一段 cd 级别 10s 的 wav 音频,音频名字为

    2024年02月10日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包