打印
[APM32F4]

简单归纳USB设备开发必备的基础知识

[复制链接]
1007|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 Fordhs168 于 2022-11-1 14:52 编辑

#技术资源# 简单归纳了USB设备开发必备的基础知识(文字有点多,可以跟着小标题慢慢看
一、开发学习USB的一些相关网站和论坛
       a、21IC的USB专区 https://bbs.21ic.com/icfilter-typeid-53-203.html       b、其他网站CSDN等

二、USB的低速模式和全速模式,采用的是电压传输模式。高速模式,则采用的是电流传输模式。
       a、
USB传输速率:USB1.1是12M/s;USB2.0是480M/s (其他通信接口:PS2 10M/s;并口 8M/s; R-232 20KB/S)高速 480M/s,全速12M/s,低速1.5M/s
       b、平时无数据传输时,总线处于空闲状态。当需要传输一次事务时,主机发送一个令牌包,它可以是OUT令牌包、IN令牌包或者是PING令牌包,其中PING令牌包是USB2.0高速模式输出特有的,全速模式和低速模式没有这个令牌包。
       c、USB拓扑结构,一个HOST做多可接6层,每层最多允许接5个Device,总共同时可接127个Device(实际不会做到那么多)。
       d、 USB信号编码方式:反向不归零编码(0变1不变)

三、USB描述符间的关系
        a、设备描述符--决定了有多少种配置
        b、配置描述符--定义了有多少个接口
        c、接口描述符--定义了该接口有多少个端点
        d、(类特殊描述符,如果有,在接口描述符之后)
        e、端点描述符--定义端点的大小、类型
            (主机首先会获取设备描述符,再获取配置描述符,再获取接口描述符,根据配置描述符中的配置集合总长度,一次将配置描述符、接口描述符、类特殊描述符(如果有)、端点描述符一次读回)
       f、字符串描述符--是单独获取,主机发送字符串描述符请求以及字符串索引号、语言ID来获取对应的字符串描述符。


五、USB设备的枚举过程
        a、检测到USB插入,就对设备进行复位,复位后USB设备再总线上的地址为0。USB主机往地址0的设备端点0发送设备描述符的标准请求(控制传输的建立过程)。然后,USB设备收到请求,按照主机要求返回设备描述符给到主机。主机成功获取并确认正确后就返回一个0长度的确认数据包给设备,从而进入到下一阶段的设置地址阶段。
        b、主机对设备再复位一次。这时进入设置地址阶段。USB主机往地址0发出一个设置地址的请求(控制传输的建立过程),新设备地址包含在建立过程的数据包中。主机分配一个地址给刚插入的设备。USB设备收到这个建立过程后,就进入到状态过程,因为这个控制传输没有数据过程。 设备等待主机请求状态返回一个输入令牌包,收到输入令牌包后,设备就返回0长度的状态数据包。主机收到并确认,返回ACK应答包给设备,设备收到ACK后就开始启用新地址。
        c、主机再次获取设备描述符(使用新设备地址,而不是地址0)。需要获取全部18字节的设备描述符,如果端点0最大包小于18字节,主机则对此请求数据输入,发送多个IN令牌包。
        d、主机获取配置描述符,再根据配置描述符的描述获取配置集合总长度(获取配置集合)。配置集合包括配置描述符接口描述符、类特殊描述符(如果有)、端点描述符等。后三个不能单独获取,要以集合方式返回。
        e、此外,字符串描述符,报告描述符等,有的话都是要单独获取的。


六、USB包结构
  • 包的6部分组成
        a、同步字段(SYNC)--同步域告诉USB的串行接口引擎数据要开始传输了。同步主机端和设备端的数据时钟。
        b、包标识符(PID)--标识包的类型,总共8位,USB协议只用到4位(PD0~3),另外4位是PD0~3的取反,用来校验PID。
        i、USB协议规定四类包
            1、令牌包(token packet.PID1~0为01)
            2、数据包(data packet.PID1~0为11)
            3、握手包(handshake packet.PID1~0为10)
            4、特殊包(special packet.PID1~0为00)
        c、地址字段(ADDR)
        d、数据字段(DATA,包括帧号)
        e、检验字段(CRC)
        f、包结束(EOP)--全速、低速设备的EOP是一个大约为2个数据位宽度的单端0(SE0)信号。SE0就是D-D+都是低电平。
    USB2.0定义的各种PID
   

