本帖最后由 叫我小杜可好 于 2016-8-15 11:29 编辑
PS2接口现在虽然比较少见了,由于PS2的时钟频率比较慢,大约在10K左右,已经满足不了单身狗们的手速了,但对于学习FPGA来说,熟悉和掌握PS2的解码还是很有意义的,给你的FPGA接上一块PS2键盘来提升逼格吧
PS2协议的内容
PS2接口如图,主要有用的引脚就是时钟和数据引脚对于我们来说是有意义的,其他引脚对于解码没有什么意义。
如图,时钟的一个从高到低的下降沿作为起始信号,紧接着传输8位数据为和一位校验位以及结束位,即一次传输10位数据,但这样说是不准确的,因为我们松开键盘的时候会发送出两位数据,这即是通码和断码的区分,按下键盘输出通码,通码是一个字节,10位数据位,松开键盘的时候发送出断码,断码是两个字节,但第一个字节是OXF0,因此我们解码的时候可以只检测第一个字节,如果是通码,则找出对应的按键,如果是0XF0,则可以忽略了,因为它表示我们松开按键不进行操作PS2部分键码表
恕小的啰嗦一句,我们要做的是解码而不是发送数据,当然PS2是一个双向的通信协议,但对于键盘,FPGA只需要接收识别出数据就行,因此我们需要做的是识别出系列按照PS2协议传输过来的数据1判断起始信号首先我们要做的是判断出数据传输的起始,即分辨出数据的起始位,数据的起始位是一个时钟下降沿,即判断下降沿的到来,此处采用固定写法,即数据线打两拍后与时钟线上的实时数据比较得到。
读取数据的标志得到了起始信号,就代表一大波数据也就是九个数据要跑来了,我们要做好接收的准备啊,每个数据的间隔是多大啊,对,10K,我们可以用计数器分频得到10K信号去接收数据,但你有没有想到更好地方法,我们的下降沿标志信号间隔多少啊,同样是10k,我们可以用下降沿标志作为读取信号线的标志。
接收得到数据
接下来我们就要开始接收得到的数据了,怎么接收呢,我不禁又想到了串转并,将串行的数据一个一个接收一个数据里头,可是我们怎样实现呢,这就需要我们控制了,我们心中要明白,第一位是起始位,2-9位是我们需要的数据,且数据是先低位后高位发送过来的,第十位是校验位,可以不做处理。因此我们下部分主要做的事情就是将2-9位数据提取出来,怎么提取,状态机出场了。利用下降沿标志触发状态机状态的转化,同时控制接收到的字符4判断按键的状态
好的,我们接收到数据了,接下来我们做什么呢,前面说到按键松开和按下都会有数据发出,那我们怎么知道呢,对,通码和断码的区别呗,所以接下来我们就判断接收到的数据来判断按键的状态。5实现后续功能现在我们已经得到了按键按下后准确的通码,接下来就可以使用了,例如用它来控制流水灯啊,点亮数码管什么的,这里我就用它将键值的ASCII码通过串口通信发送到电脑的串口助手上,来看看对不对
效果图展示看我萌不萌
we are family
鸣谢:感谢南京锆石科技提供的开发板以及相应的资料教程
|