admin管理员组文章数量:1186062
目录
- FPGA模拟PS/2键盘
-
- 1. PS/2协议简介
-
- 1.1 首先,重要的话说三遍
- 1.2 参考资料
- 1.3 “协议栈”
-
- 1.3.1 物理层
- 1.3.2 数据链路层
- 1.3.3 传输层
- 1.3.4 会话层
- 1.3.5 应用层
- 2. Arduino开源库移植测试
-
- 2.1 GPIO配置——物理层
- 2.2 观察总线波形——数据链路层
- 2.3 记录初始化过程——会话层
- 3. 时序逻辑基础——Verilog描述数据链路层
-
- 3.1 发送电路
-
- 3.1.1 时序图
- 3.1.2 原理图
- 3.1.3 验证
- 3.2 接收电路
-
- 3.2.1 时序图
- 3.2.2 原理图
- 3.2.3 状态图
- 3.2.4 验证
- 3.3 代码解读
-
- 3.3.1 位计数器
- 3.3.2 数据
- 3.3.3 ready / finish
- 3.3.4 failed / abort
- 4. 封装与耦合——传输层
-
- 4.1 原理图
- 4.2 对仗工整,强行押韵
- 4.3 实际波形
- 4.4 为什么发送电路不会干扰接收电路
- 5. 翻译伪代码——Spinal描述会话层
-
- 5.1 是什么
- 5.2 为什么
-
- 5.2.1 先说结论
- 5.2.2 再说理由
- 5.3 怎样做
- 6. TODO:应用层
FPGA模拟PS/2键盘
- ———— VerilogHDL + SpinalHDL
众所周知,PS/2是一种很常见的键盘鼠标接口,很多开发板上都有,不论是单片机还是FPGA,基本例程都少不了PS/2控制器。但是,绝大部分代码都是作为PS/2主机来读取键盘鼠标发送的数据,很少有作为键盘鼠标设备来跟电脑通信的。Arduino倒是有几个PS/2键盘的库,只是难以移植,而用FPGA实现PS/2设备的方案,一个字都搜不到!因此作本文以记录笔者实现FPGA模拟PS/2键盘的全过程,希望能对大家有所帮助。
1. PS/2协议简介
1.1 首先,重要的话说三遍
-
PS/2接口不支持热插拔!!!
-
PS/2接口不支持热插拔!!!
-
PS/2接口不支持热插拔!!!
1.2 参考资料
《PS2技术参考》(Adam Chapweske著)是教科书级的参考资料,一定要潜心拜读。文章较长,一次性读完肯定记不住,最好先大致浏览,待遇到问题时反复查阅。
- 中英对照
- 英文原版(须翻墙)
1.3 “协议栈”
为便于理解,在此冒用现代网络技术的概念。
1.3.1 物理层
通常电脑上是母的,键盘和鼠标是公的,键盘是紫色,鼠标是绿色。时钟线和数据线都是5V,兼容3.3V CMOS。时钟信号总是由设备产生,时钟周期一般取40us。
1.3.2 数据链路层
与常用的串口类似,不管是上行还是下行,每帧都包含以下内容:
1个起始位 | 总为0 |
8个数据位(payload) | 低位(LSB)在前 |
1个校验位 | 奇校验 |
1个停止位 | 总为1 |
此外,在主机到设备的传输中,最后还有一个应答位。
记住这些,很重要。
1.3.3 传输层
这一层将低层与高层解耦合,将发送与接收的细节封装起来,为应用层打基础。
需要注意的问题有帧之间的延时、发送与接收间的干扰、与高层的总线时序等。
1.3.4 会话层
键盘与鼠标在本层分道扬镳,本文仅讨论键盘,不涉及鼠标。
要让电脑(host)识别到你写的键盘(device)是个艰巨的任务。电脑会在开机时发送一连串指令,每条指令都要得到正确的响应,稍有不慎就会被当做无效设备而抑制通信,严重时甚至使电脑无法正常启动!
因为会话是在开机时建立的,所以开机后再插入键盘是无效的,正所谓 “不支持热插拔”。
1.3.5 应用层
成功被主机识别后,就可以愉快地发送扫描码了。
版权声明:本文标题:FPGA模拟PS2键盘 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/biancheng/1738338764a2077415.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论