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 。

留言

  1. 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


    不知道你能否給我一些建議,感激不盡



    回覆刪除
  2. 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.

    回覆刪除
  3. 您好 最近在做IRQ相關的實驗 並且使用邏輯分析儀觀察波型
    有個疑問想請教
    根據Datasheet IRQ1是鍵盤的中斷
    我將IRQ設為Continuous Mode
    觀察波型後發現IRQ1一直被觸發
    不過我鍵盤(PS/2)並沒有按下
    請問是為什麼呢?
    這是否跟您文中最後一段提到的有關係?
    另外我按下鍵盤後發現會有幾個cycle的IRQ1變為高準位
    怎麼感覺剛好相反?

    任何建議都相當感謝~

    回覆刪除
  4. 老師不好意思想請問一個問題~~
    如果TAR=0xFA是什麼意思,從字面上TAR就像是master與slave相互交換控制權
    其實還是不太了解這個部分代表的含意與各個狀態
    感謝~~

    回覆刪除
    回覆
    1. TAR 是指資料,也就是原本資料來自 Host, 轉為資料來自 Device.

      刪除
  5. 您好,我是硬體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的機制?
    任何說明都相當感謝~

    回覆刪除
    回覆
    1. 據我所知, PCI 的 IRQ 都是以 Low active, EC 晶片的 inverted 應該只是預留空間,當特殊情況下使用的. EX: EC SERIRQ 的輸出有多加反向 buffer IC.

      刪除

張貼留言

這個網誌中的熱門文章

EC 所需知識 - SMBUS

EC 所需知識 - KBC