USB之设备插入波形变化2

=============  本系列参考  =============

《圈圈教你玩USB》、《Linux那些事儿之我是USB》

协议文档:https://www.usb.org/document-library/usb-20-specification  usb_20_20190524/usb_20.pdf

调试工具:Beagle USB 480 逻辑分析仪、sys/kernel/debug/usb/usbmon/

====================================

前言

  USB设备插入端口到底发生了什么? 总线上的波形发生了什么变化?  这一节我们从设备插入前、插入中、插入后三个阶段分析

一、设备插入前

  首先要知道设备插入的端口是hub的端口(port), 外设不直接与Host相连, 而是通过hub这个“代理商”, 所以一个Host必然有一个hub, 这个最基本的hub我们称之root hub,基本上Host和root hub是捆绑一起,

一个hub可以引出多个端口(port), 目前Linux定义hub最多有31个port, 如果你连接超过这个数量可以改下面的定义

linux-4.1.15/include/uapi/linux/usb/ch11.h
/* This is arbitrary.
 * From USB 2.0 spec Table 11-13, offset 7, a hub can
 * have up to 255 ports. The most yet reported is 10.
 *
 * Current Wireless USB host hardware (Intel i1480 for example) allows
 * up to 22 devices to connect. Upcoming hardware might raise that
 * limit. Because the arrays need to add a bit for hub status data, we
 * use 31, so plus one evens out to four bytes.
 */
#define USB_MAXCHILDREN        31

 

 已我的电脑为例, 只有一个Host主控器和一个root hub, 所有外设的端口都是一个root hub出来的, 如果你的PC机有多个Host/root hub, 可以让设备分散到各个Host避免电流限制

  

  有个概念非常重要, 就是hub也是一个设备, 跟普通的U盘、鼠标、键盘一样, 在Linux中都用struct usb_device 表示, 只是实现的功能侧重点不一样(比如复位功能只有hub有, 用于复位普通外设)

  设想一下, 当USB设备插入电脑USB端口时, 电脑提示有设备插入, 接着提示安装成功或者失败,  Host怎么知道外设插入这一事件呢? 既然Host不跟外设直连那肯定跟hub有关, 另外, 如果插入端口信号可以传给Host,

可如果Host还连接着其他外设, 必然导致信号串扰, 因为信号可以在Host和所有外设传达, 比如我正在拷贝U盘数据, 此时插入键盘, 并不会干扰我拷贝, 所以可以推测插入键盘这事件(D+/D-状态改变)并没有传到总线上。

总总现象表明, 这个插入的事件只有被插的那个hub知道, 同时hub的port默认是disable的, 信号不会连接到Host总线上!

  hub既然知道这一事件, 它可以告知Host, 或者是Host来询问, 很显然是后者, 因为外设没有权利主动勾搭Host, 所有的通信过程都是Host主动发起的, 设备被动接收!(唯一例外就是设备远程唤醒Host),   所以我们可以反推,

hub不仅是个外设, 同时采用中断传输, 端点描述符里的bIterval间隔时间值告知Host希望多久访问一次, 协议文档11章有定义hub规范, 代码只要每次读取hub的状态寄存器值, 判断是否有外设插入就行了。

  下面是用usbmon工具调试USB Host跟hub通信的log:

 # cat sys/kernel/debug/usb/usbmon/1u
0s  0u  1s  1t  1u

ce382380 1944921539 C Ii:1:001:1 0:2048 1 = 02
ce382380 1944921539 S Ii:1:001:1 -115:2048 4 <
ce399800 1944921752 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <[email protected]               |  |  | |__setup令牌包 后面就是请求数据(不会列出PID/CRC5域)                |  |  |__端点地址, 控制传输使用端点0               | |__设备地址, root hub是第一个设备, 所以是地址1, 0地址表示刚插入设备               |__主控器/总线
ce399800 1944921752 C Ci:1:001:0 0 4 = 01010100
ce399800 1944921783 S Co:1:001:0 s 23 01 0010 0001 0000 0 <[email protected]
ce399800 1944921783 C Co:1:001:0 0 0
ce399800 1944921813 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <[email protected]
ce399800 1944921813 C Ci:1:001:0 0 4 = 01010000
ce399e80 1944961608 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <[email protected]
ce399e80 1944961608 C Ci:1:001:0 0 4 = 01010000
ce399800 1945001556 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <[email protected]
ce399800 1945001556 C Ci:1:001:0 0 4 = 01010000
ce399e80 1945041564 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <[email protected]
ce399e80 1945041564 C Ci:1:001:0 0 4 = 01010000

ce399e80 1945081604 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <[email protected]
ce399e80 1945081604 C Ci:1:001:0 0 4 = 01010000
ce399e80 1945081665 S Co:1:001:0 s 23 03 0004 0001 0000 0    复位

ce399e80 1945185211 C Co:1:001:0 0 0

ce399e80 1945241546 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <[email protected]
ce399e80 1945241638 C Ci:1:001:0 0 4 = 03051000
ce399800 1945301544 S Co:1:001:0 s 23 01 0014 0001 0000 0
ce399800 1945301635 C Co:1:001:0 0 0
ce399800 1945301696 S Ci:1:000:0 s 80 06 0100 0000 0040 64 <    获取设备描述符
ce399800 1945302276 C Ci:1:000:0 0 18 = 12011002 00000040 0c090010 00110102 0301
ce399800 1945302368 S Co:1:001:0 s 23 03 0004 0001 0000 0     再次复位

