在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

筆記本電腦的鍵盤學習教程

CHANBAEK ? 來源: 吃面小哥 ? 作者: 吃面小哥 ? 2023-11-18 15:24 ? 次閱讀

筆記本電腦的內置鍵盤是不可缺少的輸入設備,它經歷了二十幾年的迭代才形成如今的設計標準(Key Layout、Connector、Protocol、ScanCode...)。

在鍵盤的發展歷程中,出現了很多標準,有一些標準至今仍被使用。有興趣可以查閱 鍵盤的發展。接下來就詳細了解下筆記本電腦的鍵盤。

01—Scan Code

電腦鍵盤一般有 80-120 個按鍵,因此采用矩陣設計可以減少GPIO 的使用。

如下示意圖,MCU 控制 “A/B/C/D” 都保持低電平,然后挨個輸出高電平,每次輸出高電平的同時采集“1/2/3/4” 電平。此過程稱之為 “鍵盤掃描”。

如果 C-3 按鍵按下,當 MCU 在 “C” 列輸出高電平時,在 “3” 行可檢測到高電平。如此 MCU 即可判斷出哪個按鍵被按下了。

MCU 判斷出哪個按鍵被按下,需要以數據的形式傳遞給 Host 使用。因此需要給每一個按鍵安排一個編碼,這個編碼就是 ScanCode,即 “掃描碼”。

這個 MCU 負責掃描矩陣,稱之為 KSC(Keyboard Scan Controller)。使用最為廣泛的型號是 Intel 8048。

圖片

鍵盤的發展歷程中,一共出現過 3 套 ScanCode。

Scan Code Set-1

1983年隨 IBM Personal Computer XT(XT:eXtended Technology,Type:5160) 一起發布的 XT Keyboard 就使用的是此套掃描碼。當時配套的操作系統可以直接識別此套掃描碼。如今的 Windows、Linux 系統都在沿用。

ScanCode Set-2

1984年隨 IBM Personal Computer AT(AT:Advanced Technology,Type:5170)一起發布的 AT Keyboard 就是使用的是此套掃描碼。但是操作系統并沒有兼容識別此套掃描碼,而是在主板上增加了一個 MCU 把 Set-2 翻譯成 Set-1,然后再發送給系統。當然也有操作系統也可以識別 Set-2,但并不是主流。

新增的 MCU 稱之為 KBC(Keyboard Controller),使用最為廣泛的型號是 Intel 8042,因此 i8042 也用來代指 Keyboard Controller。

ScanCode Set-3

1986年,IBM 重新設計了鍵盤布局,在美國市場上推出了 MF2 Keyboard,有 101個按鍵。

MF2 Keyboard 設計上增加了邏輯更為合理的 ScanCode Set-3,由 i8042 翻譯成 ScanCode Set-1 傳遞給 CPU。此套掃描碼并未流行。

最后流行的 PS/2 鍵盤,采用的仍舊是 ScanCode Set-2。

02—Key Number

在 MF2 鍵盤出現后,鍵盤 Layout 基本即保持一致了,但是按鍵的絲印卻是千變萬化,不同絲印的鍵盤是為了滿足不同語種的需求。

鍵盤設計中,一個按鍵會規定一個 ScanCode。系統端根據接收的 ScanCode 就知道是哪個按鍵觸發了。同樣是按鍵 “Q” 觸發,系統端最終識別的字符可不一定是字符 “Q”,這是要根據系統語言判斷的。

鍵盤語種不同,絲印就不同。因此每個按鍵還規定了一個 Key Number,以便區分按鍵。

圖片

一般鍵盤制造商生產的矩陣鍵盤,會配套一份設計圖紙,會指明按鍵在矩陣中的位置,此時使用的就是 KeyNumber。

KSC 掃描這個矩陣,根據掃描結果,識別出觸發按鍵在矩陣的位置,

先找到 KeyNumber,從而查找出 ScanCode。

圖片

03—Keyboard Protocol

XT Keyboard 和 AT Keyboard 的設計中,同 PCH 通訊的規范已經不再使用,因此此處只針對 PS/2 Keyboard 做描述。

PS/2 Keyboard 設計中,采用 KSC (Keyboard Scan Controller) 掃描鍵盤矩陣,按鍵觸發后會編碼出 ScanCode Set-2 發送。其中 KSC 是一個位于鍵盤內部的 MCU,以 Intel 8048 最為典型。KSC 和 KBC 之間通過 PS/2 協議通訊,完成KeyCode、Command 的傳遞。

PS/2 鍵盤結構

