总介
参考 https://blog.csdn.net/u011011827/article/details/128050613
整个过程中只有一个urb
linux函数总结 :
调用 usb_submit_urb , 对应一次 transfer
usb 波形总结:
每次 usb_submit_urb 对应一次 中断传输Transfer,
当有数据时 , 包括
1次IN Transaction
1 一次 IN令牌包
2 一次 数据包
3 一次 握手包(ACK)
当没有数据时 , 包括
1次IN Transaction
1 一次 IN令牌包
2 一次 握手包(NAK)
linux urb
- urb 的创建
对于鼠标来说
usb_mouse_probe/usbhid_start
创建urb
- urb 的发送
打开/dev 文件时, urb 被 usb_submit_urb 发出到 hcd
hcd 处理之后,将数据呈现到usb线(D- D+)上
- urb 在 usb 总线(D- D+)上的表现
没有数据时,每8ms一次的中断传输,每次都一样
参考 https://blog.csdn.net/u011011827/article/details/128194575
一次中断传输如下
NAK 之后 不会产生中断
左键按下时 ,对应三次中断传输,间隔8ms
参考 https://blog.csdn.net/u011011827/article/details/128194575
三次中断传输如下
每次中断传输 ACK 之后 , 都会产生一次中断
1ms的保活 和 8ms的中断数据传输
只要插上鼠标,
就有1ms间隔的 "保活波形",但是没有8ms间隔的中断数据传输
只要插上鼠标并开始读鼠标数据
就有1ms间隔的 "保活波形",且有8ms间隔的中断数据传输
可见 1ms 是 鼠标插入时决定的
可见 8ms 是 open时决定的