如何从零开始做一个 USB 键盘?
csdh11 2025-01-05 16:41 3 浏览
分两种情况:
1、做一个真正的USB键盘,这种设计基本上不涉及大量的软件编码。
2、做一个模拟的USB键盘,实际上可以没有按键功能,这种的需要考虑大量的软件编码,实际上是一个单片机。
第一种设计:买现成的USB设备芯片,然后焊好就可以了,几乎没听说过谁自己从零开始做USB设备芯片的,首先晶振之类的如何满足要求就是一个问题。
基本原理就是按键,转换扫描码,写入寄存器,然后等主机那边去读就可以了。
主机端实际上不需要做什么设计,因为键盘属于标准的class设备,都是自带驱动的。
第二种设计:首先要找到一个支持OTG的单片机(板子),编写完整的USB Device Stack(大概几万行),定义好USB描述符(Descriptor)和HID描述符(Windows需要),然后等待主机的中断传输请求即可。
每次把需要发送的扫描码(scan code)写到中断传输的缓冲区里,让device stack把数据发送走即可。
至于硬件信号部分,这些都是USB控制器(简称控制器,下同)集成的,如果说你要自己写一个控制器,那么需要的技术就太复杂了,全球也没有多少厂商能弄出来自己的控制器。做控制器需要熟练背诵USB2.0技术规范以及EHCI/UHCI/OHCI技术规范。
---------------------既然问具体怎么做,那么我也补充一些吧---------------------
首先,需要一个支持OTG或者USB Device工作模式的板子/芯片/模块。板子可大可小,可以是工业级的带OTG的板子,也可以是小小的只有一个单片机的那种。小的那种我没有用过,我就说大的。
OTG的意思可以大概理解为这个USB口既可以作为主机口接设备,也可以作为设备接入主机,新一点的手机都带这个功能。
我所知道的OTG控制器有Mentor Graphics的,还有Freescale有一些板子也支持。
找到这样的板子,然后就是找代码了,Linux里实际上就有这样的代码,比如Mentor Graphics的控制器驱动的代码在:linux-3.7.1\drivers\usb\musb,这里,当然如果你用的是别的版本的Linux,在相应的位置也能找到代码。不知道Linux源码从哪里找?传送门:The Linux Kernel Archives
有了代码,你还需要U-boot或者其它的东西去启动这个板子,同时要使用对应的交叉编译器,应该是arm的交叉编译器。
于是,板子能起来了,接到主机(比如PC上)也能识别出来一个“未知设备”了,剩下的工作就是给这个未知设备写驱动。
首先,要通过控制器代码去编写相关的USB设备描述符,PC能识别各种设备都是靠描述符,对此,需要先了解USB技术规范:《Universal Serial Bus Specification Revision 2.0》,这个百度一下就能下载,但是全英文的,我见过中文的,但翻译的很糟糕并且不全。
在此技术规范的章节:9.6.1 Device里有详细描述了USB设备描述符的信息。具体怎么把描述符写到驱动里,这个我不是特别清楚,所以只能说你要自己看代码了。
有了设备描述符,实际上还有很多别的描述符要设置,比如接口描述符、配置描述符等等,这些规范里都有,需要一一阅读。
有了这些,你只是制造了一个USB设备,但Windows还不认账,此时,需要设置HID描述符,因为键盘输入HID设备,关于HID的描述也有技术规范《Device Class Definition for Human Interface Devices (HID) Version 1.11》,同样没有中文的。
然后,你就可以根据这个规范发送对应的中断传输(interrupt)信号,就可以跟主机通信了。然后具体你想模拟哪个按键,需要发送对应的扫描码,具体的内容参考这里:Scancode,扫描码的介绍是有中文的,找到以后,你就可以很开心的发送键盘按键信息了。
然后,就完事了,难度就是要阅读很多技术规范,以及大量的代码。
当然,某些商用的嵌入式系统自带USB设备模拟驱动,如果有钱(很贵的),买一套成品过来,找一个板子就可以了。
— 完 —
- 上一篇:不能随便装,驱动安装顺序你知道吗?
- 下一篇:可编程USB转串口适配器开发板
相关推荐
- 史上最全的 Python 学习资料,PDF 电子书大合集(免费)
-
史上最全的Python学习资料最近一直有读者问我有没有好的Python学习资料,有没有好的PDF电子书。小白学习Python也有很长的时间了,搜集的资料也有非常多。今天整理了下,全部免...
- 16 款最佳免费开源 PDF 开发库 | OpenSSH 9.9 发布,默认禁用 DSA 算法
-
16款最佳免费开源PDF开发库便携式文档格式(PDF)由AdobeSystems于1993年创建,用于文档交换。这种格式包括PostScript页面描述编程语言的子集、字体嵌...
- ?? 盘点Python入门必备神仙书籍|附pdf
-
Python编程从入门到实践整本书内容非常丰富,包含python相关基础知识和项目实践部分,基础知识部分基本上讲解了所有python相关的基础知识,实践部分选择了三个案例。非常适合初学者学习Pyth...
- Python 3.9.0 官方中文PDF文档,建议收藏,拿走不谢
-
最新版的Python官方文档!整理好了。领取方式见文末...
- Python趣味打怪:60秒学会一个例子,147段代码助你从入门到大师
-
鱼羊发自凹非寺量子位报道|公众号QbitAI人生苦短,编程苦手,不妨学起Python,感受一飞冲天的快乐。不要害怕学习的过程枯燥无味,这里有程序员jackzhenguo打造的一份中文Pyt...
- 咸鱼疯传3.6W次!Python16本高清版 PDF初学者的极佳教材荐
-
【文末有获取方式】【文末有获取方式】...
- 史上最详细python学习路线-从入门到精通,只需5个月时间
-
Python是一种功能很强大的语言,对于零基础学习Python还是有难度的,但只要学习方法对,入门还是很快哒。针对Python的初学者,从无到有的Python语言如何入门,主要包括了:Python的简...
- 硬核!288页Python核心知识笔记(附思维导图,建议收藏)
-
今天就给大家分享一份288页Python核心知识笔记,相较于部分朋友乱糟糟的笔记,这份笔记更够系统地总结相关知识,巩固Python知识体系。文末获取完整版PDF...
- 这张思维导图,涵盖Python所有核心知识点,PDF赶快拿走
-
这张Python思维导图,涵盖了所有的核心知识点,包括基础知识、爬虫、函数、模块、类和对象等,从以往假大空的知识堆砌转变为清晰实用的知识体系...
- 顶级黑客用5分钟爬的python教程!整整400集,建议收藏
-
兄弟!毫无套路!!福利分享:1、本套视频一共400集,本套视频共分4季第一季Python基础。...
- 《Python知识手册》,高清全彩pdf版开放下载
-
Python编程还不懂?今天我要把我参与编写的这套《Python知识手册》免费分享出来,看完文末有惊喜哦。文末惊喜,记得看完哦!...
- 1张思维导图,告诉你Python核心知识体系,高清PDF拿走不谢
-
这张思维导图按顺序依次展示了以下内容的核心知识:基础知识、函数、文件、类和对象、魔方方法、模块、爬虫等内容。每一部分都细致展开解读,化复杂为具体,化零散为整体,尤其适合Python初学者参考学习。Py...
- 清华教授熬夜开发的《Python王者归来》高清版PDF开放下载
-
相信通过这本资料你可以轻松学会Python语法与应用,并逐步向Python高手之路迈进!...
- 一周热门
-
-
一文读懂关于MySQL Datetime字段允许插入0000-00-00无效日期
-
MySQL数据库关于表的一系列操作 mysql 表操作
-
新版腾讯QQ更新Windows 9.9.7、Mac 6.9.25、Linux 3.2.5版本
-
一款全能的看图软件,速度快、功能强、免费用
-
IDC机房服务器托管可提供的服务
-
一文看懂mysql时间函数now()、current_timestamp() 和sysdate()
-
深度测评:Pixave 和图片管理之间的距离(二)
-
查看 CAD文件,电脑上又没装AutoCAD?这款CAD快速看图工具能帮你
-
Boston Dynamics Founder to Attend the 2024 T-EDGE Conference
-
Serv-u 提权
-
- 最近发表
-
- 史上最全的 Python 学习资料,PDF 电子书大合集(免费)
- 16 款最佳免费开源 PDF 开发库 | OpenSSH 9.9 发布,默认禁用 DSA 算法
- ?? 盘点Python入门必备神仙书籍|附pdf
- Python 3.9.0 官方中文PDF文档,建议收藏,拿走不谢
- Python趣味打怪:60秒学会一个例子,147段代码助你从入门到大师
- 咸鱼疯传3.6W次!Python16本高清版 PDF初学者的极佳教材荐
- 史上最详细python学习路线-从入门到精通,只需5个月时间
- 硬核!288页Python核心知识笔记(附思维导图,建议收藏)
- 这张思维导图,涵盖Python所有核心知识点,PDF赶快拿走
- 顶级黑客用5分钟爬的python教程!整整400集,建议收藏
- 标签列表
-
- huaweiupdateextractor (27)
- mysql 时间索引 (31)
- mydisktest_v298 (34)
- document.appendchild (35)
- 头像打包下载 (61)
- acmecadconverter_8.52绿色版 (39)
- oracle timestamp比较大小 (28)
- word文档批量处理大师破解版 (36)
- server2016安装密钥 (33)
- mysql 昨天的日期 (37)
- 加密与解密第四版pdf (30)
- jemeter官网 (31)
- parsevideo (33)
- 个人网站源码 (37)
- ckeditor4中文文档 (27)
- exe4j_java_home (30)
- centos7.4下载 (33)
- xlsx.full.min.js下载 (32)
- 深度学习 pdf (28)
- mysql 查询今天的数据 (34)
- intouch2014r2sp1永久授权 (36)
- 先锋影音源资2019 (35)
- usb2.0-serial驱动下载 (30)
- vs2010官网 (31)
- python核心编程第四版pdf (32)