在 x86 CPU 系統中,有一個獨立的 IO 尋址空間,大小 64K。隨著計算機的發展,默認 60/64 兩個 IO 地址被用作 PCH 和 KBC(i8042) 交換數據。

有以上兩個通訊的支持, PS/2 Keyboard 外接在電腦 PS/2 接口上后就可以工作了。

圖片

設計框圖如下

圖片

KBC 寄存器

i8042 作為一個 KBC 使用 IO 60、64 和 PCH 傳遞數據。

IO 60/64 分別定義為數據寄存器和狀態寄存器。

針對 Status Register,在 Intel 8042 DataSheet 中定義如下。

圖片

BIT0:指示 KBC 是否在 Output Data Register 寫入了數據。

BIT1:指示 CPU 是否在 Input Data Register 寫入了數據。

BIT2:指示 CPU 是否讀取了 Output Register。

BIT3:指示 CPU 寫了 60H 還是 64H。

BIT4-7:用戶自定義。

不同廠家在后續的 KBC 設計中,增加了一些自定義狀態。

如下圖所示,KBC 中增加了針對 PS/2 通訊狀態的一些定義。

圖片

圖片

如上圖,Host 端的 Keyboard Driver 利用 IO 60/64 和 KBC通訊。

KBC 內部有兩個數據寄存器,Input and Output Data Register。

一個狀態寄存器,Status Register。

KB Driver 寫 60H 或者 64H,都對應 KBC 內部 Input Register,KBC 內部的 Status Register BIT3 會做出區分。

KB Driver 寫 60H,KBC 認為是 Data。

KB Driver 寫 64H,KBC 認為是自己的 Command。

KB Driver 讀 60H,KBC 返回 Output Register 內容,主要是 ScanCode。

KB Driver 讀 64H,KBC 返回 Status Register 內容,指示 Keyboard 狀態。

04—Keyboard Command

KBC 和 KSC 作為 MCU,分別設計了一組命令。Keyboard Driver 可以發送這些命令,從而控制 KBC 和 KSC 的一些行為。

05—EC Keyboard

在上世紀的個人電腦設計中,PS/2 鍵盤屬于一個外接設備。PS/2 鍵盤通過 PS/2 接口和主板上 KBC 通訊。KBC 在 PCH 和鍵盤中間作為一個 SuperIO 設備,管理 PS/2 鍵盤。

隨著個人電腦的不斷發展,逐漸演變出便攜式電腦,即筆記本電腦。鍵盤作為筆記本電腦的標配輸入設備,也遵守了 PS/2 鍵盤系統的大部分標準,并且沿用至今。

在如今的筆記本電腦設計中,不再有獨立的 KSC(i8048,鍵盤掃描器)和 KBC(i8042,鍵盤控制器),因此也不再有 PS/2 接口和 PS/2 協議存在。

KSC 和 KBC 的功能全部集成在一個專用 MCU 中,即集成在 EC 中。

EC 作為一個專用 MCU,設計有 8*18 的鍵盤掃描模塊,實現矩陣鍵盤的掃描。EC 也設計有 LPC 總線,和 PCH 實現 IO 6064 通訊。因此在 EC 固件中即可實現 KBC 功能。

EC 這顆專用 MCU 集成了原先 KBC 的功能,因此 EC 也會叫 KBC。

如今筆記本電腦中,EC 鍵盤系統設計框圖如下:

圖片

06—Keyboard Init

EC 鍵盤的實際工作原理和 PS/2 鍵盤基本一致,其中的 KBC 需要被 Host 端 Driver 初始化后,才能正常工作。

KBC 由 EC 固件實現,因此上述 KBC、KSC 相關的指令必須由 EC 固件實現,并且返回正確的值,否則 OS 端 KB Driver 初始化無法完成,會導致Windows 系統下設備管理器中 PS/2 設備出現黃色感嘆號,鍵盤無法使用。

UEFI 環境下,KBC 初始化。

EC 固件實現了 KBC 邏輯后,添加必要的 log后,當 UEFI 環境啟動后會對 KBC 初始化。EC 端 log 如下圖:

圖片

上圖是在 EC 中記錄了進入 UEFI Shell 環境時的鍵盤初始化序列。

