USB 学习

 USB基本知识介绍 

      USB的数据交换只能是主机和设备之间(OTG除外),OTG中也是由其中的一个设备作为主设备发起对数据传输进

行控制。USB所有的数据传输都是主机发起的,设备只是被动的应答。使用差分信号传输,低速和全速模式用的是电

压信号,高速模式是电流信号。

      采用NRZI编码格式:0翻转,1不翻转。位填充:为使有利于信号提取当有超过6个连续的1时会强行插入一个0,

USB芯片进行串行化和反串行化的时候会自动处理填充位。

      USB设备未配置之前最多可以获得100ma电流,配置之后可以获得500ma电流,VDD是5V的。

      USB的连接线:VDD 红色 ,GND 黑色,D+ 绿色 D- 白色

      低速设备和全速设备的区分:D+ 上拉1.5K电阻为高速设备,D-上拉1.5K为低速设备,1.5K电阻需要电路外接或者芯片内部上拉通过软件来控制芯片是D+上拉还是D-上拉。

      主机通过描述符来获取USB设备的相关信息,描述符有设备描述符、配置描述符、接口描述符、类描述符、端点描述符,字符串描述符。设备描述符只有一个,但是配置描述符、接口描述符、端点描述符可以有多个,主机先获得设备描述符然后读取配置描述符,然后一次将配置描述符、接口描述符、类描述符(可能没有)、端点描述符一次读取出,字符串描述符单独获取。

       设备描述符主要内容:USB协议类型、VID、PID、设备类型、设备版本号(厂商自己定)端点0最大包的字节个数(枚举用),其他的索引。

       配置描述符主要内容:配置编号、接口个数、供电方方式、是否支持远程唤醒、电流大小。

       接口描述符主要内容:接口编号、端点个数、接口的类、子类

       端点描述符主要内容:端点号及方向、最大包的字节个数、查询时间间隔。鼠标端点包的最大字节个数为4,键

盘端点包的最大字节个数8,需要特别注意否则将无法通信。用STM32模拟鼠标和键盘时要特别注意。

      用STM32模拟鼠标和键盘时要将设备类型、VID和PID都要设置为不同,电脑根据VID和PID来加载不同设备的驱动,设备类型当然也不同一个鼠标一个键盘。还要修改描述符的内容具体参考《圈圈教你玩USB》、正点原子的教程还有ST官方的例程。

     

、USB通信协议的描述 

1、USB的四种通信模式:批量传输、同步、中断传输、控制传输

2、数据的基本传输单元是包,所有的包都是以同步域开始告诉设备要进行数据传输了,同步域是一串的0。

     包的结构:同步域、PID(包的类型)、数据(可能没有),CRC,EOP(结束包),数据的基本单元是包,包分成域。

      PID:令牌包、数据包、握手包(响应)、特殊包

      EOP:单向0,数据线的D+、D-,同时保持两个位时间长度的低电平,正常情况D+ 、D-是一个高电平一个低电平。

      令牌包分类:OUT(通知设备要输出数据),IN(通知设备要输入数据)、SOF(起始帧)、SETUP(开始一个控制传输)。

      数据包分类:DATA0,DATA1,DATA2*,MDATA*.

      握手包分类:ACK(准备好),NCK(未准备好),NYET(接收了当前包,但是没有空间接收下一包),STALL(挂起)。

      主机控制数据的传输,数据从主机到设备叫输出,数据从设备到主机到输入。

      由令牌包发起一次数据的传输。

      


     

三、USB设备的加载过程 

       1、USB标准设备的请求类型:请求类型(数据的方向、厂商、接收端:设备、接口还是端点),请求类型,value,index,length。标准请求主要用在枚举的过程中,是一个8字节的数据包,所以端点0的最小数据字节个数是8.

      标准请求类型共有11个,GET_STATUS(0),CLEAR_FEATURE(1),SET_FEATURE(3),SET_ADDRESS(5),GET_DESCRIPTOR(6),SET_DES

CRIPTOR(7),GET_CONFIGURATION(8),SET_CONFIGRATION(9),GET_INTERFACE(10),SET_INTERFACE(11),SYNCH_FRAME(12,同步帧)。     2、USB设备的加载过程

2、USB设备的加载过程 

       主机检测到USB设备以后对设备进行枚举也就是初始化,通过设备的描述符获得设备相关信息加载驱动。枚

举阶段通过地址0和端点0和设备进行通信。

USB设备枚举过程用的是控制传输模式,控制传输的建立需要三个阶段:建立传输、数据传输、状态控制。

      ① 主机对USB设备进行复位,将USB设备地址设置为0,然后发送令牌包setup,获取设备描述符,标注的设备描述有18个字节,但是至少有8个字节数据,第8个字节是端点0通信中数据最大包的字节个数。主机只读取一次数据,即使获得的数据个数小于18.

      ②主机再次对USB设备复位,发出设置USB设备地址的请求。

      ③主机使用新的地址再次获得设备描述符,还用端点0,如果从端点0得到设备描述符数小于18个字节将会再次发出请求。

      ④ 获取配置描述,然后再获得其他的描述符。


3、描述符的返回

      主机发出请求设备描述符后,在设备的端点0 的输出中断对请求的描述符类型进行判断,然后将内容写到端点0的数据发送缓冲区然后将端点设置为有效。在设备收到主机的IN令牌包后,将缓冲区的数据发出。

      从接收缓冲区读完数据后,需要将数据缓冲区清除。

4、USB的HID报告以及报告描述符

      USB的HID设备和主机是通过报告来传送数据的,分为输入报告和输出报告。输入报告,数据从设备到主机比如鼠标的坐标,键盘的键值。输出报告,主机到设备,键盘指示灯的点亮。

      输入报告的返回是在端点的输入中断中返回,输入中断是必须有的。

      输出报告,如果端点有输出报告中断则在端点的输出报告中断,如果没有可以在端点0发送。

      报告描述符描述了报告数据的作用,报告描述符和普通的描述符一样都是通过端点0来发送和请求数据的。


二、参考资料

    1、HID用图表      HID协议的描述,键盘的映射表

    2、正点原子的不完全手册

    3、《圈圈教你玩USB》

    4、虚拟键盘 http://www.openedv.com/posts/list/10971.htm

 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值