2022年8月6日 星期六

初學 SMBus

(這篇主要對象為韌體工程師,簡單介紹SMBus的一些基本概念而已)

System Management Bus (簡稱SMBus或是SMB) ,是1995年由Intel提出的,用來訪問主機板上的設備(EEPROM、溫度感測器、電壓感測器等) 並收集相應的資訊(SPD、溫度、電壓、版本號)。SMBus和I2C很相近,都是由兩條線: Clock (SMBCLK) 和 Data (SMBDAT) 所組成的。


SMBus 通訊協議主要可以分為三層


The Physical Layer (實體層):

不同的設備要在同一條SMBus上進行溝通預計將在至少兩個具有不同電氣要求的互斥環境中運行。 這部分主要定義電壓電平、噪聲容限等。(主要偏硬體,我也不太熟)

可以注意的地方是,SMBCLK和SMBDAT必須要設為 open drain,並且在bus沒有使用的時候,兩條線都需要 pull up


The Data Link Layer (資料鏈結層):

收到訊號之後,就可以解析訊號。SMBCLK 通常由Master操作,目前SMBus spec定義三種頻率:100 kHz、400 kHz 和 1 MHz。一般SMBDAT 是在SMBCLK low 變化,SMBCLK high 時是有效值,所以經驗上來看,SMBus 兩端device 的 clock frequency不需要設成一樣,運作上slave 不用知道 clock frequency,只要它來得及處理就可以。 解析訊號可以分為三個部分:

(1) Start and Stop

Start:在SMBCLK為high的時候,SMBDAT從high變low,表示開始溝通

Stop:在SMBCLK為high的時候,SMBDAT從low變high,表示結束溝通



(2) ACK (Acknowledge)

ACK表示收到了,就是SMBCLK為high的時候,SMBDAT為low

如下圖,紅色和藍色的動作都是指在同一條SMBDAT上,前面有提到SMBDAT是必須設為 open drain,所以傳送者和接收者兩端都可以對其做操作。



因為SMBDAT沒有人操作的時候,需要pull up,因此如果傳送完8個bit,接收者沒有回覆ack,就表示not ack(沒人收到東西)


(3) Data Transfer

在 START 條件 (“S”) 之後,Master會先傳送欲溝通的設備之 7 bits address。Address後邊跟的第8個bit是R/W#,0表示寫入(傳輸),而1表示數據讀取(請求)。

在傳送資料的時候,如果SMBCLK high的時候 SMBDAT 為high表示要傳送的Data是1,反之如果SMBDAT為low表示要傳送的Data為0。

最後資料傳輸由Master產生的 STOP (P) 條件終止。



Network Layer (網路層) :

這邊就是將資料鏈結層解析出來的資料,解析欲執行動作,並作相對應處理。SMBus有定義一些指令,例如下圖,詳情參閱 SMBus Spec SMBus Specifications


但是通常這部分詳細指令對應行為,還是會去參考設備的文件,這邊用EEPROM 4-Kbit Serial Presence Detect (SPD) EEPROM compatible with JEDEC EE1004 (st.com) 舉個簡單的例子

它的spec中定義,Start之後第一個byte為slave address,第8個bit設為0表示write,後面接的byte就表示想要讀取的offset (偏移量)

接著傳送一個Re-Start,傳送slave address,第8個bit設為1,Slave回復ack之後,會接著回覆該offset所存放的資料,直到Master發起Stop訊號

下圖的Random Address Read對應SMBus Command 就是Read Byte

Seqential Random Read應該比較像 Read 32吧,不完全一樣,有一點點變形

2 則留言:

注意:只有此網誌的成員可以留言。