七、USB四种传输类型
        a、批量传输(批量事务bulk transation)
            i、一次批量事务有三个阶段:令牌包阶段、数据包阶段、握手包阶段。每个阶段都是独立的包。
            ii、批量输出事务
                1、发一个OUT令牌包(包含设备地址、端点号)
                2、发一个数据包(数据包类型看数据切换位)。地址和端点匹配的设备就收下这个数据包。
                3、主机切换到接受模式,等设备返回握手包
                    * 返回ACK或者NYET(高速模式下),设备解码令牌包、数据包都正确无误,并且足够缓冲区来保存数据
                    * 返回NAK,数据正确,并且没有能力接收下一次传输,没有足够的缓冲区保存数据。
                    * 返回STALL,设备数据正确,但是端点处于挂起状态。
                    * 设备检测数据有错误,不做响应,让主机等待超时
            iii、批量输入事务
                1、发一个IN令牌包(包含设备地址、端点号)
                2、主机切换到接受状态,等待设备返回数据。
        b、中断传输
         跟硬件中断是不一样的,不是设备发出的一个中断请求,而是主机设备主动保证在不大于某个时间间隔内安排一次传输。
         中断传输用于传输数据量不大,对时间比较严格的设备中。如HID设备的鼠标、键盘等。
        c、同步传输
         数据量大,实时性高的场合。数据出错不重传,没有应答包。
        d、控制传输
            i、有三个过程:建立过程,可选的数据过程,状态过程
                建立过程--使用建立事务(一个输出数据的过程),和批量传输的输出事务有几个点不一样。令牌包不一样,建立过程使用的是SETUP令牌包,数据包类型不一样,SETUP只能使 用DATA0包,握手包不一样,只能使用ACK应答(除非出错不应答)
                数据过程--(可选,控制传输可能没有数据过程),可以包含一笔或者多笔数据事务,和批量传输的批量事务一样。控制写传输中,数据过程的所有数据事务都是输出。控制读传输中,数据过程的所有数据事务都是输入。
                状态过程--也是一笔批量事务,跟数据过程相反,控制写传输在状态过程是一个批量输入事务。控制读传输在状态过程是一个批量输出事务。状态过程只是用DATA1包。
            ii、控制传输要保证数据传输的完整性。如设备枚举过程,各种描述符的获取、地址信息、设备配置信息等都是控制传输。


八、端点类型和传输类型的关系
        a、一个具体的端点,只能工作在一种传输模式下。工作在什么模式下的端点,就叫做什么端点。如控制端点、批量端点。
        b、端点0是每一个USB设备都默认的控制端点。上电就存在且可用。


九、传输类型和端点的最大包长
        a、控制传输的端点
          低速模式:固定8字节
          高速模式:固定64字节
          全速模式:8、16、32、64字节可选
        b、同步传输的端点
          低速模式:不支持同步
          高速模式:上限1024字节
          全速模式:上限1023字节
        c、中断传输的端点
          低速模式:上限8字节
          高速模式:上限1024字节
          全速模式:上限64字节
        d、批量传输的端点
          低速模式:不支持批量传输        
          高速模式:固定512字节
          全速模式:8、16、32、64字节可选










使用特权

评论回复
沙发
Fanexs168| | 2022-11-4 10:39 | 只看该作者
顶一下

使用特权

评论回复
板凳
cainiao518| | 2022-11-14 17:33 | 只看该作者
赞一个

使用特权

评论回复
地板
Peixu| | 2022-11-15 10:59 | 只看该作者
666

使用特权

评论回复
5
youtome| | 2022-12-2 21:22 | 只看该作者
如何识别USB设备的速度?               

使用特权

评论回复
6
yorkbarney| | 2022-12-2 21:30 | 只看该作者
在开发USB设备时通过设置接口芯片中相应的寄存器使端点处于不同的工作方式。

使用特权

评论回复
7
bestwell| | 2022-12-2 21:57 | 只看该作者
usb-hid开发 上位机必须装驱动吗  

使用特权

评论回复
8
earlmax| | 2022-12-2 22:27 | 只看该作者
怎么开发相关的驱动代码呢?              

使用特权

评论回复
9
chenjun89| | 2022-12-3 08:34 | 只看该作者
现在MCU的USB外设还是都是2.0的吗?

使用特权

评论回复
10
dspmana| | 2022-12-3 12:45 | 只看该作者
看那些书能快速了解单片机,设备驱动,USB开发?

使用特权

评论回复
11
jonas222| | 2022-12-3 13:35 | 只看该作者
APM32  usb otg 两块开发板之间怎么通信

使用特权

评论回复
12
bestwell| | 2022-12-3 14:19 | 只看该作者
上位机包括驱动和应用两层。               

使用特权

评论回复
13
dspmana| | 2022-12-3 15:01 | 只看该作者
APM32用stm32的库使用usb的时候需要修改哪些代码

使用特权

评论回复
14
lzmm| | 2022-12-3 15:42 | 只看该作者
单片机的USB通讯是如何实现的?

使用特权

评论回复
15
51xlf| | 2022-12-4 19:32 | 只看该作者

如何使APM32进行USB传输时提高传输速度

使用特权

评论回复
16
timfordlare| | 2022-12-4 20:12 | 只看该作者
如何使用APM32进行usb应用开发

使用特权

评论回复
17
modesty3jonah| | 2022-12-4 21:12 | 只看该作者
想实现USB复合设备,有好的解决方案吗?

使用特权

评论回复
18
albertaabbot| | 2022-12-5 21:06 | 只看该作者
如何使用APM32的USB库支持延迟HID的GET

使用特权

评论回复
19
dspmana| | 2022-12-6 13:27 | 只看该作者
APM32通过USB与stm32通讯可以吗?

使用特权

评论回复
20
robincotton| | 2022-12-6 15:08 | 只看该作者
usb-hid开发 上位机必须装驱动吗  

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

25

帖子

0

粉丝