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

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

3天内不再提示

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

嵌入式USB开发 2023-05-08 18:10 次阅读

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

基于DWC2的USB驱动开发-0x01开篇介绍与新思DWC2 USB2.0控制器简介 (qq.com)

DWC2 USB2.0控制器介绍

前言

前面介绍了USB江湖中,硬件协议分析仪,软件抓包工具中的各门各派,各路高手。工欲善其事必先利其器,所以至少需要了解其中一个硬件协议分析仪和一个软件抓包工具,后面才能比较方便的进行USB开发,否则可能会迷失在USB协议的沼泽里,而难以自拔,此时你可能就会不断进行哲思:”我是谁,我在哪里,我在干嘛,我为什么要搞USB?”; ”软件问题,硬件问题,还是我的问题?”。

各门各派,江湖大侠都会有自己的独门绝技和独门武器,而我们看到各种武侠小说,电视剧中,大侠的长成都是奇遇绝顶高手,然后挑柴,打水,站桩,摸鱼(不是屏幕前的摸鱼),划水(不是屏幕前的划水),一顿输出,然后镜头切换春夏秋冬,从掌动草长莺飞到剑指秋风落叶,从拳击万丈瀑布到脚扫千层白雪,招式基本功达到炉火纯青之后,然后就是绝顶高手拿出一本泛黄的小册子或者来到一处绝壁前传授内功心法,于是功力突飞猛进,终得大成。终于下山行侠仗义,叱咤江湖,成为一代传奇。

UBS开发也是一样的,尤其是做USB底层比如驱动开发,那么至少需要购买一个USB硬件协议分析仪,以便抓取分析协议的底层信号和数据与规格书对照,这就是前面的基本功练习。,等协议熟悉了之后,就可以去USB官网搜索各种规格书,开发实际的产品,练习心法内功了,就好比可以进入达摩院的藏书楼去翻阅各种绝学典籍了。

实践是检验检验真理的唯一标准,所以我们不从USB复杂的协议规格书入手,一开始就直接学习少林武功的七十二绝技是不可取的,就好比鸠摩智最终导致的是走火入魔。最好的方法是基于某个USB的控制器,从零实践其驱动开发,先从实践开始熟悉协议,打好基础,练好基本功。遇到哪些内容或者问题然后理论结合实践,参照USB控制器的文档和USB规格书的文档进行实践和理论学习。这样后面才有可能驾驭,切记不能急于求成,只有基本功结合心法才能提升内力和功力。

相信本系列文章应该是全网第一部专门详细介绍基于DWC2 USB2.0控制器驱动开发的文章,慢慢来,希望和大家一起学习,从实践出发最终能成为USB开发的大侠。

新思的USB2.0 IP介绍

新思的USB 2.0 IP应该是业界使用得最多的IP解决方案了。市面上很多的量产MCU或者MPU都是基于新思的IP,比如各种xxx32的单片等。新思官网可以看到一些信息

https://www.synopsys.com/dw/ipdir.php?ds=dwc_usb_2_0_digital_controllers,但是其手册等不是直接开放,需要注册,目前个人注册好像不太行了。

新思的IP有以下特征:

  • 灵活的配置选项,以最大限度地提高性能和最小化CPU中断,后面我们也会详细讲到其中断相关的内容,中断通过一些bit的组合以标志不同的状态,以减少需要进行的判断逻辑。
  • 灵活的参数可以轻松集成到低延迟和高延迟系统中。
  • 基于系统要求的USB数据传输或事务处理。
  • 可配置的数据缓冲选项,以微调性能/面积的权衡。
  • 缓冲区和描述符预取使主机吞吐量最大化。
  • 固件可选端点配置,支持后处理应用程序更改;以及灵活的单芯片设计适用于多种应用,总之一个词就是”灵活”,但是后面看规格书也可以知道确实很复杂,配置参数选项很多。
  • 通过广泛的约束随机验证进行测试,确保高质量的IP。
  • AMBA™高性能总线(AHB)接口可快速集成到基于arm的设计中。所以你可以看到各种基于ARM尤其是Cortex-M系列的xxx32的MCU基本都是采用的新思的IP方案。
  • UTMI+ Level 3可以与兼容的PHY设备快速集成。
  • 高速high -Speed (480mbps)、全速Full-Speed (12mbps)和低速Low- Speed (1.5 Mbps)的操作符合USB OTG补充标准。
  • USB 2.0 HS OTG控制器支持外设或主机模式。
  • 也支持高速USB EHCI主机控制器。

