【新版CH554评测】--5.1、USB host例程学习及验证--枚举
[复制链接]
本帖最后由 yang_alex 于 2018-5-18 23:00 编辑
CH554的功能太强了!除了可以做USBDEVICE之外,还可以做USB HOST!所以评估板上有一个标准USB母座了,通过这个USB HOST,可以接入一些简单的USB DEVICE 设备,比如USB键盘、USB鼠标、USB游戏手柄。U盘就算了吧,如果非要用U盘,还是上CH559吧,CH554的小身板扛不起U盘的应用。
前面说过,在从设备插入主设备(这里主要是PC)时,主从设备之间是有个交互的,主要内容是从设备告诉主设备:我是谁、我需要什么、我能干什么。
但是不是说从设备一插入主设备就开讲:我是谁、我需要什么、我能干什么。(你以为你是美国啊?)
我们还是要讲礼貌的:
从设备插入主设备,举手:嗨!打扰一下。
主设备看到了:哦,告诉我你是谁。
从设备:我是XXX。
主设备:哦,这里太吵了,我们换个地方聊,地方在AAA。
主设备来到AAA。
从设备来到AAA。
主设备:这里安静多了,重新介绍一下你自己把()。
从设备:。。。。
主设备:。。。。
。。。。。。
这个过程我们叫枚举。枚举的详细过程如下:
1)主设备的HUB检测到新的从设备插入
主设备的HUB监视着每个USB端口的信号电压,当有新的从设备插入时主设备的HUB就可以检测到。(主设备的HUB端口的两根信号线的每一根都有15kΩ的下拉电阻,而每一个从设备在D+都有一个1.5kΩ的上拉电阻。当新的从设备插入主设备或用USB线将主设备和从设备接通后,从设备的上拉电阻使信号线的电位升高,因此被主设备的HUB检测到。)
(2)主设备知道了有新的从设备插入后
主设备的HUB用中断传输来报告在HUB上的事件。当主设备知道了这个事件,它给HUB发送一个Get_Status请求来了解更多的消息。返回的消息告诉主设备一个新的从设备是什么时候连接的。
(3)主设备的HUB重新设置这个新的从设备
当主设备知道有一个新的从设备插入时,主设备给HUB发送一个Set_Feature请求,请求HUB来重新设置端口。HUB使得从设备的USB数据线处于重启(RESET)状态至少10ms。
(4)主设备的HUB在从设备和主设备之间建立一个信号通路
主设备发送一个Get_Status请求来验证从设备是否激起重启状态。返回的数据有一位表示从设备仍然处于重启状态。当HUB释放了重启状态,从设备就处于默认状态了,即从设备已经准备好通过Endpoint 0 的默认流程响应控制传输。即从设备现在使用默认地址0x0与主设备通信。
(5)主设备的HUB检测从设备速度
主设备的HUB通过测定那根信号线(D+或D-)在空闲时有更高的电压来检测从设备是低速设备还是全速设备。(全速和高速设备D+有上拉电阻,低速设备D-有上拉电阻)。
再接下来,就需要从设备的软件参与了
(6)获取最大数据包长度
主设备向地址0发送USB协议规定的Get_Device_Descriptor命令,以取得缺省控制管道所支持的最大数据包长度,并在有限的时间内等待从设备的响应,该长度包含在设备描述符的bMaxPacketSize0字段中,其地址偏移量为7,所以这时主设备只需读取该描述符的前8个字节。注意,主设备一次只能枚举一个从设备,所以同一时刻只能有一个从设备使用缺省地址0。
以下操作雷同,只是不同操作系统设定时延是不一样的。如果从设备没有反应,主设备就再发送一次命令,重复三次。
(7)主设备分配一个新的地址给从设备
主设备通过发送一个Set_Address请求来分配一个唯一的地址给设备。从设备读取这个请求,返回一个确认,并保存新的地址。从此开始所有通信都使用这个新地址。
(8)主设备向新地址重新发送Get_Device_Descriptor命令
此次读取从设备的设备描述符的全部字段,以了解该从设备的总体信息,如VID,PID。
(9)主设备向从设备循环发送Get_Device_Configuration命令,要求从设备回答,以读取全部配置信息。
(10)主设备发送Get_Device_String命令,获得从设备的字符集描述(unicode),比如产商、产品描述、型号等等。
(11)根据从设备的Device_Descriptor和Device_Configuration应答,主设备加载从设备的驱动,主设备发送Set_Configuration(x)命令请求为该从设备选择一个合适的配置(x代表非0的配置值)。如果配置成功,从设备进入“配置”状态,并可以和主设备软件进行数据传输。
至此,主从设备之间完成了必须进行的配置和连接工作。后面就可以相互通讯了。
注意(6)(7)(8)步骤,主机先通过地址0获取部分从设备的设备描述符,获取最大数据包长度 ,然后复位总线,通知从设备切换通讯地址,接下来使用新地址获取从设备的完整的设备描述符。
此内容由EEWORLD论坛网友yang_alex原创,如需转载或用于商业用途需征得作者同意并注明出处
|