一个完整的usb 系统通信流程如下图所示:整个系统大致分为三层。
host
device
整个数据流向如下:
设备端:function -> usb logical device -> SIE
那么,usb framed 数据到底是怎么产生的?
第一种方式:纯软件行为,软件添加 ;
第二种方式:硬件加工,生成符合usb 协议规范的帧数据。
目前市面上大部分主流usb 控制器采用第二种方式:即 CPU 从DDR 搬运数据到usb 控制器,然后通过usb phy 模型差分信号发送出去。
了解了前面的usb 数据通信基础流程。那么接下来我们来介绍一下,什么是控制器及phy。
usb 控制器,可以简单理解为用来控制usb 逻辑及数据流传输的装置。我们可以类比其他控制器。包含几大块:
现代复杂的usb 控制器有的还内置usb phy。
所谓 phy,从字面意思就是物理接口。一般完成物理信号的转换。对于usb phy 而言,其主要完成以下工作:
一句话总结:usb phy 将usb 控制器的数据,按字usb 标准协议编码,然后转成串行差分数据,并通过D+/D- 发送出去。反之,对于从host 产生的数据,经过usb phy 解码,然后到usb 控制器,最后到我们ddr 可以访问的应用数据。
目前市面上主流的控制器与phy 大致有两种形式:
不管是内部集成,还是外部连接。我们只需要关心控制器与phy 之间的标准接口即可。对于USB2.0 一般采用 UTMI 或者UTMI+ 接口。对于usb3.0 一般采用PIPE 接口。
不管是UTMI 接口还是PIPE 接口,其都是并行的标准接口。因此我们在学习时,不用关心特定的phy, 只需要关心其对应的接口协议即可。
有关utmi 接口介绍,本文不做详细介绍。如下图是UTM function block。从图中我们可以看出,其主要的功能:
控制器与phy 连接是通过标准的接口UTMI(2.0) 或者PIPE(3.0)
整个数据流程大致如下:
发送数据:CPU 通过cpu 模式/DMA 模式 搬运数据到 USB 控制器 的端点FIFO, 然后通过UTMI 接口经过usb phy 通过usb 发到host 端
接口数据:host 到来的数据,经过usb phy 经utmi 接口转换,到usb 控制器的端点FIFO,然后通过cpu 或者dma 模式搬运到DDR
本文介绍了usb 控制器与phy 的关系。旨在帮助我们更好的理解usb 的整个数据流向。当我们在调usb 的通信时,到底在调什么?结合前面的枚举流程,来思考什么时候usb 的通信到了软件层面。
事实上,对于不调usb 控制器的厂家来说,大部分人都接触不到usb phy 的知识,因为很多原厂已经帮我们搞定。不过笔者认为,对于usb 的学习,不能只停留在软件层面,应该结合硬件对整个协议才会有一个更深入的认知。
当我们接触一款新的usb 控制器驱动时,我们应该关心什么?
后续将更新UTMI 接口介绍,敬请期待!
END
→点关注,不迷路←
文章引用微信公众号"嵌入式微处理器",如有侵权,请联系管理员删除!