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 应用层

成功被主机识别后,就可以愉快地发送扫描码了。

本文标签: 键盘FPGAps