后面是跟外设U盘打交道的log, 放在下一节讲

  @1的a3(1010 0011):表示设备到主机, 是class且other, 说明不是标准的请求(请求有上面4中), 获取的是GET_STATUS DEVICE, 说明这是读取地址为1端点为0的root hub设备的状态, 也可以参考Linux代码:

port_event()
    -> hub_port_status(hub, port1, &portstatus, &portchange)
        -> get_port_status():
            /* #define    USB_STS_TIMEOUT        1000
             * #define    USB_STS_RETRIES        5
             * #define   USB_REQ_GET_STATUS        0x00
             * #define   USB_DIR_IN            0x80 /* to host */
             * #define USB_RT_PORT    (USB_TYPE_CLASS | USB_RECIP_OTHER)
             * #define USB_TYPE_CLASS            (0x01 << 5)
             * #define USB_RECIP_OTHER            0x03
             */
            static int get_port_status(struct usb_device *hdev, int port1, struct usb_port_status *data)
            {
                int i, status = -ETIMEDOUT;

                for (i = 0; i < USB_STS_RETRIES && (status == -ETIMEDOUT || status == -EPIPE); i++) {
                    status = usb_control_msg(hdev, usb_rcvctrlpipe(hdev, 0),
                        USB_REQ_GET_STATUS, USB_DIR_IN | USB_RT_PORT, 0, port1,
                        data, sizeof(*data), USB_STS_TIMEOUT);
                }
                return status;
            }

struct usb_port_status {
    __le16 wPortStatus;
    __le16 wPortChange;
} __attribute__ ((packed));

最后 portstatus = 0101  portchange = 0100;

/*
 * wPortStatus bit field
 * See USB 2.0 spec Table 11-21
 */
#define USB_PORT_STAT_CONNECTION    0x0001
#define USB_PORT_STAT_ENABLE        0x0002
#define USB_PORT_STAT_SUSPEND        0x0004
#define USB_PORT_STAT_OVERCURRENT    0x0008
#define USB_PORT_STAT_RESET        0x0010
#define USB_PORT_STAT_L1        0x0020
/* bits 6 to 7 are reserved */
#define USB_PORT_STAT_POWER        0x0100
#define USB_PORT_STAT_LOW_SPEED        0x0200
#define USB_PORT_STAT_HIGH_SPEED        0x0400
#define USB_PORT_STAT_TEST              0x0800
#define USB_PORT_STAT_INDICATOR         0x1000
/* bits 13 to 15 are reserved */

#define USB_PORT_STAT_C_CONNECTION    0x0001
#define USB_PORT_STAT_C_ENABLE        0x0002
#define USB_PORT_STAT_C_SUSPEND        0x0004
#define USB_PORT_STAT_C_OVERCURRENT    0x0008
#define USB_PORT_STAT_C_RESET        0x0010
#define USB_PORT_STAT_C_L1        0x0020

  从返回的四个字节01010100可以看出port状态已经连接了, 但是还是suspend状态, 我们接着看@2的(23 01 0010 0001 0000)  这是个清除hub寄存器操作,

@[email protected]五次都是(a3 00 0000 0001 0004) =读取状态0101 0000刚好是代码定义try的次数 #define USB_STS_RETRIES 5 , 既然没有新的状态, 所以Host发送了第一次的复位操作reset

port_event()
    -> hub_port_status(hub, port1, &portstatus, &portchange)
        .....................
    -> hub_port_warm_reset_required(hub, port1, portstatus)
        -> hub_port_reset()
            -> set_port_feature(hub->hdev, port1, (warm ? USB_PORT_FEAT_BH_PORT_RESET : USB_PORT_FEAT_RESET));
            -> hub_port_wait_reset()
                -> hub_port_status()  -> hub_port_connect_change(hub, port1, portstatus, portchange);    -> hub_port_connect()      -> usb_alloc_dev() //创建设备      -> hub_port_init() //获取设备描述符的等各种描述符(注意接口描述符/端点描述符不能单独获取必须跟随配置描述符一块获取,所以第一次先获取9字节的配置描述符, 解析后续还有多少再次获取)      -> usb_new_device() //注册, 然后会跟usb_generic_driver 进行match 然后再创建真正的执行单元  interface! 后续博文会讲解

  总之, 设备的插入事件是又hub检测到的, Host通过中断控制传输定期获取各个hub的状态, 当检测到有设备connect, 则调用hub_port_connect_change()  创建设备、填充各种描述符、注册设备,

在注册之前hub会设置这个usb_device里的parent指针为本hub, port为插入的port号, 并且分配唯一地址给外设, 更多具体的我们在后面分析hub时再讲解。

  还有个遗漏的细节, 就是Host通过hub获得事件, 那为什么设备插入hub, hub就知道呢? 其实就是改变D+/D-的状态, 我们放到设备插入中解释。

二、设备插入中

  hub的port口D+/D-在默认状态下下拉15kΩ的电阻, 悬空状态电平都为0。 而USB设备在D+或D-上拉一个1.5kΩ的电阻到VBUS, 这也是为何USB接口四根线VBUS和GND比D+/D-长的原因,

如果是FS设备, 上拉电阻接到D+, 插入port分压后D+为高电平, hub认为是FS设备; 如果是LS, 上拉电阻接到D-, 插入port分压后D-为高电平, hub认为是LS设备, 那怎么区分HS设备呢?

目前的做法是HS也是将1.5k的上拉电阻接在D+处, 所以前期HS/FS的表现是一样的, hub不区分是FS还是HS, 都先当做FS设备, 在后面一点, Host会对设备复位, 也即D+/D- 都为0且持续10ms以上,

而这个期间, 如果是高速设备, 会在D-灌入17.78mA电流(设备D+上的1.5k电阻还未撤销), 在hub端会形成45欧姆的等效终端电阻, 导致D-变成电平17.78*45=800mv电平, 且持续1~7ms,

