首页 理论教育 ARMCortexM4核原理与应用:USB功能解析

ARMCortexM4核原理与应用:USB功能解析

时间:2023-11-17 理论教育 版权反馈
【摘要】:以上的操作都是由USB控制器自动处理的。该中断用于禁止USB0DP信号的上拉电阻。TM4C123GH6PMUSB控制器可随时建立传输事务。USB等待从主机发出的请求以及当事务传输完成或由于某些错误而终止时,都会产生一个中断。如果1.00358ms后仍未收到SOF包,可认为该包已丢失,并且USBFRAME寄存器也不会被更新。

ARMCortexM4核原理与应用:USB功能解析

TM4C123GH6PMUSB控制器支持OTG标准的会话请求协议和主机协商协议,提供完整的OTG协商会话请求协议,允许连接在USB电缆B端的B类设备向连接在A端的A类设备发出请求,通知A类设备打开VBUS电源。主机协商协议用于在启动会话请求协议上电后,决定USB电缆哪端的设备作为USB主机。当该设备连接到非OTG外设或设备时,控制器可以检测出电缆终端所使用的设备类型,并提供一个寄存器来指示该控制器是用作主机,还是用作设备控制器。以上的操作都是由USB控制器自动处理的。基于这种自动探测机制,系统使用单个的A/B型连接器取代A型或B型连接器,可支持与另外的OTG设备完整的OTG协商。

另外,USB控制器还提供对连接到非OTG的外设或主机控制器的支持。可将USB控制器设置为专用的主机或设备模式,此时,USB0VBUS和USB0ID引脚可被设置成GPIO功能使用。但当USB控制器用作自供电设备时,必须将GPIO输入引脚或模拟比较器输入引脚连接到VBUS脚上,并配置为在VBUS掉电时将发出中断。该中断用于禁止USB0DP信号的上拉电阻

注意:当使用USB模块时,时钟源MOSC无论使用PLL,系统时钟应至少为20MHz。

1.作为设备时的操作

本节将描述TM4C123GH6PMUSB控制器用作USB设备时的行为,包括:IN端点、OUT端点、进入和退出挂起模式、帧起始。其中,IN事务通过使用端点的发送端点寄存器,由端点的发送接口进行控制。OUT事务通过使用端点的接收端点寄存器,由端点的接收接口进行控制。

当配置端点的FIFO大小时,需要考虑最大数据包的大小。

①批量传输:批量端点的FIFO可配置为最大包长(64个字节),如果使用双包缓存,则需要配置为2倍于最大包长大小。

②中断传输:中断端点的FIFO可配置为最大包长,如果使用双包缓存,则需要配置为两倍的最大包长大小。

③同步传输:同步端点的FIFO比较灵活,最大可支持1023字节。

④控制传输:也可以用于为USB设备指定一个独立的控制端点。但是在大多数情况下,USB设备应该在USB控制器的端点0上使用专用的控制端点。

(1)端点

USB控制器提供两个专用的控制端点(即IN和OUT)与可用于跟主机控制器进行通信的14个可配置的端点(即7个IN和7个OUT)。端点号和方向与对应的相关寄存器直接关联。例如,在主机向端点1发送数据时,所有的配置和数据都存在端点1的发送寄存器接口中。

端点0是专用的控制端点,用于在枚举期间所有对端点0的控制传输事务,或对端点0的其他控制请求。端点0使用USB控制器FIFO RAM中的首64字节,该内存对于IN传输事务和OUT传输事务是共享的。剩余的14个端点可配置为控制、批量、中断或同步端点。其中7个配置为IN端点,另外7个配置为OUT端点。这些成对的端点类型可以不同。例如,成对端点的OUT部分可配置成批量端点,IN部分可配置成中断端点。连接到每个端点的FIFO的地址和大小可根据实际需求来修改。

(2)IN事务

IN数据传输可通过发送端点的FIFO来处理。7个可配置IN端点的FIFO大小,由USB发送FIFO的起始地址寄存器(USBTXFIFOADD)决定。传输时发送端点FIFO中的最大数据包长可编程配置,其大小由写入该端点的USB端点n的发送最大发送数据寄存器(USBTXMAXPn)中的值决定。端点的FIFO既可配置成双包缓存,也可配置成单包缓存。当双包缓存使能时,在FIFO中可缓冲两个数据包,要求FIFO的容量应不小于两个数据包的大小。当禁止双包缓存时,即使数据包长小于FIFO容量的一半,也仅能缓冲一个数据包。

