完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
为什么要学习USB?
现在回到今天的主题,为什么要学习 USB? 有人说串口就够用了啊,串口简单又容易上手,网上也能找到很多 USB 转串口的模块,为什么要学它呢? 首先,在速度上,USB 比串口的速度要快的多,最低版本 192 KB/s,最高1280MB/s,当然这是理想速度,除去协议本身的开销会减少部分,但总的来说,比串口快的多。 现在大部分 USB 设备都是全速设备,即 1.5 MB/s,STM32 系列基本都支持全速以上的USB接口(有USB模块的STM32芯片),所以速度上比串口强的多,一般 USB 转串口的模块速率最大也就 115200b/s,换算成字节也就是 11.5 KB/s,而且因为协议简单,所以不存在错误重传,应答等机制,如果不用485之类的,抗干扰能力也不强(USB使用差分传输,抗干扰强)。 但这些都不是重点,重点是当你想和电脑通信时,你必须借助各种硬件(杜邦线、转接模块)才能实现一个最简单的串口通信。 你想用它和电脑玩点高级货,根本无从下手。 而当你掌握了 USB,只需要一个USB线,插上电脑,各种玩法就随之而来。 DIY调试器?虚拟串口?虚拟U盘?USB摄像头?虚拟网卡? 这些统统没问题,总之你能想到的和电脑通信的设备,它基本都能实现。而这些设备的驱动、上位机你基本能找到现成的。 哦,你只想做个USB鼠标、键盘玩玩,那资料满天飞,掌握了 USB,轻轻松松实现。 这才是通用接口应该有的样子嘛,而串口目前在笔记本上已经基本被淘汰了,如果想用串口,不好意思,通过 USB 虚拟吧! 所以,USB 学习对于今天的我们来说,必不可少! 为什么写教程? USB教程其实在网上有很多,非常出名的是《圈圈教你玩USB》,不过它是 2009 出版的,距今已十多年了。 虽说很老,但是知识是相通的,鱼鹰也是靠它学了不少东西。 但是鱼鹰在学习过程中,有几个问题存在: 第一:图解很少,虽说有很多通俗的语句进行描述,但总感觉还是不甚明了 第二:开发板太老,具体芯片型号鱼鹰已经不记得的,因为鱼鹰没想过买这个开发板,为什么?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》) 通过以上讲解,可以让各位道友从下到上,有一个清晰的认识,遇到问题也更容易定位。 事实上,对于嵌入式开发来说,我们其实更关注上层的东西,但是硬件上的东西还是需要作为了解性知识进行学习的,否则本来软件没问题,只是硬件原因导致无法通信,如果从软件上查根本找不出问题。 这里说说为什么使用 CDC 作为 USB 实战例程呢? 市面上很多开发板教程都是用鼠标、键盘来实战的。 确实,作为USB设备来说,鼠标、键盘是最常见的USB设备了,但是我们不可能拿一个开发板去当键盘或鼠标去实际使用吧,所以模拟一个USB鼠标和键盘对于我们开发人员来说,根本不实用。 而串口虽说速度较低,但还是很多人在使用的,也有很多上位机支持,如果我们能通过 CDC 模拟一个串口,那么我们就可以很方便的使用目前市面上的硬件和软件了,而且因为实质上是 USB,所以速度会更快。 省去了中间商赚差价,最大速率取决于USB本身,而不是受限于USB转接模块,而上位机那边原来该怎么使用现在也怎么使用,方便简单,你值得拥有。 当然还有一个原因,对于初学者而言,要理解 HID (参考《USB-HID协议中文版.doc》)这个类还是很难的,据说这个类是所有USB类中最复杂的类,通信过程也比较麻烦,所以鱼鹰选择了 CDC 这个类讲解,降低学习难度,当你掌握了USB基础,再学其他的也就容易的多了。 关于CDC的例程,鱼鹰已经在整理了,将尽可能的删掉不相关的内容,让各位道友更快的入门 USB,并且鱼鹰的图解也将基于该例程,大家到时候对照着参考就行,建议使用 SI 软件阅读源码。 |
|
|
|
只有小组成员才能发言,加入小组>>
3308 浏览 9 评论
2988 浏览 16 评论
3490 浏览 1 评论
9049 浏览 16 评论
4083 浏览 18 评论
1167浏览 3评论
601浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
592浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2329浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1892浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 13:24 , Processed in 1.090222 second(s), Total 49, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号