如果hub是支持高速的话, 在复位期间就会自动检测D-有没有这800mv电平, 如果没有则说明外设不是高速的, 如果有持续的800mv的话, 等外设停止驱动D-的17.78mA的100us内, hub也使用自己的电流源

交叉驱动D+/D-形成KJKJKJ...波形,同时将自己内部电路切换到高速模式(hub硬件无法同时支持高速和全速/低速, 靠一个开关切换到哪一路),  设备停止驱动D-后会检测是否有KJ信号, 如果有说明hub是支持

高速的然后自己也切换到高速模式, 切换的具体表现有:断掉1.5K的上拉电阻; 连接新的等效终端电阻;硬件切换到高速模式。 由于新的等效终端电阻是原来的一半22.5欧姆, 所以hub发出的KJKJKJ...波形的

电平变成从原来的800mv变成400mv了, 至此高速握手协商结束。总之在握手协商期间任何一方没有给出该有的响应(设备持续灌电流到D- 800mv、hub交叉灌D+/D-), 则使用默认的全速。

  当然我们这有个前提就是Host也是支持高速的, 否则Host在与hub握手时就会禁止hub的高速能力, 后面自然不会响应高速外设的800mv(即不会发送KJKJKJ...), 其波形如下:

    

    

三、设备插入后

  插入后做如下:

  a. 获取各种描述符(设备描述符、配置描述符、字符串描述符), 丰富struct usb_device结构体的骨骼

  b.  与usb_generic_driver match后设置合适的配置描述符, 并创建 具体的设备(操作对象) struct usb_interface

  c. struct usb_interface 与 struct usb_driver match后进行具体驱动后续的初始化和目的操作

  更详细的流程将在后续博文介绍.....

附完整log:

 # cat sys/kernel/debug/usb/usbmon/1u
0s  0u  1s  1t  1u

ce382380 1944921539 C Ii:1:001:1 0:2048 1 = 02
ce382380 1944921539 S Ii:1:001:1 -115:2048 4 <
ce399800 1944921752 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce399800 1944921752 C Ci:1:001:0 0 4 = 01010100
ce399800 1944921783 S Co:1:001:0 s 23 01 0010 0001 0000 0
ce399800 1944921783 C Co:1:001:0 0 0
ce399800 1944921813 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce399800 1944921813 C Ci:1:001:0 0 4 = 01010000
ce399e80 1944961608 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce399e80 1944961608 C Ci:1:001:0 0 4 = 01010000
ce399800 1945001556 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce399800 1945001556 C Ci:1:001:0 0 4 = 01010000
ce399e80 1945041564 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce399e80 1945041564 C Ci:1:001:0 0 4 = 01010000

ce399e80 1945081604 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce399e80 1945081604 C Ci:1:001:0 0 4 = 01010000
ce399e80 1945081665 S Co:1:001:0 s 23 03 0004 0001 0000 0    复位

ce399e80 1945185211 C Co:1:001:0 0 0

ce399e80 1945241546 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce399e80 1945241638 C Ci:1:001:0 0 4 = 03051000
ce399800 1945301544 S Co:1:001:0 s 23 01 0014 0001 0000 0
ce399800 1945301635 C Co:1:001:0 0 0
ce399800 1945301696 S Ci:1:000:0 s 80 06 0100 0000 0040 64 <    获取设备描述符
ce399800 1945302276 C Ci:1:000:0 0 18 = 12011002 00000040 0c090010 00110102 0301
ce399800 1945302368 S Co:1:001:0 s 23 03 0004 0001 0000 0     再次复位

ce399800 1945405822 C Co:1:001:0 0 0
ce382380 1945421539 C Ii:1:001:1 0:2048 1 = 02
ce382380 1945421539 S Ii:1:001:1 -115:2048 4 <
ce399e80 1945461608 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce399e80 1945461669 C Ci:1:001:0 0 4 = 03051200
ce399800 1945521545 S Co:1:001:0 s 23 01 0014 0001 0000 0
ce399800 1945521636 C Co:1:001:0 0 0
ce399800 1945521697 S Co:1:000:0 s 00 05 0004 0000 0000 0    设置地址
ce399800 1945521972 C Co:1:000:0 0 0
ce399e80 1945541595 S Ci:1:004:0 s 80 06 0100 0000 0012 18 <
ce399e80 1945542205 C Ci:1:004:0 0 18 = 12011002 00000040 0c090010 00110102 0301
ce399e80 1945542297 S Ci:1:004:0 s 80 06 0f00 0000 0005 5 <
ce399e80 1945542846 C Ci:1:004:0 0 5 = 050f1600 02
ce399e80 1945542938 S Ci:1:004:0 s 80 06 0f00 0000 0016 22 <
ce399e80 1945543487 C Ci:1:004:0 0 22 = 050f1600 02071002 02000000 0a100300 0c000204 0400
ce399e80 1945543579 S Ci:1:004:0 s 80 06 0200 0000 0009 9 <
ce399e80 1945544097 C Ci:1:004:0 0 9 = 09022000 01010080 96
ce399e80 1945544189 S Ci:1:004:0 s 80 06 0200 0000 0020 32 <
ce399e80 1945544738 C Ci:1:004:0 0 32 = 09022000 01010080 96090400 00020806 50000705 01020002 00070582 02000200
ce399800 1945544830 S Ci:1:004:0 s 80 06 0300 0000 00ff 255 <
ce399800 1945545410 C Ci:1:004:0 0 4 = 04030904
ce399800 1945545471 S Ci:1:004:0 s 80 06 0302 0409 00ff 255 <
ce399800 1945546051 C Ci:1:004:0 0 32 = 20034600 6c006100 73006800 20004400 72006900 76006500 20004600 49005400
ce399800 1945546142 S Ci:1:004:0 s 80 06 0301 0409 00ff 255 <
ce399800 1945546691 C Ci:1:004:0 0 16 = 10035300 61006d00 73007500 6e006700
ce399800 1945546752 S Ci:1:004:0 s 80 06 0303 0409 00ff 255 <
ce399800 1945547332 C Ci:1:004:0 0 34 = 22033000 33003100 38003300 31003800 30003300 30003000 30003000 31003200
ce399e00 1945548126 S Co:1:004:0 s 00 09 0001 0000 0000 0
ce399e00 1945548889 C Co:1:004:0 0 0
ce399400 1945550048 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce399400 1945550079 C Ci:1:001:0 0 4 = 03050200
ce399400 1945550109 S Co:1:001:0 s 23 01 0011 0001 0000 0
ce399400 1945550109 C Co:1:001:0 0 0

