-
如何从零开始做一个 USB 键盘?(怎么自己做usb)
- 网站名称:如何从零开始做一个 USB 键盘?(怎么自己做usb)
- 网站分类:技术文章
- 收录时间:2025-07-10 14:50
- 网站地址:
“如何从零开始做一个 USB 键盘?(怎么自己做usb)” 网站介绍
分两种情况:
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系统基本架构,看它是如何与计算机连接的
- 科普:USB有A口和C口,那有没有B口?
- WinForm 中玩转串口通信:从基础到实战
- ThinkSystem DS系列存储iSCSI端口连接Windows主机基本配置
- 新打印机怎么连接电脑?(爱普生打印机怎么和电脑连接)
- SEW变频器 MDX61B 开环驱动 DR 电机初始化步骤
- 将USB设备使用情况看个清楚(usb使用记录能彻底删除吗)
- 软网推荐:检验硬盘健康状况与性能
- iOS 开发面试通关指南:67 个必知问题
- 三菱编程软件GX WORKS2的安装和调试
- 细节不容忽视 你不知道的接口那些事儿
- 三菱 Works2 编程太难?不存在的!零基础也能啃懂的保姆级教程,
- 电脑硬盘序列号,怎么查看?3种方法整理如下
- 还搞不懂步进电机?一定要看这一文,工作原理+驱动方法,秒懂
- 趣闻:usb的图标设计成这个样子到底有什么特殊的含义?
- 16 种计算机端口及其功能(计算机系统常用的端口和对应服务)
- 10个实用小命令,轻松查出你电脑的真实信息
- 如何在Linux下给zigbee CC2530实现上位机
- 最近发表
- 标签列表
-
- mydisktest_v298 (35)
- sql 日期比较 (33)
- document.appendchild (35)
- 头像打包下载 (35)
- 二调符号库 (23)
- acmecadconverter_8.52绿色版 (25)
- f12019破解 (16)
- 流星蝴蝶剑修改器 (18)
- np++ (17)
- 梦幻诛仙表情包 (36)
- 魔兽模型 (23)
- java面试宝典2019pdf (26)
- beamoff下载 (17)
- disk++ (30)
- vncviewer破解版 (20)
- word文档批量处理大师破解版 (19)
- pk10牛牛 (20)
- 加密与解密第四版pdf (29)
- iteye (26)
- parsevideo (22)
- ckeditor4中文文档 (20)
- centos7.4下载 (32)
- cuda10.1下载 (22)
- intouch2014r2sp1永久授权 (33)
- usb2.0-serial驱动下载 (24)