码迷,mamicode.com
首页 > 其他好文 > 详细

8042 PS/2 Controller的工作笔记

时间:2016-06-03 00:58:33      阅读:395      评论:0      收藏:0      [点我收藏+]

标签:

一、概述

       借wiki(http://wiki.osdev.org/%228042%22_PS/2_Controller)的图:

技术分享

       其中黄色的就是PS/2 KBC(KeyBoard Controller)。这里可以明显看出,KBC和Keyboard(后简称KBD)是两个完全不同的东西,KBC是一个简单的chip,KBD则是我们常使用的普通外部设备。

       从图中还可以看到,PS/2的键盘鼠标是与PS/2 KBC交换数据的。而只有KBC最终向CPU report了数据,才会最终反馈给用户(比如说在屏幕上显示我们的按键内容等)。简单来说,KBC就是PS/2键盘鼠标与系统沟通的“中介”。

       这里插入一个讨论,我们笔记本基本没有PS/2的接口,那还需要KBC吗

       答案是需要。因为在Legacy OS(比如DOS,Legacy Win7等等)环境,即使是USB的键盘鼠标,它们的数据也是转换成PS/2数据,回传给KBC,再通知CPU的。具体这里不详述,我们知道目前KBC为什么还存在就好~等到哪一天彻底淘汰LegacyOS,或者说我们只做UEFI BIOS,大概就可以高兴的跟KBC say goodbye了。

 

二、从KBC两种工作模式来了解低速设备(= =)

       在介绍工作模式前,有必要大概了解KBC是如何工作的。

       首先,KBC内部可以参考下面的示意图,大概有这么几个寄存器:Input/Output Buffer,Status Register。Buffer用来暂存数据,Status主要就是来记录Buffer的状态。

技术分享

       知道KBC结构,再结合概述里的图,KBC的基本工作流程就清楚了:PS/2键盘鼠标的数据发送给KBC,暂存在KBC的Buffer,再由KBC转发给CPU。

       从这个工作流程分析,键盘鼠标的数据是由使用者产生的,一旦产生就发送给KBC,这部分的行为更多由设备的firmware决定。而KBC什么时候把数据转发给CPU呢?终于可以说到它的两种工作模式了。

       KBC的工作模式分Polling和Interrupts两种。详述可以参考wiki里“Recieving Bytes From Device/s”这部分(其实按我的理解叫Ready to send bytes to system可能更合适),这里主要是谈谈我所理解的。Polling更多依赖于系统软件(也就是BIOS)行为,在BIOS部分会透过timer,定期检查KBC的status register,一旦被标记为output buffer full,就意味着有东西要输出了,此时就可以透过KBC的数据端口读出数据。而Interrupt工作模式,是一旦数据端口有数据,就向CPU发IRQ,CPU通过IRQ编号知道来自什么设备,这部分更多是硬件行为了。

       可以看出,Polling模式下受限于KBC buffer空间,Interrupt模式受限于发中断本身。

 

三、在实际应用中的经验(不完整,待补充)

       首先,如果需要KBC工作在Interrupt模式,需要特别注意IRQ的配置。最近新平台DOS下键盘无法使用,问题就出在IRQ。讲清楚这个问题,需要先对wiki上的图再进行补充。天色已晚,改日再续~

8042 PS/2 Controller的工作笔记

标签:

原文地址:http://www.cnblogs.com/winater/p/5554751.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!