ce399600 1946541564 S Ci:1:004:0 s a1 fe 0000 0000 0001 1 <
ce399600 1946542114 C Ci:1:004:0 0 1 = 00
ce399600 1946542449 S Bo:1:004:1 -115 31 = 55534243 01000000 24000000 80000612 00000024 00000000 00000000 000000
ce399600 1946542510 C Bo:1:004:1 0 31 >
ce399200 1946542510 S Bi:1:004:2 -115 36 <
ce399200 1946760925 C Bi:1:004:2 0 36 = 00800602 1f736d69 53616d73 756e6720 466c6173 68204472 69766520 46495420
ce399600 1946760986 S Bi:1:004:2 -115 13 <
ce399600 1946761138 C Bi:1:004:2 0 13 = 55534253 01000000 00000000 00
ce399600 1946762145 S Bo:1:004:1 -115 31 = 55534243 02000000 00000000 00000600 00000000 00000000 00000000 000000
ce399600 1946762207 C Bo:1:004:1 0 31 >
ce399600 1946762268 S Bi:1:004:2 -115 13 <
ce399600 1946762329 C Bi:1:004:2 0 13 = 55534253 02000000 00000000 00
ce399600 1946762451 S Bo:1:004:1 -115 31 = 55534243 03000000 08000000 80000a25 00000000 00000000 00000000 000000
ce399600 1946762481 C Bo:1:004:1 0 31 >
ce39e080 1946762573 S Bi:1:004:2 -115 8 <
ce39e080 1946763000 C Bi:1:004:2 0 8 = 03bc3fff 00000200
ce399600 1946763031 S Bi:1:004:2 -115 13 <
ce399600 1946763061 C Bi:1:004:2 0 13 = 55534253 03000000 00000000 00
ce399600 1946763305 S Bo:1:004:1 -115 31 = 55534243 04000000 c0000000 8000061a 003f00c0 00000000 00000000 000000
ce399600 1946763336 C Bo:1:004:1 0 31 >
ce39e900 1946763397 S Bi:1:004:2 -115 192 <
ce39e900 1946763824 C Bi:1:004:2 -121 68 = 43000000 051e0000 103f0200 3fff0000 00000000 00000000 00000000 00000000
ce399600 1946763854 S Bi:1:004:2 -115 13 <
ce399600 1946763885 C Bi:1:004:2 0 13 = 55534253 04000000 00000000 00
ce399600 1946764099 S Bo:1:004:1 -115 31 = 55534243 05000000 c0000000 8000061a 003f00c0 00000000 00000000 000000
ce399600 1946764129 C Bo:1:004:1 0 31 >
ce39e900 1946764221 S Bi:1:004:2 -115 192 <
ce39e900 1946764617 C Bi:1:004:2 -121 68 = 43000000 051e0000 103f0200 3fff0000 00000000 00000000 00000000 00000000
ce399600 1946764678 S Bi:1:004:2 -115 13 <
ce399600 1946764678 C Bi:1:004:2 0 13 = 55534253 05000000 00000000 00
ce399600 1946765197 S Bo:1:004:1 -115 31 = 55534243 06000000 00000000 00000600 00000000 00000000 00000000 000000
ce399600 1946765258 C Bo:1:004:1 0 31 >
ce399600 1946765319 S Bi:1:004:2 -115 13 <
ce399600 1946765350 C Bi:1:004:2 0 13 = 55534253 06000000 00000000 00
ce399600 1946765563 S Bo:1:004:1 -115 31 = 55534243 07000000 00000000 0000061e 00000001 00000000 00000000 000000
ce399600 1946765594 C Bo:1:004:1 0 31 >
ce399600 1946765686 S Bi:1:004:2 -115 13 <
ce399600 1946766052 C Bi:1:004:2 0 13 = 55534253 07000000 00000000 01
ce399600 1946766082 S Bo:1:004:1 -115 31 = 55534243 08000000 60000000 80000603 00000060 00000000 00000000 000000
ce399600 1946766113 C Bo:1:004:1 0 31 >
ce39e900 1946766204 S Bi:1:004:2 -115 96 <
ce39e900 1946766632 C Bi:1:004:2 0 96 = 70000500 0000000a 00000000 20000000 00000000 00000000 00000000 00000000
ce399600 1946766662 S Bi:1:004:2 -115 13 <
ce399600 1946766693 C Bi:1:004:2 0 13 = 55534253 08000000 00000000 00
ce399600 1946766906 S Bo:1:004:1 -115 31 = 55534243 09000000 00000000 00000600 00000000 00000000 00000000 000000
ce399600 1946766937 C Bo:1:004:1 0 31 >
ce399600 1946767028 S Bi:1:004:2 -115 13 <
ce399600 1946767059 C Bi:1:004:2 0 13 = 55534253 09000000 00000000 00
ce399600 1946767272 S Bo:1:004:1 -115 31 = 55534243 0a000000 08000000 80000a25 00000000 00000000 00000000 000000
ce399600 1946767303 C Bo:1:004:1 0 31 >
ce39e900 1946767395 S Bi:1:004:2 -115 8 <
ce39e900 1946767791 C Bi:1:004:2 0 8 = 03bc3fff 00000200
ce399600 1946767822 S Bi:1:004:2 -115 13 <
ce399600 1946767852 C Bi:1:004:2 0 13 = 55534253 0a000000 00000000 00
ce399600 1946768066 S Bo:1:004:1 -115 31 = 55534243 0b000000 c0000000 8000061a 003f00c0 00000000 00000000 000000
ce399600 1946768096 C Bo:1:004:1 0 31 >
ce39e900 1946768188 S Bi:1:004:2 -115 192 <
ce39e900 1946768585 C Bi:1:004:2 -121 68 = 43000000 051e0000 103f0200 3fff0000 00000000 00000000 00000000 00000000
ce399600 1946768615 S Bi:1:004:2 -115 13 <
ce399600 1946768646 C Bi:1:004:2 0 13 = 55534253 0b000000 00000000 00
ce399600 1946768859 S Bo:1:004:1 -115 31 = 55534243 0c000000 c0000000 8000061a 003f00c0 00000000 00000000 000000
ce399600 1946768890 C Bo:1:004:1 0 31 >
ce39e900 1946768981 S Bi:1:004:2 -115 192 <
ce39e900 1946769378 C Bi:1:004:2 -121 68 = 43000000 051e0000 103f0200 3fff0000 00000000 00000000 00000000 00000000
ce399600 1946769409 S Bi:1:004:2 -115 13 <
ce399600 1946769439 C Bi:1:004:2 0 13 = 55534253 0c000000 00000000 00
ce399600 1946769744 S Bo:1:004:1 -115 31 = 55534243 0d000000 00100000 80000a28 00000000 00000008 00000000 000000
ce399600 1946769775 C Bo:1:004:1 0 31 >
ce39e900 1946769836 S Bi:1:004:2 -115 4096 <
ce39e900 1946771026 C Bi:1:004:2 0 4096 = eb5e0000 00000000 00000000 00000000 02000000 00000000 3f00ff00 00000000
ce399600 1946771087 S Bi:1:004:2 -115 13 <
ce399600 1946771118 C Bi:1:004:2 0 13 = 55534253 0d000000 00000000 00
ce399600 1946771972 S Bo:1:004:1 -115 31 = 55534243 0e000000 00000000 00000600 00000000 00000000 00000000 000000
ce399600 1946772033 C Bo:1:004:1 0 31 >
ce399600 1946772033 S Bi:1:004:2 -115 13 <
ce399600 1946772155 C Bi:1:004:2 0 13 = 55534253 0e000000 00000000 00
ce399600 1946772216 S Bo:1:004:1 -115 31 = 55534243 0f000000 00000000 00000600 00000000 00000000 00000000 000000
ce399600 1946772247 C Bo:1:004:1 0 31 >
ce399600 1946772277 S Bi:1:004:2 -115 13 <
ce399600 1946772308 C Bi:1:004:2 0 13 = 55534253 0f000000 00000000 00
ce399600 1946772430 S Bo:1:004:1 -115 31 = 55534243 10000000 08000000 80000a25 00000000 00000000 00000000 000000
ce399600 1946772460 C Bo:1:004:1 0 31 >
ce392c80 1946772460 S Bi:1:004:2 -115 8 <
ce392c80 1946772949 C Bi:1:004:2 0 8 = 03bc3fff 00000200
ce399600 1946772979 S Bi:1:004:2 -115 13 <
ce399600 1946773010 C Bi:1:004:2 0 13 = 55534253 10000000 00000000 00
ce399600 1946773132 S Bo:1:004:1 -115 31 = 55534243 11000000 c0000000 8000061a 003f00c0 00000000 00000000 000000
ce399600 1946773162 C Bo:1:004:1 0 31 >
ce392c80 1946773193 S Bi:1:004:2 -115 192 <
ce392c80 1946773651 C Bi:1:004:2 -121 68 = 43000000 051e0000 103f0200 3fff0000 00000000 00000000 00000000 00000000
ce399600 1946773681 S Bi:1:004:2 -115 13 <
ce399600 1946773712 C Bi:1:004:2 0 13 = 55534253 11000000 00000000 00
ce399600 1946773834 S Bo:1:004:1 -115 31 = 55534243 12000000 c0000000 8000061a 003f00c0 00000000 00000000 000000
ce399600 1946773864 C Bo:1:004:1 0 31 >
ce392c80 1946773864 S Bi:1:004:2 -115 192 <
ce392c80 1946774353 C Bi:1:004:2 -121 68 = 43000000 051e0000 103f0200 3fff0000 00000000 00000000 00000000 00000000
ce399600 1946774383 S Bi:1:004:2 -115 13 <
ce399600 1946774414 C Bi:1:004:2 0 13 = 55534253 12000000 00000000 00