(3)OUT事务

OUT事务的数据可通过接收端点的FIFO来处理。7个可配置OUT端点的FIFO大小,由USB输出FIFO的起始地址寄存器(USBRXFIFOADD)决定。任何接收端点FIFO中的最大数据包长都可编程配置,其大小由写入该端点的USB端点n的最大接收数据寄存器(USBRXMAXPn)中的值决定。当双包缓存使能时,在FIFO中可缓冲两个数据包。当禁止双包缓存时,即使数据包长小于FIFO容量的一半,也仅能缓冲一个数据包。

(4)调度

设备无权控制事务调度,而只能由主机来调度决定。TM4C123GH6PMUSB控制器可随时建立传输事务。USB等待从主机发出的请求以及当事务传输完成或由于某些错误而终止时,都会产生一个中断。如果主机发起请求,而设备还未准备就绪,那么USB将对所有请求发送一个忙响应(NAK)信号,直到其准备就绪。

(5)挂起

当USB总线超过3ms时间无数据传输时,它将自动进入挂起(SUSPEND)模式。如果在USB中断使能寄存器(USBIE)中已使能挂起中断,这时将会产生一个中断。当USB控制器处于挂起模式下,USBPHY也可进入挂起模式。当检测到恢复信号时,USB将退出挂起模式,并且USBPHY也将退出挂起模式。如果已使能了恢复中断,则将产生一个中断。可通过配置USB电源寄存器(USBPOWER)中的RESUME位来强制USB控制器退出挂起模式。当该位被置位,使USB控制器退出挂起模式,同时恢复信号将出现在总线上。RESUME位必须在10ms(最大15ms)后被清零以结束恢复信号。

注意:为了满足USB电源要求,控制器可以进入深度休眠模式,使控制器保持在静止状态。休眠模式不应该用于挂起模式,因为所有的内部状态信息在处于休眠状态时将会丢失。

(6)帧起始

在设备模式时,其每1ms将接收到由主机发出的帧起始包(SOF)1次。在收到SOF数据包时,数据包中的11位帧号将被写入到USB帧值寄存器(USBFRAME)中,且发出SOF中断信号(由应用程序来处理)。一旦USB控制器开始接收SOF包,预计每1ms接收1次。如果1.00358ms后仍未收到SOF包,可认为该包已丢失,并且USBFRAME寄存器也不会被更新。在重新成功接收这些数据包时,USB控制器将继续并重新同步这些脉冲来接收SOF包。

(7)USB复位

在检测到USB总线上的复位条件时,USB控制器将会自动执行以下操作:

①清除USBFADDR寄存器。

②清除USB端点索引寄存器(USBEPIDX)。

③刷新所有端点FIFO。

④清除所有的控制/状态寄存器。

⑤使能所有端点中断。

⑥产生一个复位中断。

在应用软件驱动的USB控制器中收到复位中断时,将关闭任何打开的管道,并等待USB控制器开始总线枚举。

(8)连接/断开

连接到USB总线上的USB控制器将由软件来处理。USBPHY通过置位和清零USB-POWER寄存器中的SOFTCONN位,使其可在正常模式和无驱动模式之间切换。当SOFT-CONN位置位时,USBPHY为正常模式,USB总线上的USB0DP/USB0DM线被使能。同时,USB控制器不会响应任何信号(USB复位除外)。(www.xing528.com)

在SOFTCONN位清零时,USBPHY为无驱动模式,USB0DP和USB0DM为高阻态,这时,对于USB总线上的其他设备,USB控制器为断开状态。因无驱动模式为默认状态,所以USB控制器只有在SOFTCONN位置位时才会被接通。然后,应用软件可以选择何时设置PHY进入正常模式。系统将经历一个较长时间来初始化程序,以确保初始化完成。在连接USB总线之前,为系统的设备枚举做好准备。一旦SOFTCONN位置位,USB控制器可通过清除该位来断开连接。

注意:当设备连接到主机时,USB控制器不会产生中断。不过当主机终止会话时,将会产生一个中断。

2.作为主机时的操作

