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

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

3天内不再提示

基于DWC2的USB驱动开发-PING协议详解

嵌入式USB开发 来源:嵌入式USB开发 作者:嵌入式USB开发 2023-07-23 16:18 次阅读

本文转自公众号,欢迎关注
基于DWC2的USB驱动开发-PING协议详解 (qq.com)

一. 前言

这里先介绍下PING协议的背景和原理,我们不一上来就介绍PING包格式和协议,因为只有知其然知其所以然才能加深理解,任何事务都是有其出现的历史背景的,不会凭空而生,所以理解背后产生的背景和原理很重要。

全/低速的批量/控制传输OUT事务,如果设备没有就绪,则可以NAK表示端点不接受数据,主机可以稍后重发。以上过程存在一个问题,就是OUT数据之后设备NAK,OUT数据这部分时间会占用总线,如果设备一直未就绪一直NAK,主机一直重发将会大量占用总线。

高速设备旨在提高传输带宽,所以对这种带宽的浪费是不能容忍的,必须优化。

优化的思想其实很朴素,既然重发浪费带宽,那么就先“问一下”,先“问一下”设备准备好了没,只有收到设备回复准备好了再发数据,这样“问一下”这句话很短占用带宽不多,浪费较少。这个问一下就对应的PING包。

只在高速设备才支持PING,且只有控制传输和批量传输支持,且都是针对OUT。

控制传输OUT(数据和状态阶段,SETUP阶段不支持PING)

批量传输OUT的数据阶段。

二.PING包格式

Ping包的ID为0100B,和令牌包格式一样

图片

图片

如下是一个实例

图片

三.PING协议过程和实例

Ping的响应是硬件做的,因为设备需要接收主机连续的PING,如果软件处理会来不及。

那么硬件怎么知道回主机的PING包回ACK还是NAK呢,这就是看软件有没有配置好DMA并设置CTL寄存器的EPena置位,如果软件已经配置好了则硬件回ACK,并自动接收后面的OUT数据,并通过DMA搬运到用户空间,反之则NAK。

过程如下:

1.主机OUT数据,设备返回了NAK

2.主机收到NAK,知道设备没就绪,于是发PING

3.设备收到PING之后如果还未就绪则NAK,否则则ACK

4.主机按照描述符中的bInterval时间间隔重新发PING,直到设备ACK,设备ACK后发数据。

5.设备收到主机OUT的数据如果还可以继续接收后面的数据则ACK,否则则发NYET。注意虽然前面PING设备ACK了,这里设备还是有可能NAK。

  1. 主机如果收到设备的ACK则继续发后面的数据,如果收到NYET则表示本次OUT数据成功,但是设备不能接收后续数据,发后面的数据前重复上面的PING过程,如果主机收到NAK则说明本次数据设备没有接收,需要重新PING然后重发本次数据。

总结一下就是对于OUT数据设备可能有三种响应

ACK:本次接收了,还可以继续接收后面的。

NYET:本次接收了,不能继续接收。

NAK:本次未接收。

上述说明的设备对PING ACK了,但是对后面的数据OUT又NAK了的情况,是不正常的现象,设备都告诉主机准备好了,后面又没有接收数据。

高速的批量/控制端点在其端点描述符中需要指定其最大NAK速率。每个bInterval 时间间隔内,端点最多允许NAK一次。如果端点的描述符bInterval为0则表示端点从不会NAK。

如果在数据阶段之后发生超时,主机必须返回到PING阶段。转回PING状态不会影响事务数据阶段的data toggle 状态。

以下是一个实例过程

图片

(1)主机OUT数据,设备NAK了,表示设备不能接收

(2)主机看到设备NAK,不能接收,于是进入PING状态。注意上面主机不会一上来就PING,因为这个时候还不知道设备能不能接收,所以先不管三七二十一发一把再说,万一设备能接受呢。只有主机确认设备不能接收,即设备NAK之后才会进入PING状态。

图片

(3)设备一直NAK则主机一直PING

(4)设备终于ACK了主机的PING,表示可以接收数据了。

这里的ACK是设备的硬件做的,所以在此之前设备的软件配置好了DMA并置位了DOEP的CTL寄存器的EPena位。

(5)主机OUT数据,设备也接受了,回了ACK,至此数据的OUT阶段总算成功了。

第(5)步设备实际还有可能回NAK,表示未接收,回NYET表示本包接收但是不能接收下一包。

四. 总结

以上介绍了高速数据阶段的PING协议,了解了过程和背景,对于驱动开发人员尤其要了解哪些是硬件做的,哪些是软件做的,分别在什么阶段什么时机做。

审核编辑:汤梓红

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

    关注

    59

    文章

    7437

    浏览量

    258252
  • 编程
    +关注

    关注

    88

    文章

    3441

    浏览量

    92415
  • Ping
    +关注

    关注

    0

    文章

    66

    浏览量

    15810
  • 开发板
    +关注

    关注

    25

    文章

    4436

    浏览量

    94058
  • 代码
    +关注

    关注

    30

    文章

    4556

    浏览量

    66810
  • 单板计算机
    +关注

    关注

    0

    文章

    68

    浏览量

    15507
  • 编译
    +关注

    关注

    0

    文章

    615

    浏览量

    32397
  • 驱动开发
    +关注

    关注

    0

    文章

    129

    浏览量

    12010
  • DWC2
    +关注

    关注

    0

    文章

    35

    浏览量

    98
收藏 人收藏

    评论

    相关推荐

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

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

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

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

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

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

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

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

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

    本文转自公众号,欢迎关注 基于DWC2USB驱动开发-USB连接详解 (qq.com) 一.前
    的头像 发表于 07-07 08:46 2317次阅读
    基于<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>连接<b class='flag-5'>详解</b>

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

    本文转自公众号,欢迎关注 基于DWC2USB驱动开发-高速设备枚举为全速设备问题案例分析 (qq.com) 一.前言   本文分享一个高速设备被枚举为全速的问题。     高速设备速
    的头像 发表于 07-10 17:12 770次阅读
    基于<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 674次阅读
    基于<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,
    的头像 发表于 07-16 16:42 888次阅读
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>-发送相关的寄存器DMA寄存器<b class='flag-5'>详解</b>

    基于DWC2USB驱动开发-USB详解

    不管什么通讯协议,比如UART,SPI,USB等等,不管是并口还是串口,不管是同步还是异步,我们从抽象的角度去看,其本质都是一样的。都是先定义物理信号,物理信号可能是差分,单端,电流驱动电压
    的头像 发表于 07-23 17:11 1472次阅读
    基于<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>包<b class='flag-5'>详解</b>

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

    本文转自公众号欢迎关注 基于DWC2USB驱动开发-数据不能发送问题分析案例 (qq.com)   一.前言        对于驱动
    的头像 发表于 08-08 09:43 1139次阅读
    基于<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主机正常工作是我做错了什么吗?

    cdc_ncm[ 1.793050] dwc2 49000000.usb-otg: mapped PA 49000000 to VA 7975fc9b[ 1.793872] ehci_hcd: USB 2.0
    发表于 12-02 06:06

    《Linux设备驱动开发详解》第20章、USB主机与设备驱动

    《Linux设备驱动开发详解》第20章、USB主机与设备驱动
    发表于 10-27 11:04 8次下载
    《Linux设备<b class='flag-5'>驱动</b><b class='flag-5'>开发</b><b class='flag-5'>详解</b>》第20章、<b class='flag-5'>USB</b>主机与设备<b class='flag-5'>驱动</b>

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

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