EC 所需知識 - LPC
EC 所需知識
軟體工程師的第一步,先把相關的規範(Specification)了解清楚,就像開發一套軟體之前要先了解需求,才能做出一套符合需求的體。相同的EC工程師就是需要把 LPC / SMBUS / PS2 / Smart Battery 的相關知識,清楚明瞭再進下一步。
LPC Specification
本章節介紹以LPC Interface為主,讓讀者可以從中瞭解LPC Interface 的動作原理及腳位作用。當LPC Interface發生問題時,才能籍著對LPC Interface的瞭解來可以找到問題的解決方法。
- LPC的特性
- 相容於舊系統的 X-BUS 介面
- 可以定址到 4GB,並且BIOS不受1MB的限制,記憶裝置也不受16MB的限制。
- 在作業系統上不需要特別安裝驅動程式即可正確運作。
- 在I/O或MEMORY指令會花費較長的時間,可以要考LPC加入等待狀態
- LPC支援的裝置
- SUPER I/O – 軟碟控制介面、IR、KBC
- Audio – AC97
- 記憶裝置 – BIOS Flash
- 系統管理控制器 [System Manager Controller ]
- LPC的方塊圖
系統的指令由CPU傳給HOST-Bridge [ 北橋晶片 ] 經 PCI Bus 傳給 PCI-Bridge [ 南橋晶片 ] 也是上圖的HOST,HOST再將PCI的指令指轉為LPC的指令傳到LPC的裝置,完成指令的傳遞。
- LPC的硬體腳位
Signal
|
Direction
|
Description
| |
Peripheral
|
Host
| ||
LAD[3:0]
|
I/O
|
I/O
|
多功能腳位。可為指令、位址及資料
|
LFRAME#
|
I
|
O
|
表示LPC指令的開始傳遞及結束
|
LRESET#
|
I
|
I
|
PCI介面的RESET信號
|
LCLK
|
I
|
I
|
LPC介面的信號來源 [ 33MHz ]
|
LDRQ#
|
O
|
I
|
支援DMA及要取得PCI Bus的控制權才會使用
|
SERIRQ
|
I/O
|
I/O
|
LPC裝置的中斷信號,假如使用IRQ12的裝置要發出中斷信號在第12的CLCOK時,拉LOW即為IRQ12
|
CLKRUN#
|
OD
|
I/O
|
系統要求裝置停止工作時,會把要求裝置把自己的CLKRUN拉LOW
|
PME#
|
OD
|
I/O
|
要求系統由睡眠狀態喚醒訊號
|
LPCPD#
|
I
|
I/O
|
讓LPC裝置進入省電狀態
|
LSMI#
|
O/D
|
I
|
系統中斷和SERIRQ一致,依LPC裝置的要求傳送中斷訊號
|
- LPC的傳輸協定
LPC的指令可分為Memory Read / Write、I/O Read / Write、DMA Read / Write、BUS Master Memory Read / Write及BUS Master I/O Read / Write等如Table 3。
這麼多樣的指令都是籍由4條的指令線組合來傳遞指令給LPC裝置,因此每個指令都是由數個時脈週期才能完成,LPC的指令由開始到完成,我們把它稱為一個指令週期(CYCLE)。如圖2
LPC一個指令週期包含START、CYCTYPE、ADDR、TAR、SYNC、DATA 及 TAR 等。
Name
|
CLOCK
|
Description
|
START
|
1
|
指示起點
|
CYCLE TYPE
|
1
|
指示傳遞方向及大小
|
ADDR
|
8
|
位址 [ 可定義到 4G ]
|
TAR
|
2
|
指示BUS控制權
|
SYNC
|
1-n
|
同步檢查用
|
DATA
|
2
|
資料
|
- START的欄位介紹 –
PCI cycle的指示欄位,一般需要配合cycle type 才能得知,PCI cycle 的作用,除了Firmware read / write 可以直接由Start 欄位可以得知。
BIT[3:0]
|
Define
|
0000
|
Start of cycle for a start
|
0010
|
同意 bus master 0
|
0011
|
同意bus master 1
|
1111
|
Stop / Abort
|
- CYCLE TYPE的欄位介紹
BIT[3:2]
|
BIT[1]
|
Define
|
00
|
0
|
I/O Read
|
00
|
1
|
I/O Write
|
01
|
0
|
Memory Read
|
01
|
1
|
Memory Write
|
10
|
0
|
DMA Read
|
10
|
1
|
DMA Write
|
- SIZE的欄位介紹
Bits[1:0]
|
Size
|
00
|
1 bytes
|
01
|
2 bytes
|
11
|
4 bytes
|
- SYNC的欄位介紹
BIT[3:0]
|
Define
|
0000
|
Ready
|
0101
|
Short Wait
|
0110
|
Long Wait
|
1001
|
Ready More (DMA Only)
|
1010
|
Error
|
- 每個指令期週介紹
指令
|
ST
|
TP
|
AD /
SZ
|
TAR
|
SYNC
|
DATA
|
TAR
|
SUM
|
MM Read
|
1
|
1
|
8
|
2
|
5
|
2
|
2
|
21
|
MM Write
|
1
|
1
|
8
|
2
|
2
|
1
|
2
|
17
|
IO Read
|
1
|
1
|
4
|
2
|
1
|
2
|
2
|
13
|
IO Write
|
1
|
1
|
4
|
2
|
2
|
1
|
2
|
13
|
DMA Read 8
|
1
|
1
|
2
|
2
|
2
|
1
|
2
|
11
|
DMA Read 16
|
1
|
1
|
2
|
4
|
4
|
2
|
4
|
18
|
DMA Read 32
|
1
|
1
|
2
|
8
|
8
|
4
|
8
|
32
|
DMA Write 8
|
1
|
1
|
2
|
2
|
2
|
1
|
2
|
11
|
DMA Write 16
|
1
|
1
|
2
|
2
|
2
|
4
|
2
|
14
|
DMA Write 32
|
1
|
1
|
2
|
2
|
4
|
8
|
2
|
20
|
- ST - Start Nibble.
- TP – Type Nibble.
- AD/SZ – Address Nibble or Size Nibble
- Firmware Memory 的傳輸協定
Firmware Memory 僅有記憶體讀寫的功能,和LPC記憶體讀寫功能的主要差異是 Firmware記憶體讀寫功能由1,2,4,8擴展到16,128個位元數,並且可以利用IDSEL欄位,選擇那一個裝置讀寫記憶體。
Firmware Memory Cycle –
Firmware Memory 的欄位 –
- START 欄位 –
BIT[3:0]
|
Define
|
0000
|
Start of cycle for a start
|
0010
|
同意 bus master 0
|
0011
|
同意bus master 1
|
1101
|
Start cycle for firmware memory read cycle
|
1110
|
Start cycle for firmware memory write cycle
|
1111
|
Stop / Abort
|
- IDSEL 欄位 – BIT[3:0] 選擇裝置
- MADDR欄位 – 讀取位置
- MSIZE 欄位 - 讀取位元數
Bits[3:0]
|
Size
|
0000
|
1 bytes
|
0001
|
2 bytes
|
0010
|
4 bytes
|
0100
|
16 bytes
|
0111
|
128 bytes
|
Firmware Memory Read Cycle –
Firmware Memory Write Cycle –
- Serial IRQ的傳輸協定
Serial IRQ Working Mode
- Quiet (Active Mode) – 當 IRQ 發生時,Device只需要發出 IRQ (將訊號拉LOW),就可以變成 Tri-State。相較之下,比較省電,有些晶片組或EC微處器在 Tri-State 回到 Active ,所需的時間較長,會造成 IRQ miss 的問題。
- Continuous (Idle Mode) - 當 IRQ 發生時,Device 需要發出 IRQ (將訊號拉LOW) 並且一直 Sample STOP Frame,一直到Host Device確定收到否則需要一直發送 IRQ 給 Host Device 。
Hi 感謝你對LPC詳細的介紹
回覆刪除我對LPC的控制碰到一些問題,想請教一下
關於LPC的 Memory Read / Write 是不是如同pcie的Memory Read / Write一樣?
我目前的架構是從 Intel CPU 透過 PCI 和 LPC interface 連接到Altera FPGA
目前我可以透過lspci 找到FPGA 的base address+offset即可讀寫FPGA的位址
我一樣可以透過lspci 找到LPC的interface
但是卻看不到 LPC 的base address
log 如下:
root@genericx86-64:/# lspci -s 00:1f.0
00:1f.0 ISA bridge: Intel Corporation C224 Series Chipset Family Server Standard SKU LPC Controller (rev 05)
root@genericx86-64:/# lspci -s 00:1f.0 -vv
00:1f.0 ISA bridge: Intel Corporation C224 Series Chipset Family Server Standard SKU LPC Controller (rev 05)
Subsystem: Intel Corporation Device 7270
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- SERR-
Kernel driver in use: lpc_ich
不知道你能否給我一些建議,感激不盡
LPC memory read-write 應該分為兩種,一種是 LPC,一種是可以讀寫多個資料的 FWH,不管那一種,需要先透過修改 ISA Bridge configuration 來讓 memory read-write 對映到 LPC.
回覆刪除LPC memory - 要修改 ISA Bridge configuration 98H 的值
FWH memory - 要修改 ISA Bridge configuration D0H-D7H 的值
你可以參考 intel PCH C220 的 Datasheet CH12 LPC.
只要 memory read-write 對映到 LPC, 應該就可以使用和 PCI 相同的方法來存取 FPGA.
好,我再研究看看,謝謝
刪除您好 最近在做IRQ相關的實驗 並且使用邏輯分析儀觀察波型
回覆刪除有個疑問想請教
根據Datasheet IRQ1是鍵盤的中斷
我將IRQ設為Continuous Mode
觀察波型後發現IRQ1一直被觸發
不過我鍵盤(PS/2)並沒有按下
請問是為什麼呢?
這是否跟您文中最後一段提到的有關係?
另外我按下鍵盤後發現會有幾個cycle的IRQ1變為高準位
怎麼感覺剛好相反?
任何建議都相當感謝~
老師不好意思想請問一個問題~~
回覆刪除如果TAR=0xFA是什麼意思,從字面上TAR就像是master與slave相互交換控制權
其實還是不太了解這個部分代表的含意與各個狀態
感謝~~
TAR 是指資料,也就是原本資料來自 Host, 轉為資料來自 Device.
刪除您好,我是硬體RD,遇到EC IRQ問題,在EC的datasheet中有一極性設定
回覆刪除「Interrupt Request Polarity Select:This bit indicates the polarity of of the interrupt request.
Bit=0: IRQ request is buffered and applied on SERIRQ
Bit=1: IRQ request in inverted before being applied on SERIRQ」
描述中有一個inverted字眼
若Bit設為1(預設值),是不是就是常見的"Device將訊號拉LOW以發出IRQ"?
若設為0,就會變成是high active嗎?感覺好像跟前面的網友「筆記」有點相同。
SERIRQ的protocol圖型都嘛是Low active,那麼,為什麼會有high active的機制?
任何說明都相當感謝~
據我所知, PCI 的 IRQ 都是以 Low active, EC 晶片的 inverted 應該只是預留空間,當特殊情況下使用的. EX: EC SERIRQ 的輸出有多加反向 buffer IC.
刪除