当TM4C123GH6PM控制器运行在主机模式时,在USB由设备变为主机或由主机变为设备前,必须通过设置软件复位控制寄存器2(SRCR2)中的USB0位来复位USB控制器。USB支持全速和低速设备,支持点对点通信和通过集线器操作。允许USB2.0集线器使用低速设备和全速设备。支持控制传输、批量传输、同步传输和中断传输。本小节描述当USB在主机模式时的操作,但与设备操作类似的部分,这里不再累述。

(1)端点

专用的控制接口只用于与设备的端点0之间的控制传输。其用于设备枚举或其他使用该端点的控制功能。控制端点的IN和OUT事务共享USBFIFO内存中的首64字节。其余IN和OUT接口可配置为与控制端点、批量端点、中断端点或同步端点通信。

这些USB接口可同时调度,可用于与任何设备的任何端点的7个独立的OUT事务和7个独立的IN事务。并用三组成对的寄存器来控制IN和OUT端点。通过配置可与不同类型的端点以及不同设备的不同端点进行通信。例如,第一对端点可分开控制,即输出部分与设备的批量输出端点1通信,输入部分与设备的中断端点2通信。

无论用于点对点通信还是通过集线器通信,在访问设备前,都必须设置相关的USB端点n的接收功能地址寄存器(USBRXFUNCADDRn)或USB端点n发送功能地址寄存器(USBTXFUNCADDRn),以记录每个接收和发送端点将要访问的设备地址。

USB控制器支持通过USB集线器连接设备,这可通过一个寄存器实现,该寄存器说明集线器地址和每个传输的端口。FIFO的地址和大小可定制,并可指定用于任一USB输入和输出的传输。

(2)IN事务

IN事务的处理采用与设备模式处理OUT事务类似的方式,但传输事务必须通过设置寄存器USBCSRL0中的REQPKT位开始,向事务调度指示该端点存在一个激活的传输。此时事务调度向目标设备发送1个输入令牌包。当接收到数据包且存放到接收FIFO中时,USBCSRL0寄存器中的RXRDY位置位,同时产生相应的接收端点中断信号,指示有1个数据包需要从FIFO中读出。

在数据包读出时,必须将RXRDY位清零。USBRXCSRHn寄存器中的AUTOCL位可用于在最大包从FIFO中读出时将自动清零RXRDY位。在RXRDY位清零时,USBRXCSRHn寄存器中的AUTORQ位将会使REQPKT位自动置位。AUTOC和AUTORQ位可与μDMA配合使用,可实现无需处理器干预的批量传输。在RXRDY位清零时,控制器会向设备发出1条确认信息。在确定传输的数据包个数时,将在与该端点关联的USB端点n块传输请求包数量寄存器(USBRQPKTCOUNTn)中配置要传输的数据包个数。每次请求前,USB控制器都将USBRQPKTCOUNTn寄存器中的值减1。当USBRQPKTCOUNTn寄存器中的值减到0时,将清零AUTORQ位以阻止后面试图进行的事务。如果传输的数量未知,则应当将USBRQPKTCOUNTn位清零。AUTORQ保持置位状态,直到接收到一个短包才清零,此种情形只在批量传输的末尾才可出现。

如果设备用NAK响应批量或中断传输的输入令牌,USB主机将重试直到达到设置的NAK限制次数。如果目标设备用STALL握手响应,USB主机将不重试传输,而将寄存器USBCSRL0中的STALLED位置位。如果目标设备在需要的时间内不响应输入令牌包,或包存在CRC或位填充错误,USB主机将重试传输。如果三次重试,目标设备仍无响应,USB控制器将把REQPKT位清零,将USBCSRL0寄存器中的ERROR位置位。

(3)OUT事务

OUT事务的处理采用与设备处理IN事务类似的方式。当包装载到发送FIFO中时,USBTXCSRLn寄存器中的TXRDY位必须置位。若将USBTXCSRHn寄存器中的AUTOSET位置位,当最大包长的包装载到FIFO中时,TXRDY位将自动置位。此外,AUTOSET位与μDMA控制器配合使用,可在不需要软件干预的情况下完成批量传输。

