【RISC-V MCU CH32V103测评】 ---前进的维子---USB枚举概念
[复制链接]
【RISC-V MCU CH32V103测评】 ---前进的维子---USB枚举概念
前进的维子
2021年1月26日
前言:
目的:
第一部分:概念准备
1.1:概念汇总
1.2:概念构成和理解
1.2.1、包
1.2.2、事务
1.2.3、控制传输
1.2.4、枚举过程
第二部分:芯片特点与USB概念的结合
2.1:强制复位
2.2:操作的USB设备地址
2.3:端点和PID
2.4:接入设备的检查功能 R8_USB_MIS_ST
2.5:从哪里发 发多少
第三部分:总结
前言:
本文“维子”将给大家简单介绍一下CH32V103的USB host部分。
我们仔细看看开发板,开发板除了两个灯,连个用户按键都没有对吧。但是我们看到了两个USB口,一个TypeC口 一个 普通口。特别,这个普通U口是母头的。维子想这应该就是,这个板子故意设计的地方。那也就是说,这个芯片的USB部分是它的卖点。那么,“维子”就简单的学习了一下芯片使用手册,结合分析官方例程,这里做一个USB部分的测评。
毕竟USB的内容还是蛮多的,这篇文章只写到枚举。(本想把代码分析也写上来,篇幅太长,写不完。)
目的:
希望通过本文,读者能够:1、对USB枚举的过程有一个了解。2:对USB的某些基本概念有所了解。3:对ch32v103的USB手册和教程能有一个大体的认识。
第一部分:概念准备
说在前面,这些概念要放到脑子里理解是需要一个过程的。“维子”资质平平,理解这些概念的时候,可是认认真真的仔细思考了半天。
学习什么都不难,只要付出自己的时间都能学会,USB也不难。作为电子工程师,“快速的学习”是必备的技能。拿到一个陌生的器件,或者陌生的“协议”(USB其实也是种协议),我们必须以较短的时间弄清他的根本是什么,在应用层面要会用。
学习最好的东西是什么呢? 是前人的笔记和书籍。我手里刚好有一本《圈圈教你玩转USB》。从这本书的前面基本概念入手开始学习。
“维子”把自己学习的东西整理一下,给大家分享一下。
必须要掌握的概念和维子自己理解:(不说专业术语,专业术语自己查网上去)
1.1:概念汇总
序号
|
概念名
|
理解
|
1
|
包
|
USB通信的底层单元。数据传输的基本单元
|
2
|
事务
|
由包构成的通信单元
|
3
|
传输
|
由事务构成的通信过程
|
4
|
枚举
|
就是把设备的描述符弄到主机里面的过程
|
5
|
设备地址
|
接入的从机的地址(以,圈圈举的教学楼为例)
|
6
|
端点
|
上面的教学楼里的203教室的教室
|
7
|
描述符
|
这个不用说了就是描述符呗
|
8
|
枚举
|
枚举就是主机获取从机的各种描述的过程
|
用这个图来理解描述的关系
(本图片截取自ch32v103官方的说明文档)
1.2:概念构成和理解
1.2.1、包
包
|
1
|
同步域
|
主从两边“同步”统一思想的意思
|
2
|
PID
|
就是包的标志。就是包要干啥。
|
3
|
EOP
|
包结束。
|
枚举可能用到的PID
|
类
|
PID名字
|
说明
|
令牌类
|
SETUP
|
通知从机将要开始控制传输
|
数据类
|
DATA0/DATA1
|
0开始 然后是1 然后是0这样的
|
握手类
|
ACK
|
确认
|
1.2.2、事务
事务 (USB设备驱动 向USB控制器驱动请求的每次传输被称为一个事务(Transaction))
|
令牌包
|
谁:主机
|
启动一个事务
|
数据包
|
谁:主机/从机(令牌包定)
|
发送的数据 (有时候可以没有)
|
握手包
|
谁:数据接收方(数据包的反方)
|
ACK应答或NAK不应答
|
1.2.3、控制传输
控制传输
|
建立过程
|
主机发送令牌包SETUP
|
|
主机发送数据包:DATA0
|
|
设备返回握手包:ACK或不应答
|
|
数据过程
|
多个数据事务构成,同一方向。换向则进状态过程
|
第一包必须DATA1
|
|
|
|
状态过程
|
方向与数据过程相反。
|
只用DATA1包
|
|
|
|
应用场合
|
设备的枚举过程和对数据准确性要求较高的场合
|
1.2.4、枚举过程
过程
|
干啥
|
1
|
首次复位,和0号设备的0端点通信,获取设备描述符长度
|
2
|
二次复位,和0号设备的0端点通信,设置设备地址
|
3
|
和新地址设备的0号端点通信,再次获取设备描述符
|
4
|
获取配置描述符
|
表格里都是“维子”主机的理解。总比
第二部分:芯片特点与USB概念的结合
对于任何USB应用的芯片,都是建立在USB协议的基础上的(好有道理的废话)。这款CH32V103单片机的USB外设,就是一个让应用工程师方便使用USB的工具。具体芯片的USB的特点和使用方法,我们要认真的看官方提供的手册、说明文档。 手册不多224-239一共15页。说实话不多。我们主要看:关于枚举的部分。
先整体阅读一遍。知道:可做主,可做从,支持四种传输。寄存器分为:主寄存器、设备控制寄存器、主机控制寄存器。
我们应该关那些事情呢?1,U盘接入的时候单片机怎么知道?2:如果进行枚举的第一次复位获取设备描述符?-----也就是要复位,如果设置“端点”和“PID”然后用控制传输获取设备描述符。怎么知道传完了?用到那些寄存器。3:如何二次复位,并且发送设置设备号。4:如何获取设备描述符和获取?
好了,我们带着问题来阅读书册,将会很好理解。
2.1:强制复位
R8_UHOST_CTRL .RB_UH_BUS_RESET
2.2:操作的USB设备地址
2.3:端点和PID
2.4:接入设备的检查功能 R8_USB_MIS_ST
2.5:从哪里发 发多少
先摘抄到这里把,更详细的小伙伴们还是自己看吧。主要是帖子里加图片太费劲了。这些点可能还不全面。
第三部分:总结
本文是USB部分的的第一篇。主要是讲了一些概念,还有通信的过程中用到的的一些寄存器。希望对小伙伴有所启发。
第四部分:一些感想
1:要想读懂资料,就要把东西用自己语言表达出来。当你把你学会的东西,完整的讲给别人,并且别人能一次性的接受的视乎,才是真正的掌握了。“茶壶里煮饺子---肚里有道不出”,其实还是没彻底懂。
2:芯片的设计指导文件,就是芯片个性和脾气的表现。对指导文件越熟悉,越能体会芯片的脾气。理解越深刻。(这话是我以前的技术老板说的,很有道理)
|