天天看點

初學 SMBus

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

概述

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

初學 SMBus

SMBus 通訊協定主要可以分為實體層,資料鍊路層和網絡層三層

初學 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,表示結束通訊

初學 SMBus

​​​​​​​

(2) ACK (Acknowledge)

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

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

初學 SMBus

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

初學 SMBus

(3) Data Transfer

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

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

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

初學 SMBus

Network Layer (網路層) :

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

初學 SMBus

但是通常這部分詳細指令對應行為,還是會去參考裝置的檔案,這邊用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吧,不完全一樣,有一點點變形

初學 SMBus

繼續閱讀