基于DWC2的USB驱动开发-0x03 DWC2 USB2.0 IP 架构介绍之接口和协议时序 (qq.com)
这部分以一些典型的传输为例,介绍控制器的处理过程。这部分内容比较重要,对于时序的理解有助于软件编写,尤其了解整个过程的先后顺序,逻辑,比如什么时候产生中断,什么时候硬件做什么,什么时候软件做什么,这些都是驱动编写需要了解的。可以慢慢,细细品,后面编写软件调试过程还会结合寄存器状态,结合调试过程不断加深理解。
如下以设备模式,DMA操作方式,16位utmi接口,SetAddress的Setup阶段为例
注意以上5个关键过程
这里硬件自动NAK进行流控, 为什么这里要硬件自动NAK呢,这是为了避免持续的setup导致异常,因为由软件中断服务中再进行NAK比较慢,所以必须硬件做。所以驱动编写一定要知道哪些是硬件做的哪些需要软件做。
如下是状态阶段
SetAddress没有数据阶段,前面的Setup数据流是HOST->DEV,所以状态阶段数据流是DEV->HOST,即HOST过来IN请求数据,DEV返回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这里就产生发送完中断(这里应该是真正的总线上数据发送完)。
所以什么时候产生什么中断是编程需要了解的非常重要。
这里顺便提一下USB中的IN和OUT是以HOST的角度去说的。
比如IN指的是数据DEV->HOST
OUT指的是数据HOST->DEV。
不管是设备端还是主机端都是这个角度说的。
如下以包长为1的BULK OUT传输,DMA模式为例
如下以包长为1的BULK IN传输,DMA模式为例。
以下以设备模式,DMA操作,中断OUT传输252字节数据。和BULK OUT类似。
以下以设备模式DMA方式的ISO IN传输为例
以下以主机模式DMA方式的ISO IN传输为例
应用程序必须在传输之前安排一个(微)帧的传输。
以主机模式 Slave操作方式 Bulk Out传输1个字节数据为例。
Slave模式需要CPU通过AHB总线去写数据到发送FIFO,而不是DMA自动搬运。
以上以各种典型的传输时序图为例介绍了控制器的处理过程,把这部分放在开始写代码之前也是为了先有一个大概的整体了解,才能确定程序的框架流程如何设计。
全部0条评论
快来发表一下你的评论吧 !