数据流通信模型
分层结构
左边是主机,由底层到高层依次是USB主机控制器(负责帧管理,数据传输管理,容错处理,总线电源管理,USB设备状态机管理),USB系统软件(包含HCD(主机控制器驱动程序)和USBD),主机的客户端驱动程序。
右边是设备,由底层到高层依次是USB设备总线接口层,USB设备逻辑层(负责管理端点,端点是设备上数据的发送点和接收点,一般是寄存器或存储区),功能接口层(接口是端点的组合,一个接口对应一个具体的功能,)。
附:下图更详细说明了主机端的客户驱动程序,USBD,HCD各自的职责和关系。
主机软件的层次关系
客户端驱动程序可以通过USBD的命令接口获得相应设备的标准设备描述符,配置描述符,字串描述符以及厂商自定义的描述符等。通过管道接口实现和主机控制器的数据传输。
客户端驱动程序可以通过USBD提供的命令接口和各种服务完成总线枚举(检测和确认USB设备)过程。
数据的传送关系
1.从逻辑角度看
从高层到底层,依次是:
主机的客户端驱动程序和设备的功能接口层传送传输(transfer)数据,通过相关功能管道(USBD会提供相应的管道接口和服务)。
主机的系统软件和USB设备逻辑层传送事务处理(transcation)数据.(USBD会提供控制管道接口和服务)。
主机控制器和设备总线接口传送包(packet)数据。(总线接口中有SIE,除了收发数据,还负责识别设备地址,PID识别,CRC判断,硬件握手等工作)。
2.从实际角度看
从主机的高层发数据到设备的高层:
如果主机的客户端驱动程序需要给设备的功能接口层发送传输(transfer)数据,那么需要先发送给主机的系统软件(USBD会提供管道接口和命令接口,让客户端驱动程序的数据通过管道传递给主机控制器),系统软件(USBD)将传输(transfer)数据拆解成事务处理(transaction),然后发给主机控制器,而HCD会提供一定的数据结构,让事务处理(transaction)拆解成包(packet),并将主机控制器驱动好(将主机控制器相关功能寄存器配置好),主机控制器就会生成帧,在总线上发起数据通信,并支持USB设备的状态转换。
然后设备的总线接口收到包(packet)后,会上传给设备逻辑层,在此被打包成事务处理(transaction),然后上传到设备的功能接口层,在此被打包成传输(transfer)数据,至此完成从主机高层到设备高层的数据发送过程。
从设备的高层发数据到主机的高层:
同理,设备的高层将数据拆解然后逐次向下传到设备的底层,发到总线上,主机底层收到后,将数据打包然后逐次向上传到主机的高层。
附:USB设备的数据传输流程
当数据包被接收到数据包缓冲区中时,SIE对数据包处理后,把和不同功能模块(接口)相关的数据送到功能模块数据缓冲区中,并告知功能模块(接口)有数据在BUF里了,然后功能模块(接口)取出数据,执行相应操作。