拔掉U盘......

ce382380 2068171539 C Ii:1:001:1 0:2048 1 = 02
ce382380 2068171539 S Ii:1:001:1 -115:2048 4 <
ce392e00 2068171752 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392e00 2068171752 C Ci:1:001:0 0 4 = 00000300
ce392e00 2068171783 S Co:1:001:0 s 23 01 0010 0001 0000 0
ce392e00 2068171783 C Co:1:001:0 0 0
ce392e00 2068171783 S Co:1:001:0 s 23 01 0011 0001 0000 0
ce392e00 2068171783 C Co:1:001:0 0 0
ce392e00 2068175231 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392e00 2068175292 C Ci:1:001:0 0 4 = 00000000
ce392b00 2068211547 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068211639 C Ci:1:001:0 0 4 = 00000000
ce392b00 2068251617 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068251708 C Ci:1:001:0 0 4 = 00000000
ce392b00 2068291564 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068291656 C Ci:1:001:0 0 4 = 00000000

ce392b00 2068331542 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068331604 C Ci:1:001:0 0 4 = 00000000
ce392b00 2068331695 S Co:1:001:0 s 23 03 0008 0001 0000 0
ce392b00 2068331756 C Co:1:001:0 0 0
ce382380 2068331848 C Ii:1:001:1 -2:2048 0
ce392b00 2068331909 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068331909 C Ci:1:001:0 0 4 = 00000000
ce382380 2068331909 S Ii:1:001:1 -115:2048 4 <
ce382380 2068332092 C Ii:1:001:1 -2:2048 0
ce392b00 2068332153 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068332153 C Ci:1:001:0 0 4 = 00000000
ce382380 2068332153 S Ii:1:001:1 -115:2048 4 <
ce382380 2068332305 C Ii:1:001:1 -2:2048 0
ce392b00 2068332366 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068332397 C Ci:1:001:0 0 4 = 00000000
ce382380 2068332397 S Ii:1:001:1 -115:2048 4 <
ce382380 2068332550 C Ii:1:001:1 -2:2048 0
ce392b00 2068332611 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068332611 C Ci:1:001:0 0 4 = 00000000
ce382380 2068332611 S Ii:1:001:1 -115:2048 4 <
ce382380 2068332794 C Ii:1:001:1 -2:2048 0
ce392b00 2068332824 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068332855 C Ci:1:001:0 0 4 = 00000000
ce382380 2068332855 S Ii:1:001:1 -115:2048 4 <
ce382380 2068333007 C Ii:1:001:1 -2:2048 0
ce392b00 2068333068 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068333068 C Ci:1:001:0 0 4 = 00000000
ce382380 2068333068 S Ii:1:001:1 -115:2048 4 <
ce382380 2068333251 C Ii:1:001:1 -2:2048 0
ce392b00 2068333282 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068333312 C Ci:1:001:0 0 4 = 00000000
ce382380 2068333312 S Ii:1:001:1 -115:2048 4 <
ce382380 2068333465 C Ii:1:001:1 -2:2048 0
ce392b00 2068333526 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068333526 C Ci:1:001:0 0 4 = 00000000
ce382380 2068333526 S Ii:1:001:1 -115:2048 4 <
ce382380 2068333709 C Ii:1:001:1 -2:2048 0
ce392b00 2068333740 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068333770 C Ci:1:001:0 0 4 = 00000000
ce382380 2068333770 S Ii:1:001:1 -115:2048 4 <
ce382380 2068333923 C Ii:1:001:1 -2:2048 0
ce392b00 2068333984 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068333984 C Ci:1:001:0 0 4 = 00000000
ce382380 2068333984 S Ii:1:001:1 -115:2048 4 <
ce382380 2068334167 C Ii:1:001:1 -2:2048 0
ce392b00 2068334197 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068334228 C Ci:1:001:0 0 4 = 00000000
ce382380 2068334228 S Ii:1:001:1 -115:2048 4 <
ce382380 2068334381 C Ii:1:001:1 -2:2048 0
ce392b00 2068334442 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068334442 C Ci:1:001:0 0 4 = 00000000
ce382380 2068334442 S Ii:1:001:1 -115:2048 4 <
ce382380 2068334625 C Ii:1:001:1 -2:2048 0
ce392b00 2068334686 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068334686 C Ci:1:001:0 0 4 = 00000000
ce382380 2068334686 S Ii:1:001:1 -115:2048 4 <
ce382380 2068334869 C Ii:1:001:1 -2:2048 0
ce392b00 2068334930 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068334930 C Ci:1:001:0 0 4 = 00000000
ce382380 2068334930 S Ii:1:001:1 -115:2048 4 <
ce382380 2068335113 C Ii:1:001:1 -2:2048 0
ce392b00 2068335144 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068335174 C Ci:1:001:0 0 4 = 00000000
ce382380 2068335174 S Ii:1:001:1 -115:2048 4 <
ce382380 2068335357 C Ii:1:001:1 -2:2048 0
ce392b00 2068335418 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068335418 C Ci:1:001:0 0 4 = 00000000
ce382380 2068335418 S Ii:1:001:1 -115:2048 4 <
ce382380 2068335601 C Ii:1:001:1 -2:2048 0
ce392b00 2068335662 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068335662 C Ci:1:001:0 0 4 = 00000000
ce382380 2068335662 S Ii:1:001:1 -115:2048 4 <
ce382380 2068335815 C Ii:1:001:1 -2:2048 0
ce392b00 2068335876 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068335876 C Ci:1:001:0 0 4 = 00000000
ce382380 2068335906 S Ii:1:001:1 -115:2048 4 <
ce382380 2068336059 C Ii:1:001:1 -2:2048 0
ce392b00 2068336120 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068336120 C Ci:1:001:0 0 4 = 00000000
ce382380 2068336120 S Ii:1:001:1 -115:2048 4 <
ce382380 2068336303 C Ii:1:001:1 -2:2048 0
ce392b00 2068336364 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068336364 C Ci:1:001:0 0 4 = 00000000
ce382380 2068336364 S Ii:1:001:1 -115:2048 4 <
ce382380 2068336547 C Ii:1:001:1 -2:2048 0
ce392b00 2068336578 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068336608 C Ci:1:001:0 0 4 = 00000000
ce382380 2068336608 S Ii:1:001:1 -115:2048 4 <
ce382380 2068336700 C Ii:1:001:1 -2:2048 0
ce392b00 2068336761 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068336761 C Ci:1:001:0 0 4 = 00000000
ce382380 2068336761 S Ii:1:001:1 -115:2048 4 <
ce382380 2068336853 C Ii:1:001:1 -2:2048 0
ce392b00 2068336914 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068336914 C Ci:1:001:0 0 4 = 00000000
ce382380 2068336914 S Ii:1:001:1 -115:2048 4 <
ce382380 2068336975 C Ii:1:001:1 -2:2048 0
ce392b00 2068337036 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068337036 C Ci:1:001:0 0 4 = 00000000
ce382380 2068337036 S Ii:1:001:1 -115:2048 4 <
ce382380 2068337127 C Ii:1:001:1 -2:2048 0
ce392b00 2068337188 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068337188 C Ci:1:001:0 0 4 = 00000000
ce382380 2068337188 S Ii:1:001:1 -115:2048 4 <
ce382380 2068337280 C Ii:1:001:1 -2:2048 0
ce392b00 2068337310 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068337310 C Ci:1:001:0 0 4 = 00000000
ce382380 2068337341 S Ii:1:001:1 -115:2048 4 <
ce382380 2068337402 C Ii:1:001:1 -2:2048 0
ce392b00 2068337463 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068337463 C Ci:1:001:0 0 4 = 00000000
ce382380 2068337463 S Ii:1:001:1 -115:2048 4 <
ce382380 2068337554 C Ii:1:001:1 -2:2048 0
ce392b00 2068337615 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068337615 C Ci:1:001:0 0 4 = 00000000
ce382380 2068337615 S Ii:1:001:1 -115:2048 4 <
ce382380 2068337677 C Ii:1:001:1 -2:2048 0
ce392b00 2068337738 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068337738 C Ci:1:001:0 0 4 = 00000000
ce382380 2068337738 S Ii:1:001:1 -115:2048 4 <
ce382380 2068337829 C Ii:1:001:1 -2:2048 0
ce392b00 2068337890 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068337890 C Ci:1:001:0 0 4 = 00000000
ce382380 2068337890 S Ii:1:001:1 -115:2048 4 <
ce382380 2068337951 C Ii:1:001:1 -2:2048 0
ce392b00 2068338012 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068338012 C Ci:1:001:0 0 4 = 00000000
ce382380 2068338012 S Ii:1:001:1 -115:2048 4 <
ce382380 2068338104 C Ii:1:001:1 -2:2048 0
ce392b00 2068338165 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068338165 C Ci:1:001:0 0 4 = 00000000
ce382380 2068338165 S Ii:1:001:1 -115:2048 4 <
ce382380 2068338256 C Ii:1:001:1 -2:2048 0
ce392b00 2068338287 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068338287 C Ci:1:001:0 0 4 = 00000000
ce382380 2068338317 S Ii:1:001:1 -115:2048 4 <
ce382380 2068338378 C Ii:1:001:1 -2:2048 0
ce392b00 2068338439 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068338439 C Ci:1:001:0 0 4 = 00000000
ce382380 2068338439 S Ii:1:001:1 -115:2048 4 <
ce382380 2068338531 C Ii:1:001:1 -2:2048 0
ce392b00 2068338562 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068338592 C Ci:1:001:0 0 4 = 00000000
ce382380 2068338592 S Ii:1:001:1 -115:2048 4 <
ce382380 2068338653 C Ii:1:001:1 -2:2048 0
ce392b00 2068338714 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068338714 C Ci:1:001:0 0 4 = 00000000
ce382380 2068338714 S Ii:1:001:1 -115:2048 4 <
ce382380 2068338806 C Ii:1:001:1 -2:2048 0
ce392b00 2068338867 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068338867 C Ci:1:001:0 0 4 = 00000000
ce382380 2068338867 S Ii:1:001:1 -115:2048 4 <
ce382380 2068338928 C Ii:1:001:1 -2:2048 0
ce392b00 2068338989 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068338989 C Ci:1:001:0 0 4 = 00000000
ce382380 2068338989 S Ii:1:001:1 -115:2048 4 <
ce382380 2068339080 C Ii:1:001:1 -2:2048 0
ce392b00 2068339141 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068339141 C Ci:1:001:0 0 4 = 00000000
ce382380 2068339141 S Ii:1:001:1 -115:2048 4 <
ce382380 2068339233 C Ii:1:001:1 -2:2048 0
ce392b00 2068339263 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068339294 C Ci:1:001:0 0 4 = 00000000
ce382380 2068339294 S Ii:1:001:1 -115:2048 4 <
ce382380 2068339355 C Ii:1:001:1 -2:2048 0
ce392b00 2068339416 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068339416 C Ci:1:001:0 0 4 = 00000000
ce382380 2068339416 S Ii:1:001:1 -115:2048 4 <
ce382380 2068339508 C Ii:1:001:1 -2:2048 0
ce392b00 2068339569 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068339569 C Ci:1:001:0 0 4 = 00000000
ce382380 2068339569 S Ii:1:001:1 -115:2048 4 <
ce382380 2068339630 C Ii:1:001:1 -2:2048 0
ce392b00 2068339691 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068339691 C Ci:1:001:0 0 4 = 00000000
ce382380 2068339691 S Ii:1:001:1 -115:2048 4 <
ce382380 2068339782 C Ii:1:001:1 -2:2048 0
ce392b00 2068339843 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068339843 C Ci:1:001:0 0 4 = 00000000
ce382380 2068339843 S Ii:1:001:1 -115:2048 4 <
ce382380 2068339935 C Ii:1:001:1 -2:2048 0
ce392b00 2068339965 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068339965 C Ci:1:001:0 0 4 = 00000000
ce382380 2068339996 S Ii:1:001:1 -115:2048 4 <
ce382380 2068340057 C Ii:1:001:1 -2:2048 0
ce392b00 2068340179 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <
ce392b00 2068340179 C Ci:1:001:0 0 4 = 00000000
ce382380 2068340179 S Ii:1:001:1 -115:2048 4 <
ce382380 2068340270 C Ii:1:001:1 -2:2048 0
ce392b00 2068340301 S Ci:1:001:0 s a3 00 0000 0001 0004 4 <