文档

新思USB 2.0 IP主要有两个文档需要参考

《DesignWare Cores USB 2.0 Hi-Speed On-TheGo (OTG) Data book》

《DesignWare Cores USB 2.0 Hi-Speed On-TheGo (OTG) Programming Guide》

前者是描述IP的架构,信号,配置,寄存器等,有百多页。供IC设计,验证工程师,和驱动工程师查阅。驱动开发要频繁参考其寄存器部分,要做到每一个寄存器的每一个bit的作用都要了解,我们后面就会一步步参考它进行驱动的编写。当然要成为高手肯定要有很好的内力修为,这就需要对其架构等其他部分也要熟悉,所以其他部分我们后面也会一起慢慢阅读消化。

pYYBAGRYybCAGZfwABh0bPz6j2I114.png

后者是编程指导,驱动编写主要参考这一部分进行,也有五百多页,这个文档我们后面也会详细的阅读

pYYBAGRYybiAYkAaAAwHpyxYzdU397.png

如果需要这两个文档的可以公众号留言或者加我微信,可以分享给你,仅供分享学习之用。

总结

这一篇是我们正式进入USB驱动开发的第一篇, 与其他所有的USB书籍或者文章不一样,我们一开始不直接讲USB协议, 我们先从具体的USB IP入手,从USB的底层驱动编写实践入手再边实践边了解协议。理论结合实践才是好的方式, 心法招式结合基本功练习才有可能练成武功的最高境界,否则就会走火入魔。关于走火入魔的一个很明显的表现就是,很多USB驱动开发工程师或者嵌入式开发人员,一上来就在群里论坛里问”求救,xxx了是什么问题,怎么解决”,这一看就是基本功都没练习直接就练习少林七十二绝迹的,基本连USB控制器部分的参考手册数据手册,USB规格书都没怎么阅读过的,肯定做不好,必定走火入魔,迷失在各种问题里,哪怕是成为调参侠,调API侠,调库侠,复制粘贴侠最终也可能遇到各种BUG无法解决而终。我们做开发尤其是嵌入式开发,驱动开发,一定要基本功练好,对底层基本原理熟悉,并且经过亲身实践,理论结合实践才能做好,成为USB江湖一代大侠。

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

    关注

    59

    文章

    7437

    浏览量

    258234
  • USB2.0
    +关注

    关注

    1

    文章

    186

    浏览量

    45674
  • 新思
    +关注

    关注

    0

    文章

    20

    浏览量

    29803
  • USB驱动
    +关注

    关注

    1

    文章

    136

    浏览量

    19997
  • DWC2
    +关注

    关注

    0

    文章

    35

    浏览量

    98
收藏 人收藏

    评论

    相关推荐

    基于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'>USB2.0</b> IP功能特征<b class='flag-5'>介绍</b>

    基于DWC2USB驱动开发-0x05 DWC2 USB2.0 IP 寄存器介绍

    本文对控制器的寄存器有了一个整体上的概览,先了解个大概,了解寄存器的组织结构,大致了解一下常用的寄存器。后面编程时再一个个对照每一个寄存器的描述去编写代码。
    的头像 发表于 05-16 12:50 2048次阅读
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>-0x05 <b class='flag-5'>DWC2</b> <b class='flag-5'>USB2.0</b> IP 寄存器<b class='flag-5'>介绍</b>

    基于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描述符详解

    基于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>复位详解

    基于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>连接详解

    基于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 673次阅读
    基于<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 888次阅读
    基于<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 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
    发表于 05-12 17:46

    如何实现rk3288 otg模式切换的设计呢

    检测VBUS电平,连PC约为3V,无为0VOTG_ID:输入信号,用于识别外接设备为模式(host,dev),默认上拉处于Dev,如果控制器进入HOST文档描述:DWC2是通过检测 OTG_ID 脚上
    发表于 05-24 10:54

    如何对基于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

    使用USB OTG端口作为以太网小工具无法工作是为什么?

    重新启动板的情况下恢复:[46.766872] dwc2 49000000.usb-otg: new device is high-speed[46.771014] dwc2
    发表于 12-09 07:01

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

    本文转自公众号系列文章,欢迎关注 基于DWC2USB驱动开发-USB包详解 (qq.com) 一.前言 前面我们对SETUP完成标志DOE
    的头像 发表于 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