『USB3.0Cypress』USB原理(3)设备连接、传输类型

在这里插入图片描述

1.点对点通信模型

一个点对点通信模型如下,有三个关键点,通信的双方A、B,通信的通道以及数据传输。不同的通信介质,不同的传输协议具体传输实现的细节、要求以及适用的场景都有所区别。在无线通信领域,通信的介质是微波,常见的无线通信协议有bluetooth、zigbee、ant协议,还有局域网中的WLAN,以及基站用到的3G、4G、5G协议簇等等。而在有线通信中,UART、SPI、IIC等通信也都不外乎这个基础模型。在网络应用中,传输协议TCP、UDP在这个模型基础上有了区别,即TCP是面向连接,要管理维护连接,而UDP是无连接,也就是下图中的连线是存在的,但通信的双方并不关注而已。而当这个基础模型适用于USB通信的时候,每个要素都赋予了新的含义。首先来说通信的双方A和B。USB是一种主从结构,主机叫Host,从机叫Device,所以我们经常把从机叫做设备。USB数据通信只能发生在主机与从机之间(新的USB扩展规范USB OTG可以实现主机与主机之间通信,但实质也是通过设备作为媒介实现),所有的数据通信都由主机发起,而从机只能被动地应答。通常,通信的双方是电脑端与USB设备,因此,准确的说通信的双方是主机软件与设备上的端点。USB数据在主机软件与USB设备特定的端点间被传输。主机软件与USB设备特定的端点间的关联叫做pipes。一个USB设备可以有多个管道(pipes)。对于数据传输,USB规定了自己帧格式、对不同传输类型做了分类,后续原理篇一一介绍。
在这里插入图片描述

对于像串口类似的简单的通信,双方设备支持串口协议,仅需基本配置一致,物理上连线即可通信。对于USB通信,由于它涵盖的范围广,支持的设备多,通信速率快,适用场景丰富,因此从设备上电、标准请求、连接建立、设备枚举、数据通信都有其自身的概念和术语,下面各节将按照这个逻辑依次说明

2.连接建立过程

USB架构中(前面已介绍), hub负责检测设备的连接和断开,利用其中断IN端点(Interrupt IN Endpoint)来向主机(Host)报告。在系统启动时,主机轮询它的根hub(Root Hub)的状态看是否有设备(包括子hub和子hub上的设备)连接。主机检测到D+与D-之间有电压差,就认为有新的设置接入。 一旦获悉有新设备连接上来,主机就会发送一系列的 请求(Resqusts) 给设备所挂载到的hub,再由hub建立起一条连接主机(Host)和设备(Device)之间的通信通道(pipe)。然后主机以控制传输(Control Transfer)的方式,通过端点0(Endpoint 0)对设备发送各种请求,设备收到主机发来的请求后回复相应的信息,进行枚举(Enumerate)操作。所有USB设备必须支持标准请求(StandardRequests),控制传输方式(Control Transfer)和端点0(Endpoint 0)。本段落中加粗字体是提到的新概念,在描述设备连接建立的过程中他们都联系在一起,本篇及后续文章会介绍这些概念,这里注意他们之间的关系。"请求"是指标准请求,下一篇文章介绍;"控制传输"是四种传输类型中的一种,不同传输模式对应不同任务,传输的数据类型有所不同,本文第四节介绍。所谓枚举,就是从设备读取一些信息,知道设备是什么样的设备,如何进行通信,这样主机就可以根据这些信息来加载合适的驱动程序,这些信息的组织结构叫做 描述符(标准请求后一篇文章介绍) 。调试USB设备,很重要的一点就是USB的枚举过程,只要枚举成功了,那么就已经成功大半了。

3.设备插入

  1. 用户插入USB(设备处于上电状态,端口不工作),Hub检测各个端口(能判断是什么设备)并用中断端点向host报告各个端口状态。
  2. host发送request(Get_Port_Status)请求连接设备,hub回复设备速度类型信息。
  3. host等待100ms,让电源稳定,发送复位请求(Set_Port_Feature)到设备(单对单),host不断查询设备复位状态(Get_Port_Status请求),hub持续10ms复位,当撤销后设备就处于默认/空闲状态(Default state),准备接收主机发来的请求。
  4. 主机发送Get Descriptor请求获取默认管道的最大包长度 ,再次复位,再次复位的目的是使设备进入一个确定的状态(不是规定的状态,是windows的行为)。
  5. Host通过Set_Address请求向设备分配一个唯一的地址。在完成这次传输之后,设备进入地址状态(Address state),之后就启用新地址继续与主机通信。这个地址对于设备来说是终生制的,设备在,地址在;设备消失(被拔出,复位,系统重启),地址被收回。同一个设备当再次被枚举后得到的地址不一定是上次那个了。
  6. 然后正式进入描述符的解析,主机发送 Get_Descriptor请求到新地址读取设备描述符,这次主机发送Get_Descriptor请求可算是诚心,它会认真解析设备描述符的内容。设备接到包后就开始解析包(其实就是你在固件程序里判断处理) ,然后按固定格式返回自己设备的设备描述符, 这一步主要是主机知道你的USB设备的基础属性。设备描述符内信息包括端点0的最大包长度,设备所支持的配置(Configuration)个数,设备类型,VID(Vendor ID,由USB-IF分配), PID(Product ID,由厂商自己定制)等信息。之后主机发送Get_Descriptor请求,读取配置描述符(Configuration Descriptor),字符串等,逐一了解设备更详细的信息。
  7. 主机通过解析描述符后对设备有了足够的了解,选择一个最合适的驱动给设备。 然后tell the world(announce_device)说明设备已经找到了,最后调用设备模型提供的接口device_add将设备添加到 usb 总线的设备列表里,然后 usb总线会遍历驱动列表里的每个驱动,调用自己的 matc(usb_device_match) 函数看它们和你的设备或接口是否匹配,匹配的话调用device_bind_driver函数,现在就将控制权交到设备驱动了。(读完设备描述符,控制权交给驱动,设备进入配置状态)驱动(注意,这里是驱动,之后的事情都是有驱动来接管负责与设备的通信)。
  8. 根据前面设备回复的信息,发送Set_Configuration请求来正式确定选择设备的哪个配置(Configuration)作为工作配置(对于大多数设备来说,一般只有一个配置被定义)。至此,设备处于配置状态(Configured),当然,设备也应该使能它的各个接口(Interface)。

