usb

HCD ; host controller drivers 主机控制器驱动

传送模式:

1. 控制传输模式,用来传送外设和主机之间的控制,转态,配置等信息。

2.批量传输模式,传输大量时延要求不高的数据

3.中断传输模式,传输数据量小,但是对传输时延敏感,要求马上响应。

4.等时传输模式,传输实时数据,传输速率要预先可知。

USB和I2C协议采用主从结构

设备地址不占用CPU寻址范围,地址位数为7位

设备内存没有映射到CPU内存和IO内存,因此不占用CPU资源

USB和PCI驱动程序结构都采用probe()函数和disconnect/remove 函数,都含识别设备的ID表。

用户空间                                                    用户应用

USB用户模式(设备驱动程序)                    /dev   ,/sys 

内核空间

usbfs usbcore

usb主机控制器驱动程序   usb客户驱动程序、


硬件

usb主机控制器 

驱动程序的数据结构

usb_device 结构体


URB:usb request block USB请求块 是USB数据传输机制使用的核心数据结构


urb 使用分三步

分配内存,初始化,提交

urb_alloc_urb()

管道 :管道是URB的重要成员,为USB数据传输提供地址信息。


端点地址

数据传输方向(in.out)

数据传输模式


linux描述结构

1.设备描述存放设备的普通信息,如产品ID和设备ID。usb_device_descriptor

2.配置描述,如设备自己供电还是总线供电,usb_config_description接口描述

3.端点描述,存放设备最终的端点信息,usb_endpoint_descriptor结构体描述。

endpoint address=1 端点地址

4. 接口描述,usb设备能支持多种功能,usb_interface_descriptor 

枚举

枚举是热插拔USB设备的起始步骤,该过程中,主机控制器获得设备的相关信息并配置好设备,设备的枚举过程如下:

1.根集线器报告插入设备导致的端口电流变化,集线器检测到这一状态百年哈,唤醒Khubd线程

2.khub识别出电流电流变化的那个端口


3.接着,khub在1-127之中挑一个数分配给驱动器的批量端点,这是通过给控制端点0发送控制URB来实现的

4.Khub利用端口0使用的控制USB从驱动器那里获得设备描述符,然后重新配置描述符,并选择一个合适的

5.Khub 请求USB核心把对应的客户驱动程序和给usb设备挂钩。


类驱动程序


1.大量存储设备


mout/dev/sda1/mnt         用户空间



/dev/sd*./dev/sr*                              内核空间


USB存储设备       硬件


USB -串行端口转换器

应用程序(系统调用接口)


N_TTY(n_tty.c) 线路规程                     核心模块(tty_io.c)


tty层 serial_core.c


底层驱动程序(8250.c)                        usb_register()


物理层 16550 (uart) 


人机接口设备


gadget驱动程序

嵌入驱动设备通过usb接口连接到主机上。嵌入式计算机被看做USB连接的设备端,而PC被看作USB连接的主机端。


数据结构


urb    include/linux/usb.h  usb数据传输机制的核心机构

pipe  include/linux/usb.h 提供URB的地址信息

usb_device_descriptor include/linux/usb/ch9.h 存放USB设备信息的描述符

usb_config_decriptor

usb_device include/linux/usb.h usb设备在内核里的抽象

usb_device_id include/linux/mod_devicetable 标示一个USB设备

usb_driver  include/linux/usb                                   usb驱动程序

usb_gadget_driver  i          include/linux/usb_gadget usb gadget驱动程序


内核编程


usb_register()       include/linux/usb.h 向UUSB核心注册usb_driver结构体

                       drivers/usb/core/driver.c  


usb_buffer_alloc()   drivers/usb/core/usb. c     分配一个一致性DMA传输缓冲区

usb_buffer_free() drivers/usb/core/usb.c    释放缓冲区

usb_alloc_urb drivers/usb./core/urb.c       创建URB


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值