usbmon-U盘log

原文地址:https://www.cnblogs.com/vedic/p/10956312.html

时间: 2024-10-18 00:00:57

USB之设备插入波形变化2的相关文章

vc检测USB设备插入或移除

vc检测USB设备插入或移除[喝小酒的网摘]http://blog.hehehehehe.cn/a/412.htm 1.添加消息映射 消息映射BEGIN_MESSAGE_MAP(CONSTNETCNDlg, CDialog)//{{AFX_MSG_MAP(CONSTNETCNDlg)ON_WM_PAINT()ON_WM_QUERYDRAGICON()...ON_WM_DEVICECHANGE()//}}AFX_MSG_MAP 声明消息响应函数:afx_msg BOOL OnDeviceChang

QT 监听 USB 设备 插入、拔出动作

参考网上资料,通过QT 实现 #ifndef WIDGET_H #define WIDGET_H #include <QtGui/QWidget> #include <windows.h> #include <QString> class Widget : public QWidget { Q_OBJECT public: Widget(QWidget *parent = 0); ~Widget(); protected: bool winEvent(MSG *msg,

shell判断USB接口是否有设备插入

#/bin/sh usb_num=$(cat /proc/scsi/scsi | grep "Vendor" | wc -l)if [ $usb_num = 2 ];then    echo "test usb success"else    echo "test usb failed"fi判断USB接口是否有设备插入,usb_num为检查到的USB设备个数. 原文地址:https://www.cnblogs.com/codeking100/p/