4.四种传输模式

USB设备驱动向USB控制器驱动请求的每次传输被称为一个事务(Transaction), 事务有四种类型,分别是Bulk Transaction、Control Transaction、Interrupt Transaction和Isochronous Transaction。 每次事务都会分解成若干个数据包在USB总线上传输。每次传输必须历经两个或三个部分,第一部分是USB控制器向USB设备发出命令,第二部分是USB控制器和USB设备之间传递读写请求,其方向主要看第一部分的命令是读还是写,第二部分有时候可以没有。第三部分是握手信号。注意是从USB3.0开始,支持四种传输模式,分别具有自身特点,适用于不同传输需求的场合。
Bulk传输事务
顾名思义,该种事务传输主要是大块的数据,传送这种事务的管道叫做Bulk管道。主要应用在数据大量传输传输和接受数据上,同时又没有带宽和间隔时间要求的情况下,要求保证传输,打印机和扫描仪属于这种类型,这种类型的设备适合于传输非常慢和大量被延迟的传输,可以等到所有其它类型的数据的传输完成之后再传输和接收数据。
控制传输事务
控制传输是负责向USB设置一些控制信息,传送这种事务的管道是控制管道。在每个USB设备中都会有控制管道,也就是说控制管道在USB设备中是必须的。控制传输也分为三个阶段,即令牌阶段、数据传送阶段、握手阶段。一般是交互一些控制信息,不作自定义应用。
中断传输事务
在USB设备中,有种处理机制类似于PCI中断的机制,这就是中断事务。中断事务的数据量很小,一般用于通知Host某个事件的来临,例如USB鼠标,鼠标移动或者鼠标单击等操作都会通过中断管道来向Host传送事件。在中断事务中,也分为三个阶段,即令牌阶段、数据传输阶段、握手阶段。
同步传输事务
USB设备中还有一种事务叫同步传输事务,这种事务能保证传输的同步性。例如,在USB摄像头中传输视频数据的时候会采用这种事务,这种事务能保证每秒有固定的传输量,但与Bulk传输不同,它允许有一定的误码率,这样符合视频会议等传输的需求,因为视频会议首先要保证实时性,在一定条件下,允许有一定的误码率。同步传输事务有只有两个阶段,即令牌阶段、数据阶段,因为不关心数据的正确性,故没有握手阶段。

5.传送门

END

🔈文章原创,首发于CSDN论坛。
🔈欢迎点赞❤❤收藏⭐⭐打赏💴💴!
🔈欢迎评论区或私信指出错误❌,提出宝贵意见或疑问❓。


  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Cypress USB芯片是一种高性能的USB解决方案。它由美国半导体公司Cypress Semiconductor Corporation开发和生产。 Cypress USB芯片具有可靠性高、性能出色、应用广泛等特点。它能够实现高速数据传输和稳定连接,支持USB 2.0、USB 3.0USB 3.1等多种协议,满足不同设备的需求。 Cypress USB芯片在各种应用中被广泛使用。它们可以用于个人电脑、平板电脑、手机、摄像头、外部存储设备等各种USB设备中。此外,由于Cypress USB芯片可编程性强,也可以用于一些特定领域的应用,例如工业自动化和医疗设备等。 Cypress USB芯片系列包括FX2LP、FX3、EZ-USB FX3S、EZ-USB HX3等。FX2LP是一款高集成度的USB控制器,适合低速和全速USB应用。FX2LP具有灵活的配置和丰富的接口选择,可与各种外围设备进行高效通信。 FX3是一款超高速的USB 3.0控制器,支持5Gbps的数据传输速率。它还具有片上RAM和集成的ARM处理器,可通过固件进行灵活配置。FX3适用于对数据传输速度有较高要求的应用,如高清视频采集和数据存储等。 EZ-USB FX3S是FX3的低功耗版本,适用于对功耗要求较高的应用场景。EZ-USB HX3是一款USB集线器控制器,可一对多地进行USB连接,适用于需要连接多个USB设备的应用。 总的来说,Cypress USB芯片是一种可靠、高性能的USB解决方案,广泛应用于各种USB设备和特定领域的应用中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瑾芳玉洁错过的烟火

原创不易,请多支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值