基于DWC2的USB驱动开发-0x03 DWC2 USB2.0 IP 架构介绍之接口和协议时序

2023-05-10 16:28:13
来源:嵌入式USB开发

本文转自公众号,欢迎关注)


【资料图】

基于DWC2的USB驱动开发-0x03 DWC2 USB2.0 IP 架构介绍之接口和协议时序 (qq.com)

前言

这部分以一些典型的传输为例,介绍控制器的处理过程。这部分内容比较重要,对于时序的理解有助于软件编写,尤其了解整个过程的先后顺序,逻辑,比如什么时候产生中断,什么时候硬件做什么,什么时候软件做什么,这些都是驱动编写需要了解的。可以慢慢,细细品,后面编写软件调试过程还会结合寄存器状态,结合调试过程不断加深理解。

控制写

如下以设备模式,DMA操作方式,16位utmi接口,SetAddress的Setup阶段为例

注意以上5个关键过程

软件使能OUT端口,设置好DMA,准备好接收数据。HOST发送Setup包过来,控制器收到并且硬件自动回复ACK。控制器通过DMA将Setup包的内容搬运到系统memory。然后控制器自动设置NAK位,NAK所有的IN和OUT端点,不再接收令牌包。

这里硬件自动NAK进行流控, 为什么这里要硬件自动NAK呢,这是为了避免持续的setup导致异常,因为由软件中断服务中再进行NAK比较慢,所以必须硬件做。所以驱动编写一定要知道哪些是硬件做的哪些需要软件做。

产生接收setup中断, 软件读出setup内容进行解析,然后清除NAK位,重新使能端口进行接收。

如下是状态阶段

SetAddress没有数据阶段,前面的Setup数据流是HOST->DEV,所以状态阶段数据流是DEV->HOST,即HOST过来IN请求数据,DEV返回0长包。

软件使能IN端点,配置DMA发送0长包。控制器认为此时数据还未就绪所以NAK主机的IN请求。控制器产生发送空中断。HOST继续IN请求,此时控制器准备好了数据,所以返回了0长包。控制器产生发送完中断,即0长包发送完通知软件处理。

以上几点一些个人理解暂时不确定:

为什么1已经使能了IN端点,配置好DMA了,2时间点在1的后面为什么还是NAK,这里应该是软件DMA配置好,使能IN端点了,但是DMA还没将0长数据包更新到TxFIFO(虽然0长包不需要复制负载数据但是还是有包头包尾CRC等需要准备),所以此时还没有数据可以发送到USB总线上去所以是NAK

3这里产生发送空中断指的是缓冲区空,而不是指的总线数据发送完,所谓的缓冲区空即软件可以继续配置下一个DMA准备下一个DMA搬运了。此时数据已经就绪到TxFIFO随时都可以发送到USB总线了。

所以4这里 HOST再来IN请求时控制器就可以返回0长包了

然后5这里就产生发送完中断(这里应该是真正的总线上数据发送完)。

所以什么时候产生什么中断是编程需要了解的非常重要。

设备模式BULK OUT

这里顺便提一下USB中的IN和OUT是以HOST的角度去说的。

比如IN指的是数据DEV->HOST

OUT指的是数据HOST->DEV。

不管是设备端还是主机端都是这个角度说的。

如下以包长为1的BULK OUT传输,DMA模式为例

软件设置好DMA,使能OUT端点.HOST发送一个1字节长的BULK OUT包,控制器因为已经就绪接收,所以ACK该包,接收的数据在接收缓冲区。控制器通过DMA将接收缓冲区的数据搬运到系统memory。控制器产生接收完成中断。中断中就可以对数据进行处理。

设备模式BULK IN

如下以包长为1的BULK IN传输,DMA模式为例。

此时发送FIFO中没有数据,所以HOST来IN请求时,控制器返回NAK控制器产生TXFIFO空中断,表示TXFIFO中没有数据了,可以准备发送数据了。软件配置好DMA和使能IN端点。控制器通过DMA将数据从系统memory搬运到TXFIFO中。在完成搬运前都是NAK主机的IN。完成数据搬运到FIFO,FIFO中有数据了,此时HOST再来IN,则控制器将缓冲区的数据发送到USB总线上去。控制器产生发送完中断。

设备模式Interrupt OUT

以下以设备模式,DMA操作,中断OUT传输252字节数据。和BULK OUT类似。

软件配置好DMA和使能OUT端点。控制器接收HOST发送的数据到接收缓冲区,并ACK。控制器通过DMA将接收缓冲区的数据搬运到系统memory。产生接收完成中断。软件可以处理数据了。

设备模式Isochronous IN

以下以设备模式DMA方式的ISO IN传输为例

SOF令牌,ISO的传输以SOF微帧为单位进行。控制器产生SOF中断。软件设置好DMA使能IN端点。IN端点使能后,控制器开始通过DMA将系统memory的数据搬运到发送FIFO中去。下一个SOF到来并产生SOF中断本次SOF的HSOT的IN请求,设备的FIFO中已经准备好数据所以可以发送到总线上去给HOST。产生发送完中断。

主机模式 Isochronous IN

以下以主机模式DMA方式的ISO IN传输为例

应用程序必须在传输之前安排一个(微)帧的传输。

控制器产生SOF中断。软件配置好通道信息以准备接收下一个微帧的数据。下一个SOF中断。控制发送IN请求并接收设备返回的数据。控制器将接收到的数据通过DMA搬运到系统memory中。控制器产生接收完成中断。

主机模式Slave操作方式Bulk Out传输

以主机模式 Slave操作方式 Bulk Out传输1个字节数据为例。

Slave模式需要CPU通过AHB总线去写数据到发送FIFO,而不是DMA自动搬运。

控制初始化配置好BULK OUT的通道。软件将数据写入TXFIFO中。控制器发送TXFIFO中的数据。发送完产生中断。

总结

以上以各种典型的传输时序图为例介绍了控制器的处理过程,把这部分放在开始写代码之前也是为了先有一个大概的整体了解,才能确定程序的框架流程如何设计。

关键词:

[责任编辑:]

为您推荐

时评