通訊釋義
1Host->EC, i8042 cmd[AD]8042 command Disable Keyboard
2Host->EC, i8042 cmd[A7]8042 command Disable Mouse
3Host->EC, i8042 cmd[AA]8042 command Self Test
4EC->Host, data=[55]EC Response test results
5Host->EC, i8042 cmd[60]8042 command Write controller config byte
6Host->EC, i8042 data[67]controller config byte is 0x67
7Host->EC, i8042 data[F4]Send to IO_60 without command
8Host->EC, i8048 cmd[F4]8048 command Enable matrix scan
9EC->Host, data=[FA]EC send “ACK”,must 0xFA
10Host->EC, i8042 cmd[AB]8042 command Keyboard interface test
11EC->Host, data=[00]EC Response test results,must 00
12Host->EC, i8042 data[FF]Send to IO_60 without command
13Host->EC, i8048 cmd[FF]8048 command Reset and start self-test
14EC->Host, data=[FA]EC send “ACK”,must 0xFA
15EC->Host, data=[AA]EC Response test results
17Host->EC, i8042 data[F0]Send to IO_60 without command
18Host->EC, i8048 cmd[F0]8048 command Get/set current scan code set
19EC->Host, data=[FA]EC send “ACK”,must 0xFA
20Host->EC, i8042 data[02]Send to IO_60 without command
21Host->EC, i8048 cmd[02]8048 sub-command select scancode set-2
22EC->Host, data=[FA]EC send “ACK”,must 0xFA
23Host->EC, i8042 data[F4]Send to IO_60 without command
24Host->EC, i8048 cmd[F4]8048 command Enable matrix scan
25EC->Host, data=[FA]EC send “ACK”,must 0xFA
26Host->EC, i8042 data[ED]Send to IO_60 without command
27Host->EC, i8048 cmd[ED]8048 command control LED status
28EC->Host, data=[FA]EC send “ACK”,must 0xFA
29Host->EC, i8042 data[00]Send to IO_60 without command
30Host->EC, i8048 cmd[00]8048 set LED off
31EC->Host, data=[FA]EC send “ACK”,must 0xFA

上述初始化過程在如下文件中可以找到:

UDK2018/IntelFrameworkModulePkg/Bus/Isa/Ps2KeyboardDxe/Ps2KbdCtrller.c

圖片

OS 環境下,KBC 初始化。

Windows 或者 Linux 系統在加載過程中,BIOS 聲明了 PS/2 鍵盤設備后,OS 內置的 PS/2 Keyboard Driver 就會加載,完成 EC 內 KBC 和 KSC 的初始化,以及配置。當然 Windows Inbox PS/2 Driver 看不到源碼,感興趣的話可以看看 Linux PS/2 Driver 的源碼。

需要注意的是,UEFI 和 OS 下 KBC 初始化流程基本一致。

差異點是,UEFI 環境下 CPU 不響應 SERIRQ 中的 IRQ-1,靠輪詢的方式工作。OS下 CPU 需要響應 IRQ-1,當有鍵盤中斷觸發后,Driver 才會被回調,處理 IO 60/64 的數據。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • mcu
    mcu
    +關注

    關注

    146

    文章

    17148

    瀏覽量

    351197
  • 筆記本電腦
    +關注

    關注

    9

    文章

    1408

    瀏覽量

    48186
  • 鍵盤
    +關注

    關注

    4

    文章

    859

    瀏覽量

    39669
  • 電腦鍵盤
    +關注

    關注

    0

    文章

    14

    瀏覽量

    12282
  • GPIO
    +關注

    關注

    16

    文章

    1204

    瀏覽量

    52098
