MUSBMHRC设计为连接到符合UTMI+规范(第3级)的收发器宏小区。它可以配置为连接到8位60MHz或16位30MHz收发器宏小区。(或者,内核可以与可选的USB 1.1全速PHY接口一起使用,如第8.1节所述。)
对于On-The-Go操作,MUSBMHRC提供:
•DRVVBUS输出,可用于“a”设备配置,将+5V驱动到USB VBus线上
•CHRGVBUS输出,可用于“B”设备配置,向VBus提供适当的脉冲以启动会话(例如,通过将VBus充电至会话启动阈值)
•DISCHRGVBUS输出,可在“B”设备配置中使用,以将VBus放电至足够低的水平,以启动会话请求协议(SRP)
•当核心用于与另一个USB设备进行点对点通信时,DPPULLDOWN和DMPULLDOWN输出用于根据需要连接/断开D+和D-线上的下拉电阻器。(这些电阻器的尺寸应在USB随身携带规范中规定。)
MUSBMHRC还具有VBUSVALID、AVALID和SESSEND输入,以识别VBus相对于On-The-Go设备会话控制中涉及的各种阈值的水平。这些信号应连接到电压比较器,电压比较器分别检测VBus电压何时高于VBus有效阈值(要求在4.4V和4.75V之间),
高于“A”设备的会话有效阈值(要求介于0.8V和2V之间),并且高于会话结束阈值(要求在0.2V和0.8V之间)。
(USB on-the-Go规范中给出了这些电压范围的公差详情。)
DRVVBUS和CHRGVBUS信号的状态反映了DevCtl寄存器中的选择。VBUSVALID、AVALID和SESSEND信号的状态可以从DevCtl寄存器的VBus[1:0]位推导出来,其值指示VBus相对于所选VBUSVALD、AVALI和SESSEN电平的当前电平。(UTMI+规范中给出了所需充电电流、定时等的详细信息。)
USB接口还具有IDDIG信号,该信号指示插入MUSBMHRC的设备是A型还是B型。当插入B型设备时,此输入应为高,当插入a型设备时该输入应为低。设备类型是通过对输入的ID行进行采样来确定的,只有在需要使用核心的IDPULLUP输出切换到ID线上的适当上拉电阻器。
做主机或外围设备
MUSBMHRC可以在一系列不同的环境中使用。它可以用作连接到传统USB主机(如PC)的高速或全速“外设”。它可以用作与另一个“外围”设备进行点对点数据传输的主机或外围设备,或者,如果另一个设备也包含双角色控制器,则两个设备可以根据需要切换角色。(第二个设备可以是高速、全速或低速USB功能。)或者MUSBMHRC可以用作“多点”设置中一系列此类外围设备的主机。
在所有情况下,MUSBMHRC及其连接的设备之间都支持控制、批量、同步或中断事务。
MUSBMHRC是作为主机还是作为外围设备,取决于设备的连接方式。
每个USB电缆都有一个“A”端和一个“B”端。如果电缆的“A”端插入包含MUSBMHRC的设备,MUSBMHRD将充当主机设备并进入“主机”模式。(主机模式位(DevCtl.D2)将设置为“1”。)如果电缆的“B”端插入,MUSBMHRC将改为“外设”模式,主机模式位将设置为“0”。
如果MUSBMHRC连接到单个设备,并且该设备包含双角色控制器,则可以使用信令切换两个设备的角色,而无需在设备之间切换电缆。MUSBMHRC可以在外围角色和主机角色之间切换的条件在第15节主机协商中进行了解释。
注:MUSBMHRC的多点功能与一系列寄存器相关,这些寄存器记录了设备功能分配给各个MUSBMHRD核心端点以及设备功能特性,如端点编号、运行速度和逐端点的事务类型(见背面第5.1节)。尽管主要与将内核用作多个设备的主机相关,但当内核用作单个目标设备的主机时,也需要设置这些寄存器。
作为外设运行
当主机模式位(DevCtl.D2)被清除时,MUSBMHRC以外围模式运行。
本节介绍核心在将MUSBMHRC用作外围设备时适用的Tx端点、Rx端点、进入/退出暂停模式以及帧开始识别方面的操作。
做外设时的in事务处理
当MUSBMHRC在外围模式下运行时,in事务的数据通过MUSBMHRD的Tx FIFO进行处理。
端点1至15的Tx FIFO的大小由MUSBMHRC配置文件中的配置常数确定,或者如果选择了动态FIFO大小,则通过TxFIFO2寄存器确定。可以放置在Tx端点的FIFO中进行传输的数据包的最大大小是可编程的,并由写入到
该端点的TxMaxP寄存器(最大有效负载×事务数/微帧(如果适用))。
除非使用动态FIFO大小,否则当最大数据包大小设置为小于或等于FIFO大小的一半时,为IN事务启用双数据包缓冲,当最大数据包包大小大于FIFO大小的半数时,启用单数据包缓冲。(如果选择了动态FIFO大小,则使用单或双数据包缓冲是端点FIFO的规范)启用双数据包缓冲时,可以在FIFO中缓冲两个数据包:启用单数据包缓冲后,即使数据包小于FIFO大小的一半,也只能缓冲一个数据包。
注意:为任何端点设置的最大数据包大小不得超过FIFO大小。您还应注意,当FIFO中有数据时,不应写入TxMaxP寄存器,因为可能会出现意外结果。
SOF
当MUSBMHRC在外围模式下运行时,当处于全速模式时,它应该每毫秒从主机接收一次帧开始数据包,当处于高速模式时,应该每125微秒从主机接收。
当接收到SOF包时,包中包含的11位帧号被写入帧寄存器,并且在SOF_pulse上产生持续一个CLK位周期的输出脉冲。还会生成SOF中断(如果在IntrUSBE寄存器中启用)。
一旦MUSBMHRC开始接收SOF包,它期望每毫秒(或每125微秒)接收一个SOF包。如果1.00358 ms(或125.125µs)后未接收到SOF数据包,则假设数据包已丢失,并且即使帧寄存器未更新,仍会生成SOF_PULSE(连同SOF中断,如果启用)。MUSBMHRC将继续每毫秒(或125微秒)生成一个SOF_PULSE,并且当再次成功接收到这些包时。
作为主机
个USB设备进行点对点通信,或者当连接到集线器时,用于与多点设置中的所有设备进行通信。支持高速、全速和低速USB功能,用于点对点通信和通过集线器进行操作。(必要时,内核会自动执行必要的事务转换,以允许低速或全速设备与USB 2.0集线器一起使用。)
支持控制、批量、同步或中断事务。
本节介绍了当MUSBMHRC用作主机时,核心在Tx端点、Rx端点、事务调度、进入/退出暂停模式和重置方面的操作。当核心连接到集线器时,将自动选择主机模式。
作主机的in事务处理
当MUSBMHRC作为主机运行时,IN事务的处理方式与MUSBMHRD作为外围设备运行时OUT事务的处理方法类似,但需要首先通过设置RxCSR中的ReqPkt位来启动事务。这向事务调度程序指示此端点上存在活动事务。然后,事务调度器向目标函数发送IN令牌。
当数据包被接收并放置在Rx FIFO中时,RxCSR中的RxPktRdy位被设置,并且生成适当的Rx端点中断(如果启用),以发出信号,表明数据包现在可以从FIFO卸载。
卸载数据包后,应清除RxPktRdy。RxCSR寄存器中的AutoClear位可用于在从FIFO卸载最大大小的数据包时自动清除RxPktRdy(例外情况,请参阅寄存器说明)。
RxCSR中还有一个AutoReq位,当清除RxPktRdy位时,该位会自动设置ReqPkt位。AutoClear和AutoReq位可与DMA控制器一起使用,以在没有CPU干预的情况下执行完整的批量传输。
如果要传输已知数量的MaxP数据包,则应在与端点相关联的RqPktCount寄存器中设置此数量(请参阅第3.8.1节)。核心在每次请求后递减RqPkCount寄存器中的值。当值从1减至0时,AutoReq位被清除,以防止任何进一步的事务被尝试。对于传输大小未知的情况,RqPktCount应设置为零。然后,AutoReq将保持设置,直到接收到短分组(即,小于MaxP)(例如,在批量传输结束时可能发生)时清除。
如果目标函数用NAK响应批量/中断IN令牌,MUSBMHRC将继续重试事务,直到达到已设置的NAK限制。但是,如果目标函数响应STALL,MUSBMHRC将不会重试事务,而是使用RxCSR寄存器组中的RxStall位中断CPU。如果目标函数在所需时间内未响应IN令牌(或者数据包中存在CRC或位填充错误),MUSBMHRC将重试该事务。如果三次尝试后,目标功能仍未响应,MUSBMHRC将清除ReqPkt位,并使用RxCSR设置中的Error位中断CPU。注意:在高带宽中断事务的情况下,主机将在单个微帧期间尝试2或3个事务,并在接收到所有数据包时生成中断。如果出现以下任何情况
事务不会被目标确认,在同一微帧期间不会尝试进一步的事务。
注意:在任何微帧中发送的USB数据包的数量将取决于要传输的数据量,并通过用于单个数据包的PID来指示。如果在微帧结束时未接收到指定数量的数据包,则RxCSR寄存器中的IncompRx位将被设置为指示FIFO中的数据不完整。同样,如果
如果接收到错误数据类型的数据包,则将设置RxCSR寄存器的PID错误位。然而,在每种情况下,仍将产生中断,以允许从FIFO读取已接收的数据。
做主机的out事务处理
当MUSBMHRC作为主机运行时,OUT事务处理方式与MUSBMHRD作为外围设备运行时in事务处理方式类似。
当每个数据包加载到TxFIFO中时,需要设置TxCSR寄存器中的TxPktRdy位。同样,在TxCSR中设置AutoSet位(如果适用)将导致当最大大小的数据包已加载到FIFO时自动设置TxPktRdy。此外,AutoSet可以与DMA控制器一起使用,在没有CPU干预的情况下执行完整的批量传输。
如果目标函数用NAK响应OUT令牌,MUSBMHRC将继续重试事务,直到达到已设置的NAK限制。但是,如果目标函数响应STALL,MUSBMHRC将不会重试事务,而是使用TxCSR寄存器集中的RxStall位中断CPU。如果目标函数在所需时间内未响应OUT令牌(或者数据包中存在CRC或位填充错误),MUSBMHRC将重试该事务。如果三次尝试后目标功能仍未响应,MUSBMHRC将刷新FIFO,并使用TxCSR设置中的错误位中断CPU。
事务调度
当作为主机运行时,MUSBMHRC保持帧/微帧计数器。如果目标功能是全速或高速设备,MUSBMHRC将在每个帧/微帧开始时自动发送SOF/uSOF包。如果目标功能是低速设备,则将在总线上传输“K”状态,作为“保持活动”,以停止低速设备进入挂起模式。
在SOF/uSOF包被发送之后,MUSBMHRC将在所有配置的端点之间循环,寻找活动事务。活动事务被定义为设置ReqPkt位的Rx端点或设置TxPktRdy位和/或FIFONotEmpty位的Tx端点。
只有在帧/微帧的第一个事务调度程序周期中发现活动的同步或中断事务,并且该端点的间隔计数器已倒数为零时,才会启动该事务。这确保每个端点每n帧/微帧(如果选择了高带宽支持,则最多三帧)只发生一次中断/同步事务,其中n是通过该端点的TxInterval/RxInterval寄存器设置的间隔–请参阅第3.3.15节和第3.3.17节。
如果帧/微帧中有足够的时间在下一个SOF/uSOF包到期之前完成事务,则将立即启动活动的批量事务。如果需要重试事务(例如,因为接收到NAK或目标函数没有响应),则在事务调度器首先检查所有其他端点的活动事务之前,不会重试事务。这确保发送大量NAK的端点不会阻止总线上的其他事务。内核还允许用户指定在端点超时之前从特定目标接收NAK的时间长度限制
BABBLE
MUSBMHRC将不会启动事务,直到总线至少在最小包间延迟内处于非活动状态。它也不会启动事务,除非它可以在帧结束之前完成。如果总线在一帧结束时仍处于活动状态,则MUSBMHRC将假设其连接的功能发生故障,并将暂停所有事务并生成一个BABBLE中断。
主机模式挂起
如果设置了电源寄存器中的SuspendMode位,MUSBMHRC将完成当前事务,然后停止事务调度器和帧计数器。不会启动进一步的事务,也不会生成SOF数据包。
要退出暂停模式,CPU应设置恢复位并清除电源寄存器中的暂停位。当恢复位为高时,MUSBMHRC将在总线上生成恢复信号。20ms后,CPU应清除恢复位,此时将启动帧计数器和事务调度器。
当处于挂起模式时,如果启用,SUSPENDM输出也将变低:这可能用于关闭USB驱动程序。此外,POWERDWN输出被断言:该信号可用于停止CLK,从而在该状态下节省电力。
但是,如果要支持远程唤醒,必须保持PHY的电源,以便MUSBMHRC可以检测总线上的恢复信号。