Linux--USB驱动开发(一)USB简介

5 篇文章 0 订阅

一、什么是 USB

USB 全称为 Universal Serial Bus ,翻译过来就是通用串行总线。由英特尔与众多电脑公司提出来,用于规范电脑与外部设备的连接与通讯。目前 USB 接口已经得到了大范围的应用,已经是电脑、手机等终端设备的必配接口,甚至取代了大量的其他接口。

二、USB分类

按照版本划分, USB 目前可以划分为 USB1.0 USB2.0 USB3.0 以及即将到来的 USB4.0
USB1.0 USB 规范于 1995 年第一次发布,由 Inter IBM Microsoft 等公司组成的 USB-IF(USB Implement Forum)组织提出。 USB-IF 1996 年正式发布 USB1.0 ,理论速度为 1.5Mbps 。1998 年 USBIF USB1.0 的基础上提出了 USB1.1 规范。
USB2.0 USB2.0 依旧由 Inter IBM Microsoft 等公司提出并发布, USB2.0 分为两个版本:Full-Speed High-Speed ,也就是全速 (FS) 和高速 (HS) USB2.0 FS 的速度为 12Mbps USB2.0HS 速度为 480Mbps 。目前大多数单片机以及低端 Cortex-A 芯片配置的都是 USB2.0 接口,比如STM32 ALPHA 开发板所使用的 I.MX6ULL USB2.0 全面兼容 USB1.0 标准。
USB3.0 USB3.0 同样有 Inter 等公司发起的, USB3.0 最大理论传输速度为 5.0Gbps USB3.0引入了全双工数据传输,USB2.0 480Mbps 为半双工。 USB3.0 中两根线用于发送数据,另外两根用于接收数据。在 USB3.0 的基础上又提出了 USB3.1 USB3.2 等规范, USB3.1 理论传输速度提升到了 10Gbps USB3.2 理论传输速度为 20Gbps 。为了规范 USB3.0 标准的命名, USBF 公布了最新的 USB 命名规范,原来的 USB3.0 USB3.1 命名将不会采用,所有的 3.0 版本的 USB 都命名为 USB3.2 ,以前的 USB3.0 USB3.1 USB3.2 分别叫做 USB3.2 Gen USB3.2
Gen2 USB3.2 Gen 2X2
USB4.0 目前还在标准定制中,目前还没有设备搭载,据说是在 Inter 的雷电接口上改进而来。USB4.0 的速度将提升到了 40Gbps ,最高支持 100W 的供电能力,只需要一根线就可以完成数据传输与供电,极大的简化了设备之间的链接线数
如果按照接口类型划分的话 USB 就要分为很多种了,最常见的就是 USB A 插头和插座

三、USB电器电气属性

USB A 插头从左到右线序依次为 1,2,3,4 ,第 1 根线为 VBUS ,电压为5V,第 2 根线为 D- ,第 3 根线为 D+ ,第 4 根线为 GND
USB 是一种支持热插拔的总线接口,使用差分线 (D- D+) 来传输数据, USB设备 支持两种供电模式:总线供电和自供电,总线供电就是由 USB 接口为外部设备供电,在 USB2.0 下,总线供电最大可以提供 500mA 的电流。

四、USB 拓扑结构

USB 是主从结构的,也就是分为主机和从机两部分,一般主机叫做 Host ,从机叫做 Device
虽然我们可以对原生的 USB 口数量进行扩展,但是我们不能对原生 USB 口的带宽进行扩展,比如 I.MX6ULL 的两个原生 USB 口都是 USB2.0 的,带宽最大为 480Mbps,因此接到下面的所有 USB 设备总带宽最大为 480Mbps
USB 主机和从机之间的通信通过管道 (Pipe) 来完成,管道是一个逻辑概念,任何一个 USB设备一旦上电就会存在一个管道,也就是默认管道,USB 主机通过管道来获取从机的描述符、配置等信息。在主机端管道其实就是一组缓冲区,用来存放主机数据,在设备端管道对应一个特定的端点。

五、USB使用过程发现的问题

现象:把USB设备接到PC
1. 右下角弹出"发现android phone"
2. 跳出一个对话框,提示你安装驱动程序

问1. 既然还没有"驱动程序",为何能知道是"android phone"
答1. windows里已经有了USB的总线驱动程序,接入USB设备后,是"总线驱动程序"知道你是"android phone"提示你安装的是"设备驱动程序"
     USB总线驱动程序负责:识别USB设备, 给USB设备找到对应的驱动程序

问2. USB设备种类非常多,为什么一接入电脑,就能识别出来?
答2. PC和USB设备都得遵守一些规范。
     比如:USB设备接入电脑后,PC机会发出"你是什么"?
             USB设备就必须回答"我是xxx", 并且回答的语言必须是中文
             USB总线驱动程序会发出某些命令想获取设备信息(描述符),
             USB设备必须返回"描述符"给PC
     
问3. PC机上接有非常多的USB设备,怎么分辨它们?USB接口只有4条线: 5V,GND,D-,D+
答3. 每一个USB设备接入PC时,USB总线驱动程序都会给它分配一个编号 ,接在USB总线上的每一个USB设备都有自己的编号(地址),PC机想访问某个USB设备时,发出的命令都含有对应的编号(地址)

问4. USB设备刚接入PC时,还没有编号;那么PC怎么把"分配的编号"告诉它?
答4. 新接入的USB设备的默认编号是0,在未分配新编号前,PC使用0编号和它通信。

问5. 为什么一接入USB设备,PC机就能发现它?
答5. PC的USB口内部,D-和D+接有15K的下拉电阻,未接USB设备时为低电平
     USB设备的USB口内部,D-或D+接有1.5K的上拉电阻;它一接入PC,就会把PC USB口的D-或D+拉高,从硬件的角度通知PC有新设备接入

其他概念:
1. USB是主从结构的
   所有的USB传输,都是从USB主机这方发起;USB设备没有"主动"通知USB主机的能力。
   例子:USB鼠标滑动一下立刻产生数据,但是它没有能力通知PC机来读数据,只能被动地等得PC机来读。

2. USB的传输类型:
a. 控制传输:可靠,时间有保证,比如:USB设备的识别过程
b. 批量传输: 可靠, 时间没有保证, 比如:U盘
c. 中断传输:可靠,实时,比如:USB鼠标
d. 实时传输:不可靠,实时,比如:USB摄像头

3. USB传输的对象:端点(endpoint)
   我们说"读U盘"、"写U盘",可以细化为:把数据写到U盘的端点1,从U盘的端点2里读出数据
   除了端点0外,每一个端点只支持一个方向的数据传输,端点0用于控制传输,既能输出也能输入
   
4. 每一个端点都有传输类型,传输方向

5. 术语里、程序里说的输入(IN)、输出(OUT) "都是" 基于USB主机的立场说的。
   比如鼠标的数据是从鼠标传到PC机, 对应的端点称为"输入端点"
     
6. USB总线驱动程序的作用
a. 识别USB设备
b. 查找并安装对应的设备驱动程序
c. 提供USB读写函数
 

参考资料:正点原子官方文档
  • 30
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值