星期四, 12月 06, 2007

SMBus 與 I2C Bus 有什麼不同?

我是先用到I2C Bus, 多年後用碰到SMBus這個bus protocol。一直覺得很奇怪,為什麼這兩個看起來這麼相近,簡直是一模一樣,但是心理又有疑慮,如果真的一樣的話就不會出現兩個Bus的標準,直接使用一種即可。

在網路上找到一篇文章介紹I2C 與SMBus的不同,覺得寫的還不錯,硬體部份我沒有去查證是否屬實,但是這篇文章己經指出很多不同點了。傳統的i2c Bus slave device並無法主動通知master有事件發生,SMbus另外支援SMBus Alert signal。Host收到Alert可另外發出ARA Protocol詢問是那一個slave device發出Alert,進一步加以處理。另外SMBus deivce都支援Bus Timeout mechanism的功能。

SMBus Specificaion 可以從 http://smbus.org/ 找到。
I2C Bus Specification Philips (NXP) 公司找到。


另外就是Protocol的部份。I2C bus 只有定義Transport Layer,也就是定義了data 要怎麼傳送的部份。基本上個人覺得I2C就是沒有更高階的Protocol。但是Smbus有定義更上層的Protocol,同時也有標準的Standard Host Interface,讓支援的作業系統直接就能操作Host Controller。

SMBus Transport Layer也是一樣,要分二次,但是它的Protocol 支援自動幫你送出Write direction transport layer,如Send Byte, Receive Byte, Read Byte, Write Byte等,但是如果你下的是Read Byte, 它會自動幫你送出register offset, 也就是先寫出register offset, 然後再讀回來。
詳情請對照一下Smbus的Spec裡的圖示。





沒有留言: