發新話題
打印

SMBUS觀念討論

SMBUS觀念討論

研究了幾天SMBUS,有幾個問題想提出來請大家看看我的觀念是否正確??當MCU為master時....
1.當我再C裡面設STA=1;這時我發現要做個delay才能抓的到SI=1,我看其他人的程式(組語)是不需要的,可是我必須得這麼作才抓得到,這樣正確嗎??

2.當SI=1時,SMB0DAT才可以ACCESS資料,這時我把一個初值給SMB0DAT=0x58;但是當我將SI=0時,我發現SMB0DAT變成0xB0,看起來只shift一個msb出去,可是我看資料手冊上面的意思應該是丟一個BYTE給SMB0DAT,該站存器就會把這一筆資料全部傳出去不是嗎??

以上是否有經驗的大大可以分享一下呢?

TOP

引用:
原帖由 byron.lin 於 2011-8-10 18:09 發表
研究了幾天SMBUS,有幾個問題想提出來請大家看看我的觀念是否正確??當MCU為master時....
1.當我再C裡面設STA=1;這時我發現要做個delay才能抓的到SI=1,我看其他人的程式(組語)是不需要的,可是我必須得這麼作才抓得 ...
Ans:
若是用SMBus Interrutp是不需要用delay來等這個SI flag,進到SMBus Interrutp就表示傳完了,接著就看SMB0CN status去處理後續程序。
若是不用SMBus Interrutp也是不需要用delay來等這個SI flag,直接用 while(!SI)去等待SMBus傳完,後續跟上述流程一樣。
引用:
原帖由 byron.lin 於 2011-8-10 18:09 發表
研究了幾天SMBUS,有幾個問題想提出來請大家看看我的觀念是否正確??當MCU為master時....
2.當SI=1時,SMB0DAT才可以ACCESS資料,這時我把一個初值給SMB0DAT=0x58;但是當我將SI=0時,我發現SMB0DAT變成0xB0,看起來只shift一個msb出去 ...
Ans:
這是因為SMB0DAT Tx&Rx 是共用此register,在Rx時當SI = 1,所看到的SMB0DAT值即是所接收到的值,但在Tx時當SMB0DAT被寫入值後該值並不是在SMB0DAT Register shift out,SMBus內部硬體會自動將該值送到Tx Shift Register,逐1bit傳送出去,1byte傳送完後 SI = 1,所以Tx時你看到的SMB0DAT並非Shift過程的值,總之你是看不到Tx/Rx Shift過程的值啦 (看了也沒意義)。

TOP

謝謝,第二個問題解決了!!感謝您詳細的回答

TOP

發新話題