![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
USB驱动分析
文章平均质量分 79
ajige
这个作者很懒,什么都没留下…
展开
-
mini2440 usb host device controller驱动分析(二) -----数据(urb)的收发流程
这节分析urb的收发流程。我们首先知道对于usb device 来讲,读写数据用到的是usb_request。而对于usb host来讲,读写数据用到的是urb,有些类似于网络中skbuff。无论是进行 读还是写 用到的函数都是 usb_submit_urb。在urb结构体中有一个回调函数complete。这样,对于一个写请求,complete函数表示写请求结束。对于读请求,complete函原创 2013-10-16 17:23:48 · 3313 阅读 · 0 评论 -
s3c2440 usb host device controller驱动分析(五)-----generic driver
下面继续将一个generic driver。这个generic driver是针对usb device的。而class driver一般是针对usb interface的。其实这个generic driver主要实现的功能是 设备的枚举。struct usb_device_driver usb_generic_driver = { .name = "usb", .probe = gen原创 2013-10-17 22:29:57 · 2834 阅读 · 0 评论 -
s3c2440 usb host device controller驱动分析(六)-----usb device 和 usb interface
前面分析了usb hub 和 generic driver,顺便将枚举的前一部分看完了。本来我们应该继续分析class driver的最上层,即利用usb通信实现具体功能的驱动。我们将以usb-skeleton.c为例。但在分析usb-skeleton之前,我们注意到最上层的驱动都是针对usb interface的,usb driver里面的函数都用usb interface做参数,usb dri原创 2013-10-19 11:03:10 · 3239 阅读 · 0 评论 -
mini2440 usb device controller 驱动的分析--gadget设备(一)--device controller
USB是目前看到最复杂的驱动,内容很多,而且网上分析USB驱动的资料很少,因此我在学习的过程中走了很多弯路。在这里记录自己的学习过程,希望可以帮到其他研究USB驱动的同事。先推荐一本书:Bootstrap Yourself With Linux-USB Stack USB的驱动分成两部分:host和gadget。usb是一个host driven的协议,即host是完全主动,每次通信过程都是由host发起的,包括读和写。而device只负责回应,不能主动去读写。原创 2013-10-14 16:55:18 · 3700 阅读 · 1 评论 -
usb枚举过程 enumeration 流程说明
先转载一篇关于usb enumeration不错的文章。USB枚举过程 USB Enumeration USB架构中, hub负责检测设备的连接和断开,利用其中断IN端点(Interrupt IN Endpoint)来向主机(Host)报告。在系统启动时,主机轮询它的根hub(Root Hub)的状态看是否有设备(包括子hub和子hub上的设备)连接。USB总线拓扑结构见转载 2013-10-14 15:48:20 · 6174 阅读 · 0 评论 -
mini2440 usb host device controller驱动分析(三)-----root hub驱动的分析(一)
这里开始分析root hub的驱动。之前已经提到过每个host controller都集成有一个root hub。通过看2440的datasheet中的host controller部分,我们可以看到root hub是有相应的物理电路的,并不是host controller虚拟了一个root hub。2440的root hub共有两个port,但是在mini2440上面只连了一个host的接口。原创 2013-10-17 10:40:42 · 3830 阅读 · 0 评论 -
mini2440 usb host device controller驱动分析(四)-----root hub驱动的分析(二)
吃了饭,回来继续写。前面分析了root hub感应设备插拔的过程。root hub还有一个功能是对新插入的设备进行枚举。其实root hub完成了枚举的前几个步骤:get descriptor 、 set address 、 get configuration。 枚举的后面几个步骤是由上层的class driver来完成的,这个后面在分析。在前面的hub_port_connect_cha原创 2013-10-17 20:12:40 · 2387 阅读 · 0 评论 -
mini2440 usb device controller 驱动的分析--gadget设备(二)---枚举
有了前面的代码修改,2440就可以用作为gadget设备了。下面具体分析原创 2013-10-14 22:43:00 · 2165 阅读 · 0 评论 -
mini2440 usb device controller 驱动的分析--gadget设备(四)---class driver
这节分析loopback具体功能是怎么实现的。loopback功能的入口在这里。首先,在枚举的时候,有这样一段:switch (ctrl->bRequest) {case USB_REQ_SET_INTERFACE: if (ctrl->bRequestType != USB_RECIP_INTERFACE) goto unknown; if (!cdev->原创 2013-10-15 17:22:49 · 2590 阅读 · 0 评论 -
mini2440 usb device controller 驱动的分析--gadget设备(五)--zero和usb-skeleton测试例
前面分析了这么多,在最后贴一个zero设备的测试例,供大家参考。原创 2013-10-15 22:06:40 · 3351 阅读 · 2 评论 -
mini2440 usb host device controller驱动分析(一)---host controller
这里接着开始分析usb host端的驱动。对于USB来讲,host端的驱动比我们之前分析的gadget端的驱动要复杂的多。但是有个好处就是驱动的主体部分已经实现得很完善了,我们写自己的驱动时候需要完成的部分并不多。下面是host端驱动的结构图。其中,host controller driver对应于mini2440就是ochi-mini2440.c,host controller原创 2013-10-16 16:22:47 · 5380 阅读 · 0 评论 -
usb 枚举过程中的状态机
这篇文章介绍了usb enumeration中的状态机,也是很好的。http://blog.csdn.net/plauajoke/article/details/84392491. 枚举是什么? 枚举就是从设备读取一些信息,知道设备是什么样的设备,如何进行通信,这样主机就可以根据这些信息来加载合适的驱动程序。调试USB设备,很重要的一点就是USB的枚举过程,转载 2013-10-14 15:52:10 · 5251 阅读 · 0 评论