若目标设备用NAK响应输出令牌包,USB主机将重试直到达到设置的NAK限制次数。如果目标设备用STALL握手响应,USB主机将不会重试传输,而通过将USBTXCSRLn寄存器中的STALLED位置位来中断主处理器。若目标设备在要求的时间内不响应输出令牌包,或包存在CRC或位填充错误,USB主机将重试传输。如果三次重试,目标设备仍无响应,USB将清空FIFO,以及把寄存器USBTXCSRLn中的ERROR位置位。

(4)事务调度

事务调度由USB主机自动处理。USB主机允许根据端点事务类型配置端点通信调度。中断传输既可每1帧进行1次,也可每255帧进行1次,可在1~255帧之间以1帧的递增调度。批量端点不允许调度参数,但在设备端点不响应时,允许NAK超时。同步端点可在1~216帧之间调度(2的幂)。

USB维持帧计数。如果目标设备为全速设备,控制器在每帧开始时将自动发送SOF包,同时帧计数值加1。若目标设备为低速设备,将在总线上发送K状态来保持总线激活,防止低速设备进入挂起模式。

在发送SOF包后,USB主机控制器将巡检所有配置就绪的端点,寻找激活的传输事务。对于REQPKT位置位的接收端点或TXRDY或FIFONE位置位的发送端点,可视为存在激活的传输事务。

若传输创建在1帧的第一个调度周期,而且端点的间隔计数器减到0,那么同步传输和中断传输开始。因此每个端点的中断传输和等同步传输每n帧才会发生1次,其中n为在USBTXINTERVALn或USBRXINTERVALn寄存器设置的间隔。

若在帧中的下一个SOF包前有足够时间来完成传输,则激活的批量传输会立即开始。如果传输需要重发时,需要在调度器先行检查完其他端点是否有激活的传输之后,才能重新传输。这保证了发送大量NAK响应的端点不会阻塞总线上的其他传输的正常进行,并且允许用户设置目标设备发送NAK端点的超时限制。

(5)USB集线器

以下介绍仅可使用USB2.0集线器的主机。当低速设备或全速设备通过USB2.0集线器连接到USB主机时,集线器的地址和端口的详细信息必须记录在相应的USB端点n接收集线器地址(USBRXHUBADDRn)和接收集线器端口(USBRXHUBPORTn)或USB发送集线器地址(USBTXHUBADDRn)和发送集线器端口(USBTXHUBPORTn)寄存器中。此外,设备的运行速度也必须记录在USB类型端点0寄存器(USBTYPE0)、USB端点n主机配置发送类型寄存器(USBTXTYPEn)或主机配置接收类型寄存器(USBRXTYPEn)中。

对于集线器通信,为了支持更多数量的设备,USB主机允许通过简单的更新记录在这些寄存器中的地址和速度信息来动态改变这些配置。设备功能端点配置的改变必须在相关端点正在进行的传输完成后进行。

(6)OTG模式

为了省电,USB OTG允许当需要时才给VBUS上电,在不使用USB总线时,断开VBUS,而VBUS总是由总线上的A设备提供。OTG控制器通过PHY采样ID输入来决定哪个是A设备哪个是B设备。在ID信号拉低时,表示OTG控制器作为A设备使用;在ID信号为高时,表示OTG控制器作为B设备角色。OTG的操作过程如下:

①开始会话。

②活动性探测。

③主机协商。

3.DMA操作

USB外设提供了连接到μDMA控制器的接口。μDMA控制器提供了3个发送端点和3个接收端点的独立通道。通过USBDMA选择寄存器(USBDMASEL),软件可选择哪个端点要使用μDMA通道服务。发送和接收通道分别通过USBTXCSRHn和USBRXCSRHn寄存器来使能USB的μDMA操作。当μDMA操作使能时,USB在FIFO可传输数据时,将在使能的接收或发送通道上发出μDMA请求。当任一FIFO可传输数据时,则该通道发出突发请求。μDMA通道必须配置为基本模式,μDMA传输的大小需限制为USBFIFO的整数倍。使用μDMA的USBFIFO的读/写传输都须这样配置。

若USBTXCSRHn/USBRXCSRHn寄存器中的DMAMOD位清零,则在μDMA传输中的每个包传输完成后都会产生中断信号,但μDMA会继续传输数据。如果DMAMOD位置位,整个μDMA传输完成后才会产生中断信号。此中断将加载到USB的中断向量中。因此,如果USB操作使用了中断和使能了μDMA,则必须设计USB中断服务函数来处理该中断。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