收藏 人收藏

    評論

    相關推薦

    筆記本電腦鍵盤亂碼

    神舟筆記本電腦,WIN10家庭版,之前一直正常用的,前幾天開機突然發現鍵盤亂碼,在網上查各種解決方法都沒能恢復正常,分析可能是鍵盤壞了,于是網上買新鍵盤自己換上,但故障仍然沒有解決,跟
    發表于 07-25 09:34

    [原創MST筆記本電腦(數星筆記本電腦) 山寨筆記本代理加盟MST筆記本

      MST筆記本電腦(數星筆記本電腦) 山寨筆記本代理加盟MST筆記本 數星筆記本 MST方案 數星方案數星
    發表于 02-12 11:26

    筆記本電腦鍵盤拆解方法圖解

    筆記本電腦清潔問題一直困擾著大家,尤其是本本的鍵盤部分,清潔起來實在是很麻煩,想要清理干凈的話,最好的辦法是把鍵盤拆下來,可是由于生產廠家不同,本本的結構也不一樣,……為此我們特地為大家準備了幾招拆
    發表于 09-15 14:51

    平板電腦筆記本電腦有什么關聯

    ”之前,它就是一個筆記本電腦。然后,你會發現它的屏幕能輕輕松松 360°旋轉,或者折疊起來放在鍵盤上。進入平板電腦模式,輕松游刃于筆記本模式和平板
    發表于 11-05 10:38

    筆記本電腦CPU知識

    筆記本電腦CPU http://www.gooxian.com/ 知識詳解: 筆記本電腦所采用的CPU與臺式電腦采用的CPU規格不同,這是由于筆記本電腦內部的散熱環境和供電方式都要比臺
    發表于 08-10 09:57

    筆記本電腦鍵盤失效維修

    求各位大神幫看下這筆記本電腦鍵盤用不了怎么維修,是不小心弄水倒鍵盤上了,所有的按鍵都用不了了。
    發表于 10-04 19:49

    筆記本電腦鍵盤故障的解決方案

    的輸入法。  筆記本鍵盤無法輸入計算機圖形4  故障3:筆記本電腦鍵盤出現故障  1、試圖通過修改筆記本鍵盤驅動程序來更改鍵盤驅動程序。鼠標
    發表于 01-15 16:18

    保養筆記本電腦的方法分享

    現在無論是商務人士、學生黨還是辦公一族和自媒體一族基本上都會配備一臺筆記本電腦,相較于臺式機,筆記本電腦既輕薄又便攜,是辦公學習的利器。但為什么許多人的筆記本電腦都用不長,就會卡頓呢?
    發表于 01-12 06:57

    筆記本電腦鍵盤示意圖

    筆記本電腦鍵盤示意圖
    發表于 03-10 14:04 ?2w次閱讀
    <b class='flag-5'>筆記本電腦</b><b class='flag-5'>鍵盤</b>示意圖

    IBM筆記本電腦鍵盤示意圖

    筆記本電腦鍵盤示意圖
    發表于 03-10 14:05 ?8991次閱讀

    筆記本電腦鍵盤詳細介紹

    筆記本電腦鍵盤詳細介紹 筆記本鍵盤與臺式機鍵盤一樣,主要起向電腦輸入字
    發表于 03-10 14:08 ?2.2w次閱讀

    筆記本電腦硬件詳解鍵盤

    筆記本電腦硬件詳解鍵盤筆記本鍵盤與臺式機鍵盤一樣,主要起向電腦輸入字符和操控電腦的作用。我
    發表于 01-19 11:31 ?2380次閱讀

    筆記本電腦的智能底座設計

    筆記本電腦的智能底座設計,很好設計資料,快來學習吧。
    發表于 05-09 17:10 ?25次下載

    筆記本電腦的警報電路圖

    這是筆記本電腦/筆記本電腦保護電路,可保護您的筆記本電腦筆記本電腦或上網本不被盜。固定在筆記本電腦外殼內,當有人試圖拿走
    的頭像 發表于 05-30 17:34 ?3186次閱讀
    <b class='flag-5'>筆記本電腦</b>的警報電路圖

    筆記本電腦鍵盤轉換為USB開源分享

    電子發燒友網站提供《筆記本電腦鍵盤轉換為USB開源分享.zip》資料免費下載
    發表于 11-24 09:26 ?0次下載
    <b class='flag-5'>筆記本電腦</b><b class='flag-5'>鍵盤</b>轉換為USB開源分享
    主站蜘蛛池模板: 亚洲国产精品久久久久婷婷老年 | 国产精品资源在线观看网站| 久青草免费在线视频| 亚洲视频精品| 男人操女人的网站| 五月婷婷六月激情| 国产美女视频一区二区二三区| 久久久免费视频播放| 精品国产中文一级毛片在线看| 欧美一区二区精品| 天天槽任我槽免费| 情趣店上班h系列小说| 日本a免费| 天堂资源最新版在线www| 亚洲高清不卡视频| 欧美日韩高清一区| 色天天综合色天天天天看大| 久久久久无码国产精品一区| 欧美不在线| 免费a级午夜绝情美女视频| 操白虎美女| 国产经典三级| 色琪琪一本到影院| 日韩欧美亚洲综合久久影院d3| 午夜视频在线观看免费高清| 在线免费公开视频| 蜜月mv国产精品| 国产福利影视| 手机毛片| 日本xxxxbbbb| 亚洲国产欧美视频| 一级片在线观看视频| 男人午夜免费视频| 韩国朴银狐诱感在线观看| 日本xxx69| 欧美人与动另类在线| 国产伦精一区二区三区| 色www永久免费| 美女牲交视频一级毛片| 天堂bt在线网bt| 天堂w|