主机
功能部件
速率
入-出方向
端点
集线器
枚举
第九章(更多关于枚举的内容)
SIE
数据触发
控制传输、批量传输、中断传输、同步传输
总线复位
USB驱动程序
主机
USB是一种“主-从”式总线,包括一个主机和多个从机。从机称作外设,在USB术语中也称作功能部件。主机称作主设备。所有USB传输都由主机启动;外设总是响应传输,不会启动传输。最常用的主机是PC机,主机通过USB-A连接器连接到下行设备。嵌入式主机不包括PC机,而是用一个微控制器作为专用主机,或许只能与一类USB设备通信。
MAX3421E与控制器连接,可构成嵌入式主机。
功能部件
功能部件是USB设备,也称作USB外设。USB外设是主机的“下行”设备,使用USB B型连接器连接。- MAX3420E是外设控制器。
- MAX3421E可作为USB主机或外设控制器。
速率
USB 2.0标准规定了以下三种传输速率:- 低速模式传输速率为1.5Mbps,多用于键盘和鼠标。
- 全速模式传输速率为12Mbps。
- 高速模式传输速率为480Mbps。
市场上关于“USB 2.0兼容”的概念有一些混乱。这种混乱源于USB标准版本的升级,首先推出的是USB 1.0,紧接着有了比1.0更理想的USB1.1。USB1.x支持低速和全速两种USB总线速度。2.0版本增加了高速模式,完全替代了1.1。所以,如果使用的是工作在12Mbps速率下的全速器件,则可认为它与USB 2.0兼容,即使许多人仅将USB 2.0用于高速(480Mbps)操作。
- MAX3420E为全速外设。
- MAX3421E为全速外设或全速/低速主机。
入-出方向
USB系统以主机为中心。因此,解释USB术语时假设面向的是主机。所以,从主机侧看,“入”表示传输方向从外设到主机;同样,“出”表示传输方向从主机到外设。当向MAX3420E写入代码装载“INFIFO”时,数据是由芯片发出的,这一定义似乎有些奇怪。然而,如果牢记主机是主控制器,就会容易理解。
端点
端点位于USB外设内部,所有通信数据的来源或目的都基于这些端点,是一个可寻址的FIFO。每个USB外设有一个唯一的地址,可能包含最多十六个端点。主机通过发出器件地址和每次数据传输的端点号,向一个具体端点(FIFO)发送数据。每个端点的地址为0到15,一个端点地址对应一个方向。所以,端点2-IN与端点2-OUT完全不同。 每个器件有一个默认的双向控制端点0,因此不存在端点0-IN和端点0-OUT。
外设中端点的编号是任意的。枚举期间外设向主机报告其端点号和特征。
MAX3420E提供以下端点:
- EP0:默认控制点(CONTROL)
- EP1-OUT
- EP2-IN
- EP3-IN
当作为外设工作时,MAX3421E提供和MAX3420E相同的端点。然而,作为主机使用时,MAX3421E用SNDFIFO和RCVFIFO向所有外围地址和端点传输数据。MAX3421E固件将功能部件地址和期望的端点号载入寄存器,然后发送数据包。
集线器
集线器扩展了USB主机所能连接设备的数量。PC机的USB控制器内置一个集线器,负责完成一些底层USB功能,如检测设备的插入或拔出。集线器以全速或高速连接到上行端口(到PC),以低速、全速或高速连接到下行端口(到外设)。PC的根集线器可为每个A型连接器提供5V、500mA电源。一个总线供电的外部集线器可为每端口提供100mA电流。由于USB为外部集线器电路分配100mA电流,因此,一个总线供电的集线器可以有四个下行端口。如果集线器有自己的电源(自供电),每个下行端口可提供高达500mA电流。
- MAX3420E固件不了解集线器上连接多少个设备。
- MAX3421E提供一种特定模式,用来同连接到集线器的低速外设通信。
枚举
插入USB设备时,主机获取连接通知,继而识别刚刚插入的是什么。主机需要得到一系列描述符(数据表),该描述符来自插入的设备,所有USB设备在插入USB端口时,主机都通过默认的CONTROL端点0与设备进行通讯。如果主机确认它从设备接收的数据正确,则配置该设备使之开始工作。如果主机认为设备的数据不正确(例如,某个描述符数据有冲突或超出了规范),则忽略该设备。这时会弹出一个对话窗,说明该USB设备出了一些问题。
第九章(关于枚举的更多信息)
USB标准的第9章定义了枚举期间主机送到外设的所有请求,以及外设响应的数据格式。如果访问USB官方网站,将找到一个名为USBCV (USB命令验证器)的软件工具,其中有一部分名为“第9章测试”。这些测试可以证明您的枚举代码是否正确。在进行USB实验室测试时也要用到USBCV。因此,如果已在自己的实验室里通过了这一USB验证,则实验室测试也不成问题。
Maxim提供关于MAX3420E的应用笔记,其中包含已通过USBCV测试的枚举代码。
SIE
SIE指串行接口引擎,是所有USB控制器内部的“核心”。SIE负责处理底层协议,如填充位,CRC生成和校验,并可发出错误报告。SIE的主要任务是将低级信号转换成字节,以供控制器使用,某些SIE会更加先进灵活。它处理的底层信号细节越多,控制固件越简单。例如,某些SIE只报告端点数据触发的结果(参见下文),并将它留给固件以确定如何处理。
数据触发
USB包从PID或ID开始。数据传输用到两种PID:DATA0和DATA1。主机和外设均包含数据触发位,每个端点一个。触发位确定这些数据PID中的哪一个用于数据传输。当外设脱离复位状态,主机和外设均将其内部数据触发位复位到零。因此,第一个传送的是DATA0 PID数据包。当数据包传输无误时(发送方接收到ACK PID信号,表明数据传输无误),发送方和接收方补偿其数据触发值。然后用DATA1 PID向端点发送第二个数据包。成功传输后,DATA0 PID和DATA1 PID数据包交替发送(或再次触发)。USB将该机制作为其误差校正的一部分。
- MAX3420E可自动保持数据触发。当重新配置器件或主机发送Clear_Feature (ENDPOINT HALT)请求时,才需要涉及固件。 MAX3420E包含寄存器位,以清除每个端点的触发位。
- 当作为主机时,一旦正确设置了端点的触发值,MAX3421E保持数据触发值。在完成到一个特定端点的传输以后,固件通常保存触发值。然后在向同一个端点传输数据之前初始化触发。向同一个端点传输多个包期间,SIE保持数据触发值。
控制传输、批量传输、中断传输、同步传输
USB有上述四种传输类型。枚举期间外设告诉主机每个端点支持哪种传输类型。只有主机能够发出控制传输,该传输由两个或三段组成。先通过设置数据包(8字节长)发送具体的主机请求。然后用一个可选数据包移动描述符表等数据。最后,用握手(状态)包终止控制传输。作为“关键”传输,控制传输有高总线优先权和最全面的误差校验。每个USB外设都需要一个默认的控制端点0。
批量传输使用流控制和误差校验移动数据。批量传输为异步方式,这意味着预定传输时间不固定或不能保证。主机安排批量传输的优先级为低。这并不说明批量传输很慢;如果总线被轻微加载,批量传输即可在所有可用带宽上进行。
实际上,中断传输和批量传输很难区分。他们之间的唯一区别是中断点包含轮询间隔值,用来告诉主机多长时间“ping”一次端点。所以批量和中断传输之间的唯一区别是主机多长时间安排一次传输。
同步(ISO)传输用于数据流,例如音频或视频,此时数据必须及时到达以避免音频或视频数据中断。当器件枚举时告诉主机其ISO端点对带宽的要求。如果带宽适当,主机保证每隔1ms发送一个USB帧,包含一个发往或来自设备的ISO数据包。ISO不使用握手(ACK/NAK)或总线重试。同步传输仅适用于全速和高速设备。
- MAX3420E (或处于外设模式下的MAX3421E)有默认的控制端点0,并且还有其它三个端点,可以用做批量或中断端点。
- MAX3421E (主机)启动向所有四种类型端点的传输。
总线复位
主机通过发出总线复位信号复位USB外设。全速和低速USB的D+和D-线上通常使用差分信号。但也有例外,总线复位和包结束信号使用的是单端零信号,此时D+和D-均为低。
- MAX3420E检测到总线复位并产生中断信号。
- 当与之连接的微控制器使记数器位置位时,MAX3421E (主机)产生一个总线复位信号,然后等待中断完成。
评论
查看更多