![](https://img-blog.csdnimg.cn/direct/03ee94fbdd7d4cf78e05467aed61be6b.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
从0开始到实战应用USB
文章平均质量分 91
适用于嵌入式场景下的USB外设应用,无论是对于学习USB的初学者或想快速集成到项目产品上的开发者都适用,我将深度解析硬件原理和固件设计,让其更通俗易懂。
嵌入式阿役
02年,23届物联网工程毕业,入职深圳一家中小型公司研发部做嵌入式开发已有一段时日,在嵌入式的学习生涯中养成的习惯改变了我的人生轨迹和日常生活,目前主要是做底层驱动和应用层的开发,今后将会一直学习下去,同时也会分享在学习和开发过程中的历程和感悟。
展开
-
关于USB开发的前言(学前必看)
本专栏下的情景只属于于嵌入式开发中的USB硬件控制器在主机或设备下的工作,因为术业有专业,和专门写USB协议的老哥自然是比不了,但是他们写的往往是应用层或者是和嵌入式情景不相关的开发。原创 2024-04-29 14:37:29 · 394 阅读 · 0 评论 -
9.USB OTG应用
对于USB OTG来说,基于以下特性。1.内部可控信号线的上下拉电阻,当硬件外设使能时会自动根据配置进行上下拉处理,无需外部电路。2.大多数情况都是作为设备进行工作。3.实现功能的复杂程序取决于芯片的技术依赖环境。所以只要我们在前面的学习中,理解了USB协议,熟悉了设备开发,就可以发现本质,不论是USB OTG还是USBD,只要找到中断处理函数,对应的事务处理和请求处理,就可以掌握整个枚举和通信的过程,以达到优化和修改的目的,实现预想的情景。原创 2024-05-08 10:39:54 · 763 阅读 · 0 评论 -
8.USB:WINUSB设备(通用串行总线设备)
经过前面的学习,从USB理论到实践,从工程实例一步步的证实,应该对于USB来说有一定的认识了,到了这里wimusb并没有想象中的神秘,它也只是一个设备类。为了能够在windows下快速建立一个唯一寻址的免驱串行通信设备,微软制定了一个特别厂商类设备,为winusb设备,它的类代码为0xFF特定厂商类)。到这里我们的WINUSB就结束了,值得注意的是除了枚举设时实例路径要变化外等相关注意外,还需要知道VID和PID对于设备来说的意义,以及设备的GUID。原创 2024-05-07 17:15:29 · 1484 阅读 · 0 评论 -
7.USB:HID设备(键盘)
报告的格式。原创 2024-05-07 10:23:51 · 1084 阅读 · 0 评论 -
6. USB:CDC_ACM设备(虚拟串口)
文章以实现cdc_acm设备为demo进行了虚拟串口的测试,并通过demo解析了整个驱动框架的核心,以及中断处理和请求处理。整个中断的设计是非常合理的,以及请求的处理,但是设备类下的文件实现需要用户自己实现,也可以基于demo进行修改。比如描述符和设备类功能接口下函数。以及通信框架。cdc_acm的框架相对其他的设备类来说比较复杂,但是可以从这个设备类入手,方便我们后续在此基础上改写为HID键盘设备和WINUSB通用串行总线设备。原创 2024-05-06 17:10:13 · 2468 阅读 · 0 评论 -
5.USB工程实例
实例工程为基于KEIL MDK下的GD32F103C8T6工程,移植了官方的标准外设库和USBD(USB设备驱动)库,并完成了CDC_ACM、HID、WINUSB设备类的驱动和应用。原创 2024-05-06 13:43:00 · 1033 阅读 · 0 评论 -
4.虚拟串口
之前买过一个stm32f103c8t6的最小核心板,10块钱出头,就是非常经典的那款,非常耐用,直到现在我还有在用着,但是这款板子有一个问题就是没有串口,准确来说就是没直接的USB转串口的电路,可能是成本的问题 所以它并不能用PC直接调试 所以我也没过多的去探究-商家甚至发了引脚的复用图给我-所以我连原理图都没看-而且在我开发查阅资料的时候也看到有人提过没有串口 所以我就一直默认这个板子是没有直接调试的方法的-我后来调试都是外接了一个串口转USB模块。原创 2024-04-30 17:45:27 · 851 阅读 · 0 评论 -
3.嵌入式中USB应用实例
当然,我们在开发的时候可能留意过,一般USB的外设库它不和其他外设一起,原因因为它的实现相对复杂一点,一般是和设备类实例一起存放。而且开发USB外设一般也不需要我们从头写驱动(这个过程需要的时间比较久,而且是一定需要仪器调试),厂商在做这个硬件的外设的时候肯定要测试性能,所以都会有写好的驱动进行公开,不管是从学习角度还是快速开发来说我们都需要去移植厂商提供的USB库或中间件,到这可能有人会觉得直接移植就完事了,为什么不直接教移植呢?原创 2024-04-30 16:36:29 · 900 阅读 · 0 评论 -
2.USB体系
到这里,我们从物理层到数据链路层解析完成,我们的设备已经是合法的设备,并且成功建立了连接。枚举非常关键,往往大多数问题出现在枚举过程,一般枚举成功了基本后面不会有什么问题了,接下来我们将从设备实例验证我们的理论,通过开发板,配置硬件外设USB,配置软件来完成枚举过程。原创 2024-04-30 14:05:43 · 753 阅读 · 0 评论 -
1.认识USB协议
USB通信协议本质上就是在搭建好的通信物理层上,一层又一层的规定,根据应用特性扩展的复杂规定,其复杂程序已经出过不少书籍。但是对我们而言,很多东西有规律可循,而且我们也不需要关心这么多。在USB协议中一层又一层数据包中包含的数据数据包,就是真正意义上发送的数据,但是当主机解开USB协议(正确找到接收到数据数据包中的数据字段)拿到真正的数据后,它怎么知道这个数据是拿来干嘛的?它怎么知道这个数据该怎么用,所以又引出了子协议的概念,也就是设备类的概念。这个我们在下一章再说。原创 2024-04-29 17:48:05 · 1350 阅读 · 0 评论