本篇笔记为 USB 系列教程第一篇,一共有多少篇鱼鹰心里也没底,鱼鹰不会因为篇幅多而停止,会尽可能的将 USB 讲透,让你通过本系列教程入门 USB(Universal Serial Bus,通用串行总线)。
当然,因为鱼鹰也是用的不多,所以有些知识点可能是错的,需要对照 USB 官方文档确认。
要想讲透,大量的图解是少不了的,不过鱼鹰已经准备的差不多了,先给道友过个目好了。
鱼鹰与 USB 的渊源
说起鱼鹰和 USB 的渊源要从 2016 年开始,那个时候鱼鹰花了一个月从最基本的 USB 硬件层开始,到 STM32 模块,再到 USB 协议,专注的学习了一个月(学生时间多)才勉强明白 USB 到底是个什么鬼。
但是鱼鹰还是心心念念着它,所以在工作后准备再次学习,还特地发朋友圈表示决心,最后还是无疾而终,不过那次学习了解了 HID 是个什么鬼。
要实现这个东西可不简单,USB 是大头,FAT 文件系统老二,Cortex-M 调试组件知识第三,还有其它零零散散的知识点,没有好的基础,根本搞不定。
FAT 文件系统知识鱼鹰已经准备好了,又是画了大量的图进行说明,不过到底会不会像 USB 一样写个教程出来,那完全看鱼鹰心情了,毕竟当时学完之后马上写会写的比较清楚,可那个时候公众号发展不如意,也就没那个心思去分享了。
这个随缘吧。
唠嗑了这么多,鱼鹰是想向各位道友表达一个观点,做技术的不容易,能在技术路上走的很远的都是勇士!
要想坚持,没有兴趣是很难走下去的。
很多人可能会说,这个东西网上不是都有吗,随便找一份源码,改改引脚,调试器就出来了呀,为什么你要费劲巴力的又是画图,又是写教程的,为的是什么?
为的是以后当我想实现自己想要的功能时,我能快速实现;为的是遇到 USB 的问题时我能快速定位,这就是鱼鹰的目的,也是鱼鹰一直坚持的学习观点,学透!
为什么要学习 USB?
有人说串口就够用了啊,串口简单又容易上手,网上也能找到很多 USB 转串口的模块,为什么要学它呢?
首先,在速度上,USB 比串口的速度要快的多,最低版本 192 KB/s,最高 1280MB/s,当然这是理想速度,除去协议本身的开销会减少部分,但总的来说,比串口快的多。
(图片来源与网上)
你想用它和电脑玩点高级货,根本无从下手。
而当你掌握了 USB,只需要一个 USB 线,插上电脑,各种玩法就随之而来。
这些统统没问题,总之你能想到的和电脑通信的设备,它基本都能实现。而这些设备的驱动、上位机你基本能找到现成的。
这才是通用接口应该有的样子嘛,而串口目前在笔记本上已经基本被淘汰了,如果想用串口,不好意思,通过 USB 虚拟吧!
所以,USB 学习对于今天的我们来说,必不可少!
为什么写教程?
虽说很老,但是知识是相通的,鱼鹰也是靠它学了不少东西。
但是鱼鹰在学习过程中,有几个问题存在:
第一:图解很少,虽说有很多通俗的语句进行描述,但总感觉还是不甚明了
第二:开发板太老,具体芯片型号鱼鹰已经不记得的,因为鱼鹰没想过买这个开发板,为什么?STM32 已经集成了 USB 接口,为什么还要单独买一个学习呢。
第三:例程不够规范,很多异常没有考虑。确实,作为初学者而言,简单就是最好的,但是对于鱼鹰这样的老手而言,还是需要比较规范、易读的例程才能运用到实际产品中去,以后需求变了,改起来也方便。
以上就是鱼鹰在学习过程中遇到的问题点,所以针对这些问题,鱼鹰想自己写!
但是因为鱼鹰对于 USB 的了解还不够多,而且也不会面面俱到的写,所以各位道友还是需要从头阅读这本书(网上有 PDF,鱼鹰分享的资料中也会有,有条件的可以购买正版书籍学习)。
不过鱼鹰会将一个 CDC (虚拟串口)例程通过图解的方式从头到尾讲透、讲彻底,让大家真正入门 USB,这就是鱼鹰写这个系列的目的。
而对于高级部分,比如虚拟 U 盘、调试器、HUB、OTG 等部分可能会选择付费阅读形式进行分享(也可能不分享,看情况了,鱼鹰比较佛系),毕竟这个耗费了鱼鹰太多的精力。
但是这些高级部分对于学习了 USB 基础的道友来说,都是能自行学习的,鱼鹰的笔记只不过会让这个学习的时间缩短而已。
毕竟,入门才是最难的!
怎么学 USB?
鱼鹰计划将以如下学习路线分享教程:
1、底层通信,USB 是如何通过 USB 线传输数据的(类似串口协议部分)。(参考《USB 培训 _Part1_ 协议 .pdf》)
2、STM32 中的 USB 模块(参考《STM32 中文手册》)
3、USB 协议基础(参考《圈圈教你玩 USB.pdf》)
4、CDC 通信过程详解(参考《USB CDC 类入门培训 .pdf》)
通过以上讲解,可以让各位道友从下到上,有一个清晰的认识,遇到问题也更容易定位。
事实上,对于嵌入式开发来说,我们其实更关注上层的东西,但是硬件上的东西还是需要作为了解性知识进行学习的,否则本来软件没问题,只是硬件原因导致无法通信,如果从软件上查根本找不出问题。
市面上很多开发板教程都是用鼠标、键盘来实战的。
确实,作为 USB 设备来说,鼠标、键盘是最常见的 USB 设备了,但是我们不可能拿一个开发板去当键盘或鼠标去实际使用吧,所以模拟一个 USB 鼠标和键盘对于我们开发人员来说,根本不实用。
而串口虽说速度较低,但还是很多人在使用的,也有很多上位机支持,如果我们能通过 CDC 模拟一个串口,那么我们就可以很方便的使用目前市面上的硬件和软件了,而且因为实质上是 USB,所以速度会更快。
以前你的串口打印可能是这样连接的:
现在是这样:
当然还有一个原因,对于初学者而言,要理解 HID (参考《USB-HID 协议中文版 .doc》)这个类还是很难的,据说这个类是所有 USB 类中最复杂的类,通信过程也比较麻烦,所以鱼鹰选择了 CDC 这个类讲解,降低学习难度,当你掌握了 USB 基础,再学其他的也就容易的多了。