USB鼠标设备简单驱动设计

USB(Universal Serial Bus ),通用串行总线,是一种外部总线标准,用于规范电脑与外部设备的连接和通讯.是在1994年底由英特尔.康柏.IBM.Microsoft等多家公司联合提出的,自1996年推出后,已成功替代串口和并口,成为当今个人电脑和大量智能设备的必配接口之一. linux内核支持两种类型的USB驱动程序,一种是PC机的USB驱动程序控制插入其中的USB设备,另一种是USB设备和主机通信. 第一种软件架构                               

树莓派-USB存储设备自动挂载

简单介绍实现命令行下USB存储设备自动挂载的方法,Linux gnome/kde窗口环境下有移动存储的管理程序,可以实现自动挂载移动存储设备,但是在命令行下 通常需要用mount命令手动挂载USB存储设备. 通过给linux下的设备管理服务udev添加规则配置文件,可以实现命令行下USB存储设备自动挂载. 输入命令: sudo vim /etc/udev/rules.d/10-usbstorage.rules 写入如下脚本到编辑窗口 KERNEL!="sd*", GOTO="

stm32 USB hid设备与PC进行双向数据传输时PC不识别USB设备

stm32 USB hid设备与PC进行双向数据传输时PC不识别USB设备,或者开始时识别,拔出后再插入就没有反应了,就连鼠标U盘也没有反应. 我的问题是,我安装了VMware虚拟机,并进行USB设备的分配,使得虚拟机系统也识别USB设备. 所以,解决问题的办法如下: 在<属性>中选择禁用. 然后把下面的VMware Workstation Server 也禁用了.重启电脑就OK了.

