USB

1、 Linux中的USB设备驱动
我们再看看下面的图,我们基本了解了一下EHCI和如何将EHCI驱动起来,上EHCI驱动上面是USB核心,这一块是USB中最复杂的一块了,所幸他是与硬件无关的,作为一个普普通通的驱动工程师,只需要知道他提供
上面的交互过程其实很复杂,还可以细分。我们需要注意的是在主机给设备分配地址前设备使用的是0号地址,这是个公共地址,任何设备在刚接入的时该都会使用这个地址,并且一次只能有一个设备在使用0地址,主要发出复位指令时才会给设备分配一个新的地址。设备枚举的过程主要是对设备的各种描述符进行解析,最后找到设备驱动程序。

USB设备驱动和USB gadge驱动应该是我们接触得最多的与usb相关的驱动,这也是初学者很容易混淆的两个概念,再看下面这张图。

从图中可以看出,USB设备驱动和USB gadge驱动处在平等对话的位置,usb主机侧的usb核心层和USB设备侧的gadge层都是为了给这两者能够对上话提供服务。我们完全可以把USB核 心层和gadge层以下的部份当作一个黑盒子,这样USB设备驱动就和其它的设备驱动没有什么区别了,只是数据通路走的是USB总线。

在linux中,使用usb总线作为数据通路最重要的一点就是控制urb,在驱动层,对usb的控制就是操控urb,控制urb的api前面己经列举过,有两点需要特别注意,一是等时传输的urb要手动初始化。二是中断传输的urb中有一个回调函数,这个回调函数会在有中断传输数据到达时被usb核心调用。内核中有一个drivers/usb/usb-skeleton.c的例子,是一个很好的参照。

usb-gadge就要稍稍复杂一点,除了通路的问题,你可能还要准备好各种配置(设备描述符,配置描述符,端点描述符等)。最后不要忘了,USB设备驱动和gadge驱动有本质的区别,USB设备驱动是运行在主机侧,向用户层提供设备接口,而usb-gadge驱动则是作为一个设备的固件运行在设备侧。这是最基本的,如果这一点不清楚最好先不要碰USB。

usb-gadge驱动的技术和usb设备固件技术有很多相同之处,这也是中国研发人员投入精力最多的地方,市面上的很多USB的资料都会讲这一块,也只会讲这一块,很多资料中提到的USB控制器其实都是从控制器,用来设计USB设备的,这一点要特别注意。
 
本篇文章来源于:开发学院 http://edu.codepub.com   原文链接:http://edu.codepub.com/2010/0830/25532_2.php

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值