USB学习
USB协议基础:引用自《恶补一波USB 通信协议知识》
一 基本概念:传输,事务,包,帧:
一个传输(分4种类型)由多个事务(有IN/OUT/SETUP三类,每个事务又有多个包组成)组成。
数据包:由五部分组成,即同步字段(SYNC)、包标识符字段(PID)、数据字段、循环冗余校验字段(CRC)和包结尾字段(EOP)。
包只能在帧内传输,低/全速1MS/帧,高速125us/帧。包含SOF +中间过程+EOF.
USB通信示例:
2个虚线之间为一次传输过程包含SOF/EOF,3个/类事务过程(SETUP/IN/OUT +DATA+ACK),每个事务过程又分3个阶段(建立,数据,状态)。
二 四种传输类型:
- 控制传输:枚举阶段,主机和设备之间的配置信息,分建立,数据,状态3个阶段,每个阶段有ack/nack/stall共3种情况的反馈:
- 建立setup阶段:主机从USB设备获取配置信息,并设置设备的配置值
- 数据data阶段:主机和设备之间的数据传输,分
2.1控制读取(读取USB描述符)
2.2控制写入(配置USB设备)
2.3无数据控制
3.状态status阶段:指示传输过程结束,方向与数据阶段相反
- 批量传输:用于传输大量,传输不能出错,但对时间没有要求,适用于打印机、存储设备等,PID 按照 DATA0-DATA1-DATA0-…的方式翻转以保持主从同步,允许连续 3次以下的传输错误超过则STALL.
- 中断传输,次高的优先级,不支持PING,其它过程与批量传输同,只不过具体的(端点、支持的最大包长度、优先级不一样),是用于对设备的查询,以确定是否有数据需要传输。即中断传输方向是设备到主机。
- 同步传输:固定速率或在指定时刻抵达,可以容忍偶尔错误的数据上。实时传输一般用于麦 克风、喇叭、UVC Camera等设备。实时传输只需令牌与数据两个信息包阶段,没有握手包,故数据传错时不会重传,有最高的优先级。
stm32在外部flash上用usb实现虚拟U盘:
设置成usbd模式,用fal分区工具分区vudisk,romfs创建分路径,然后在vudisk分区上创建块设备并格式化为elm文件系统即可在pc上识别出虚拟U盘(但注意不能在指定分区,挂载点,挂载elm系统,USB组件中已经设置指定了大容量所在的分区名)