Raspberry Pi 自动挂载USB存储设备

简单介绍实现命令行下USB存储设备自动挂载的方法,Linux gnome/kde窗口环境下有移动存储的管理程序,可以实现自动挂载移动存储设备,但是在命令行下 通常需要用mount命令手动挂载USB存储设备. 通过给linux下的设备管理服务udev添加规则配置文件,可以实现命令行下USB存储设备自动挂载 创建10-usbstorage.rules sudo vim /etc/udev/rules.d/10-usbstorage.rules 复制粘贴以下代码 KERNEL!="sd*",

控制器没有足够的带宽可利用为USB大容量存储设备的解决方法

伴随网盘时代的没落,最近刚入手了一个移动硬盘.现在的移动硬盘都是USB3.0,传输速度比USB2.0要快很多.但是链接笔记本电脑后发现传输速度在20MB/s左右,跟USB2.0速度差不多,并不能达到传说中70-80MB/s.而且刚插入电脑的时候会弹出提示“控制器没有足够的带宽可利用为USB大容量存储设备”. 其实这样可以看出,硬件是支持USB3.0的,那么问题肯定是在软件方面,所以自然而然就想到了驱动的问题,网上百度的USB3.0万能驱动貌似没有效果,后来使用了笔记本官网的USB3.0驱动就ok

浅析USB之设备枚举

当一个USB设备插入主机后,会有以下活动: 配上状态图