0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何自己自制一个USB键盘

Wildesbeast 来源:网络整理 作者:佚名 2019-11-09 09:55 次阅读

哈哈,终于搞了一回USB HID设备,做了一个USB键盘来玩玩~~~~其中的报告描述符让我晕了几天~~~~~几份HID相关的协议还是蛮长的~~~~~~明天再弄个USB鼠标设备玩玩~~~~~~~有空的话再搞个红外遥控器玩玩~~~

这回是拿以前做的Mass storage来改的,所以比较快,修改了一下描述符以及端点处理等,就行了。用了一个4*4的小键盘,有0-9十个数字键,Num Lock键,Caps Lock键,Shift键,Ctrl键,Alt键,回车键等。

最多可以有三个键同时按下,如果相交的话,最多只能两个键按下。

以下是通过串口返回的调试信息

系统启动。..。..。..。..。..。..。..。..。..。..。.

断开USB连接。..。..。..。..。..。..。..。..

USBD12芯片初始化

设置地址。..。..。..。..。..。..。..

地址为: 0

连接USB.。..。..。..。..。.

USB总线复位。..。..。..。..。..。..。..。..。..。..。.

USB总线挂起。..。..。..。..。..。..。..。..。..。..。.

USB总线复位。..。..。..。..。..。..。..。..。..。..。.

USB总线挂起。..。..。..。..。..。..。..。..。..。..。.

USB总线复位。..。..。..。..。..。..。..。..。..。..。.

USB标准请求。..。..。..。..。..。..。..。..。..。..。.

获取描述符。..。..。..。..。..。..。..。..。..。..。.

获取设备描述符。..。..。..。..。..。..。..。..。..。..。.

USB总线复位。..。..。..。..。..。..。..。..。..。..。.

USB标准请求。..。..。..。..。..。..。..。..。..。..。.

设置地址。..。..。..。..。..。..。..

地址为: 2

USB标准请求。..。..。..。..。..。..。..。..。..。..。.

获取描述符。..。..。..。..。..。..。..。..。..。..。.

获取设备描述符。..。..。..。..。..。..。..。..。..。..。.

USB标准请求。..。..。..。..。..。..。..。..。..。..。.

获取描述符。..。..。..。..。..。..。..。..。..。..。.

USB标准请求。..。..。..。..。..。..。..。..。..。..。.

获取描述符。..。..。..。..。..。..。..。..。..。..。.

获取配置描述符。..。..。..。..。..。..。..。..。..。..。.

USB标准请求。..。..。..。..。..。..。..。..。..。..。.

获取描述符。..。..。..。..。..。..。..。..。..。..。.

获取字符串描述符。..。..。..。..。..。..。..。..。..。..。.

获取语言ID.。..。..。..。..。..。..。..。..。..。..。

USB标准请求。..。..。..。..。..。..。..。..。..。..。.

获取描述符。..。..。..。..。..。..。..。..。..。..。.

获取字符串描述符。..。..。..。..。..。..。..。..。..。..。.

获取设备序列号。..。..。..。..。..。..。..。..。..。..。.

USB标准请求。..。..。..。..。..。..。..。..。..。..。.

获取描述符。..。..。..。..。..。..。..。..。..。..。.

USB标准请求。..。..。..。..。..。..。..。..。..。..。.

获取描述符。..。..。..。..。..。..。..。..。..。..。.

获取配置描述符。..。..。..。..。..。..。..。..。..。..。.

USB标准请求。..。..。..。..。..。..。..。..。..。..。.

获取描述符。..。..。..。..。..。..。..。..。..。..。.

USB标准请求。..。..。..。..。..。..。..。..。..。..。.

获取描述符。..。..。..。..。..。..。..。..。..。..。.

USB标准请求。..。..。..。..。..。..。..。..。..。..。.

获取描述符。..。..。..。..。..。..。..。..。..。..。.

获取字符串描述符。..。..。..。..。..。..。..。..。..。..。.

获取语言ID.。..。..。..。..。..。..。..。..。..。..。

USB标准请求。..。..。..。..。..。..。..。..。..。..。.

获取描述符。..。..。..。..。..。..。..。..。..。..。.

获取字符串描述符。..。..。..。..。..。..。..。..。..。..。.

获取产品字符串。..。..。..。..。..。..。..。..。..。..。.

USB标准请求。..。..。..。..。..。..。..。..。..。..。.

获取描述符。..。..。..。..。..。..。..。..。..。..。.

USB标准请求。..。..。..。..。..。..。..。..。..。..。.

获取描述符。..。..。..。..。..。..。..。..。..。..。.

USB标准请求。..。..。..。..。..。..。..。..。..。..。.

获取描述符。..。..。..。..。..。..。..。..。..。..。.

USB标准请求。..。..。..。..。..。..。..。..。..。..。.

