0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

嵌入式USB开发 来源:嵌入式USB开发 作者:嵌入式USB开发 2023-05-10 15:37 次阅读

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

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

前言

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

控制写

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

image.png

注意以上5个关键过程

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

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

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

如下是状态阶段

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

image.png

  1. 软件使能IN端点,配置DMA发送0长包。
  2. 控制器认为此时数据还未就绪所以NAK主机的IN请求。
  3. 控制器产生发送空中断。
  4. HOST继续IN请求,此时控制器准备好了数据,所以返回了0长包。
  5. 控制器产生发送完中断,即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模式为例

image.png

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

设备模式BULK IN

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

image.png

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

设备模式Interrupt OUT

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

image.png

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

设备模式Isochronous IN

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

image.png

image.png

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

主机模式 Isochronous IN

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

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

image.png

image.png

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

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

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

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

image.png

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

总结

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制器
    +关注

    关注

    112

    文章

    16185

    浏览量

    177329
  • 寄存器
    +关注

    关注

    31

    文章

    5308

    浏览量

    119975
  • 接口
    +关注

    关注

    33

    文章

    8486

    浏览量

    150803
  • usb
    usb
    +关注

    关注

    60

    文章

    7888

    浏览量

    263918
  • 驱动开发
    +关注

    关注

    0

    文章

    130

    浏览量

    12061
  • DWC2
    +关注

    关注

    0

    文章

    35

    浏览量

    119
收藏 人收藏

    评论

    相关推荐

    基于DWC2USB驱动开发-0x01开篇介绍与新思DWC2 USB2.0控制器简介

    本文转自公众号,欢迎关注 基于DWC2USB驱动开发-0x01开篇介绍与新思
    的头像 发表于 05-08 18:10 4490次阅读
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>-<b class='flag-5'>0x</b>01开篇<b class='flag-5'>介绍</b>与新思<b class='flag-5'>DWC2</b> <b class='flag-5'>USB2.0</b>控制器简介

    基于DWC2USB驱动开发-0x02 DWC2 USB2.0 IP功能特征介绍

    DWC2即新思(Synopsys )的DesignWare® Cores USB 2.0 HiSpeed On-The-Go (OTG)控制器IP,被大量使用。从linux的内核源码
    的头像 发表于 05-09 10:09 9032次阅读
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>-<b class='flag-5'>0x</b>02 <b class='flag-5'>DWC2</b> <b class='flag-5'>USB2.0</b> <b class='flag-5'>IP</b>功能特征<b class='flag-5'>介绍</b>

    基于DWC2USB驱动开发-0x04 DWC2 USB2.0 IP 架构介绍

    这一篇先对IP架构进行一些介绍,内容比较多所以重点关注和软件相关的内容。后续编程具体涉及时,可能再返回过来详读某一个部分。
    的头像 发表于 05-12 12:50 4073次阅读
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>-<b class='flag-5'>0x</b>04 <b class='flag-5'>DWC2</b> <b class='flag-5'>USB2.0</b> <b class='flag-5'>IP</b> <b class='flag-5'>架构</b><b class='flag-5'>介绍</b>

    基于DWC2USB驱动开发-0x07 DWC2 USB2.0 IP 配置参数

    混淆,IP的配置参数固定之后就不能改了,就决定了IP所具有的能力。对于软件开发者来说也要了解其具体的配置,因为只有知道当前IP的配置,知道支持哪些功能,哪些是软件可以配置的哪些是硬件固
    的头像 发表于 05-17 09:49 2165次阅读

    基于DWC2USB驱动开发-IAD描述符详解

    本文转自公众号,欢迎关注 基于DWC2USB驱动开发-IAD描述符详解 (qq.com) 一.  前言 IAD描述符用于一个设备功能关联多个接口
    的头像 发表于 06-27 08:45 5.2w次阅读
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>-IAD描述符详解

    基于DWC2USB驱动开发-USB复位详解

    本文转自公众号欢迎关注 基于DWC2USB驱动开发-USB复位详解 (qq.com) 一.前言          上一篇我们详细
    的头像 发表于 07-07 11:18 5.7w次阅读
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>-<b class='flag-5'>USB</b>复位详解

    基于DWC2USB驱动开发-USB连接详解

    本文转自公众号,欢迎关注 基于DWC2USB驱动开发-USB连接详解 (qq.com) 一.前言   之前一直在阅读手册,规格书,练习招式
    的头像 发表于 07-07 08:46 3551次阅读
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>-<b class='flag-5'>USB</b>连接详解

    基于DWC2USB驱动开发-高速设备枚举为全速设备问题案例分析

    本文转自公众号,欢迎关注 基于DWC2USB驱动开发-高速设备枚举为全速设备问题案例分析 (qq.com) 一.前言   本文分享一个高速设备被枚举为全速的问题。     高速设备速
    的头像 发表于 07-10 17:12 1303次阅读
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>-高速设备枚举为全速设备问题案例分析

    基于DWC2USB驱动开发-设备类驱动框架

    本文转自公众号,欢迎关注 基于DWC2USB驱动开发-设备类驱动框架 (qq.com) 一.前言 从软件顶层,从数据流的角度来看
    的头像 发表于 07-16 15:56 1277次阅读
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>-设备类<b class='flag-5'>驱动</b>框架

    基于DWC2USB驱动开发-发送相关的寄存器DMA寄存器详解

    本文转自公众号,欢迎关注 基于DWC2USB驱动开发-发送相关的寄存器DMA寄存器详解 (qq.com) 前言 如下寄存器DIEPxxx,对应IN端点,和发送数据相关,这一篇先
    的头像 发表于 07-16 16:42 1575次阅读
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>-发送相关的寄存器DMA寄存器详解

    基于DWC2USB驱动开发-数据不能发送问题分析案例

    本文转自公众号欢迎关注 基于DWC2USB驱动开发-数据不能发送问题分析案例 (qq.com)   一.前言        对于驱动
    的头像 发表于 08-08 09:43 2114次阅读
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>-数据不能发送问题分析案例

    RK3399平台上USB控制器和PHY的连接方式和配置说明

    USB2.0 OTG对应的控制器是DWC2USB2.0 OTG使用的是Synopsys 方案,即使用DWC2控制器同时实现Host和Device功能,
    发表于 05-12 17:46

    如何对基于hal库的DWC2 USB IP进行调试呢

    背景之前适配 DWC2 USB IP 的时候,主要是基于 st 的 hal 库来走的,当时我就对他们的 hal 库代码不满,只是无奈,迫于时间就没重构,果不其然,usb bug 一堆,
    发表于 06-14 15:23

    无法让USB主机正常工作是我做错了什么吗?

    bus registered, assigned bus number 3[ 2.986093] dwc2 49000000.usb-otg: irq 51, io mem 0x
    发表于 12-02 06:06

    基于DWC2USB驱动开发-抽丝剥茧再论切换到状态阶段标志DOEPINTn.StsPhseRcvd

    本文转自公众号系列文章,欢迎关注 基于DWC2USB驱动开发-USB包详解 (qq.com) 一.前言 前面我们对SETUP完成标志DOE
    的头像 发表于 07-24 18:04 1457次阅读
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>-抽丝剥茧再论切换到状态阶段标志DOEPINTn.StsPhseRcvd