mini2440 usb host device controller驱动分析(二) -----数据(urb)的收发流程

本文深入分析了USB主机控制器在mini2440平台上的数据收发流程,重点讲解了URB(USB Request Block)如何通过usb_submit_urb函数进行读写操作,并涉及异步处理及回调函数的工作机制。在完成传输后,详细阐述了中断处理过程,尤其是write back of done head中断如何触发urb的complete回调函数,从而完成数据处理。
摘要由CSDN通过智能技术生成

这节分析urb的收发流程。

我们首先知道对于usb device 来讲,读写数据用到的是usb_request。而对于usb host来讲,读写数据用到的是urb,有些类似于网络中skbuff。

无论是进行 读还是写 用到的函数都是 usb_submit_urb。在urb结构体中有一个回调函数指针complete。(usb_request中也有一个回调函数指针)这样,对于一个写请求,complete函数表示写请求结束。对于读请求,complete函数表示要读的数据已经读到,通常在complete函数中进行处理。 因此,无论读写都可以通过usb_submit_urb来实现。既然有回调函数,那么usb_submit_urb就是异步的。

下面,我们来看usb_submit_urb的实现。usb_submit_urb 最终会调用usb_hcd_submit_urb。

int usb_hcd_submit_urb (struct urb *urb, gfp_t mem_flags)
{
	int			status;
	struct usb_hcd		*hcd = bus_to_hcd(urb->dev->bus);

	usb_get_urb(urb);
	atomic_inc(&urb->use_count);
	atomic_inc(&urb->dev->urbnum);
	usbmon_urb_submit(&hcd->self, urb);

	status
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值