获取描述符。..。..。..。..。..。..。..。..。..。..。.

USB标准请求。..。..。..。..。..。..。..。..。..。..。.

获取描述符。..。..。..。..。..。..。..。..。..。..。.

USB标准请求。..。..。..。..。..。..。..。..。..。..。.

获取描述符。..。..。..。..。..。..。..。..。..。..。.

获取字符串描述符。..。..。..。..。..。..。..。..。..。..。.

获取语言ID.。..。..。..。..。..。..。..。..。..。..。

USB标准请求。..。..。..。..。..。..。..。..。..。..。.

获取描述符。..。..。..。..。..。..。..。..。..。..。.

获取字符串描述符。..。..。..。..。..。..。..。..。..。..。.

获取产品字符串。..。..。..。..。..。..。..。..。..。..。.

USB标准请求。..。..。..。..。..。..。..。..。..。..。.

获取描述符。..。..。..。..。..。..。..。..。..。..。.

USB标准请求。..。..。..。..。..。..。..。..。..。..。.

获取描述符。..。..。..。..。..。..。..。..。..。..。.

USB标准请求。..。..。..。..。..。..。..。..。..。..。.

获取描述符。..。..。..。..。..。..。..。..。..。..。.

USB标准请求。..。..。..。..。..。..。..。..。..。..。.

获取描述符。..。..。..。..。..。..。..。..。..。..。.

USB标准请求。..。..。..。..。..。..。..。..。..。..。.

获取描述符。..。..。..。..。..。..。..。..。..。..。.

USB标准请求。..。..。..。..。..。..。..。..。..。..。.

获取描述符。..。..。..。..。..。..。..。..。..。..。.

获取设备描述符。..。..。..。..。..。..。..。..。..。..。.

USB标准请求。..。..。..。..。..。..。..。..。..。..。.

获取描述符。..。..。..。..。..。..。..。..。..。..。.

USB标准请求。..。..。..。..。..。..。..。..。..。..。.

获取描述符。..。..。..。..。..。..。..。..。..。..。.

获取配置描述符。..。..。..。..。..。..。..。..。..。..。.

USB标准请求。..。..。..。..。..。..。..。..。..。..。.

获取描述符。..。..。..。..。..。..。..。..。..。..。.

获取配置描述符。..。..。..。..。..。..。..。..。..。..。.

USB标准请求。..。..。..。..。..。..。..。..。..。..。.

获取描述符。..。..。..。..。..。..。..。..。..。..。.

USB标准请求。..。..。..。..。..。..。..。..。..。..。.

获取描述符。..。..。..。..。..。..。..。..。..。..。.

USB标准请求。..。..。..。..。..。..。..。..。..。..。.

设置配置。..。..。..。..。..。..。..。..。..。..。.

USB类请求。..。..。..。..。..。..。..。..。..。..。.

设置空闲。..。..。..。..。..。..。..。..。..。..。.

USB标准请求。..。..。..。..。..。..。..。..。..。..。.

获取描述符(从接口)。..。..。..。..。..。..。..。..。..。..

获取报告描述符。..。..。..。..。..。..。..。..。..。..。.

USB标准请求。..。..。..。..。..。..。..。..。..。..。.

获取描述符(从接口)。..。..。..。..。..。..。..。..。..。..

USB标准请求。..。..。..。..。..。..。..。..。..。..。.

获取描述符(从接口)。..。..。..。..。..。..。..。..。..。..

USB标准请求。..。..。..。..。..。..。..。..。..。..。.

获取描述符(从接口)。..。..。..。..。..。..。..。..。..。..

USB标准请求。..。..。..。..。..。..。..。..。..。..。.

获取描述符(从接口)。..。..。..。..。..。..。..。..。..。..

USB标准请求。..。..。..。..。..。..。..。..。..。..。.

获取描述符(从接口)。..。..。..。..。..。..。..。..。..。..

USB标准请求。..。..。..。..。..。..。..。..。..。..。.

获取描述符(从接口)。..。..。..。..。..。..。..。..。..。..

USB标准请求。..。..。..。..。..。..。..。..。..。..。.

获取描述符(从接口)。..。..。..。..。..。..。..。..。..。..

端点2输出。..。..。..。..。..。..。..。..。..。..。.

端点2的数据是 0x01

端点2输出。..。..。..。..。..。..。..。..。..。..。.

端点2的数据是 0x03

端点2输出。..。..。..。..。..。..。..。..。..。..。.

端点2的数据是 0x01

端点2输出。..。..。..。..。..。..。..。..。..。..。.

端点2的数据是 0x00

端点2输出。..。..。..。..。..。..。..。..。..。..。.

端点2的数据是 0x02

端点2输出。..。..。..。..。..。..。..。..。..。..。.

端点2的数据是 0x03

在设备管理器里看到的图:

原理图

(用的是以前做IDE转USB的板,所以上面还有个IDE接口和573锁存器,可以不用理会它们):

(注意:原理图上所标的晶体值是以前的,这个程序中使用的是22.1184M的晶体。它关系到串口波特率,如果你不使用串口,那么可以不用理会它。)

注意:图中串口电平转换部分的C8和C10接反了,C11负端应接VDD。D12的SUSPEND(12脚)应该接地。USB接头的D+和D-跟芯的D+和D-之间应该串联22欧姆的匹配电阻。片由于图得比较匆忙,所以没留意。右击选择图片另存为可以看到完整图片了。

实物图片(键盘是外接的):


责任编辑LK

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • usb
    usb
    +关注

    关注

    59

    文章

    7411

    浏览量

    257864
  • 键盘
    +关注

    关注

    4

    文章

    842

    浏览量

    38992
  • HID
    HID
    +关注

    关注

    2

    文章

    123

    浏览量

    46284
收藏 人收藏

    评论

    相关推荐

    USB键盘夜灯自制

    有的人的本本上没有键盘灯,盲打技术又不怎么样!怎么办呢?自制一个。笔记本上可以提供电源的接口很多,当然最方便的是USB,所以就选择了PS/2口来给我将要自制
    发表于 10-09 15:06 1.3w次阅读

    自制的台灯兼键盘

    学校规定晚上11点关灯,所以在黑暗暗的灵感下自制自制的台灯兼键盘灯,接到单片机上可以玩出不少花样。
    发表于 11-25 11:40

    自制矩阵键盘

    学单片机学到矩阵键盘,但是没有键盘(我用的最小系统板),就自己diy了 这个能用的了么?
    发表于 04-27 19:10

    如何做个USB键盘

    最近看了原子哥的USB鼠标实验,自己做了小实验,有兴趣的可以分享下,功能见文件夹的readme。接下来想做个USB键盘,请各路大神提供点意
    发表于 06-12 03:35

    如何使用32U4来自制键盘

    1.前言如果你使用32U4来自制键盘,必然会遇到大问题就是引脚不够,随便键盘,60按键以
    发表于 01-19 07:15

    如何去实现USB键盘功能呢

    的实现USB键盘功能。借此功能可以很容易的将Core改装成虚拟的USB键盘来控制
    发表于 01-19 08:07

    串口转USB HID键盘鼠标方案

    方案概述本方案的实现基于串口转标准USB HID设备芯片CH9328/CH9329,芯片根据不同的工作模式,可以在计算机上被识别为标准的USB键盘、鼠标设备。芯片无需编程,可以在用户端轻松实现模拟
    发表于 07-08 06:42

    自制USB口ISP(用2313模拟USB)

    自制USB口ISP(2313模拟USB) 当有的电脑没有
    发表于 01-14 20:26 1980次阅读

    什么是键盘USB HUB

    什么是键盘USB HUB 这个参数是指键盘上是否带有USB HUB。计算机上的USB接口通常是在机箱的前面板或者机箱的背后,如果要连接
    发表于 12-28 11:14 4286次阅读

    自制MINI USB的方法

    自制MINI USB的方法 近日完成HIFIDIY的MINI USB DAC配套专用电源升级套件装配,输出电压正负9.8V.为USB DAC提供澎拜的动力.
    发表于 03-16 11:37 3359次阅读
    <b class='flag-5'>自制</b>MINI <b class='flag-5'>USB</b>的方法

    办公室自制一个植物键盘

    春暖花开草长莺飞的季节就要到了,在办公室里自制一个植物键盘吧! 送给自己一片绿意,送给同事一片惊喜...或者是惊吓。 第一步:肢解键盘; 第二步:加入培养基和种子; 第三
    发表于 05-14 17:07 1次阅读

    PS2键盘USB键盘源码

    PS2键盘USB键盘
    发表于 05-04 11:52 11次下载

    DIY制作USB机械键盘

    网上查了查键盘实现的原理,发现比较简单。加上自己工作上一直在接触USB协议,于是做一个USB机械键盘。先展示一下半成品,104个键通信正常,
    的头像 发表于 02-02 17:36 1w次阅读

    自制USB键盘的电路原理图和工程文件与源代码免费下载

    本文档的主要内容详细介绍的是自制USB键盘的电路原理图和工程文件与源代码免费下载。
    发表于 11-22 17:36 82次下载
    <b class='flag-5'>自制</b><b class='flag-5'>USB</b><b class='flag-5'>键盘</b>的电路原理图和工程文件与源代码免费下载

    基于树莓派的自制MIDI键盘

    本教程将手把手教你从零开始自制属于你自己的 MIDI/钢琴/音乐/歌曲键盘。这是一个基于树莓派的开源项目,其中所需的文件在本项目文件库中可以找到。如果你是70后、80后,你会认出部分的设计。我们
    发表于 12-21 11:07 1次下载