全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:11081
推到 Plurk!
推到 Facebook!

如何控制SMBus?

尚未結案
小蟲蟲
一般會員


發表:38
回覆:55
積分:23
註冊:2002-03-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-08-03 23:51:38 IP:61.229.xxx.xxx 未訂閱
請教前輩: 我手邊有一片段控制的SMbus的程式碼(來自某硬體廠商),但是該廠商不給全部的code???(我們採用他們的IC,連sample code都懶的給?唉)。自救多福囉!由於我沒碰過driver,實在看不太懂內容,如果知道的大哥,給個題示或是那邊有類似的sample,請不吝賜教!
 
#define SMBUS_QUICK_WRITE                0x02
#define SMBUS_QUICK_READ                0x03
#define SMBUS_SEND_BYTE                        0x04
#define SMBUS_RECEIVE_BYTE                0x05
#define SMBUS_WRITE_BYTE                0x06
#define SMBUS_READ_BYTE                        0x07
#define SMBUS_WRITE_WORD                0x08
#define SMBUS_READ_WORD                        0x09
#define SMBUS_WRITE_BLOCK                0x0A
#define SMBUS_READ_BLOCK                0x0B
#define SMBUS_WORD_PROCESS                0x0C
#define SMBUS_BLOCK_PROCESS                0x0D
unsigned char code MT900F[0x10] = {0x96,0x76,0xBF,0xBF,0xBF,0xC2,0x19,0xC4,                             0xC5,0xC6,0x01,0xBF,0x09,0xC8,0x88,0x8D};    unsigned char SMBUSEXAMPLE(void)
{
unsigned char i;    //Write Main Table (0x80~0xFF) of Bank0
/***************************************************************************/
for(i=0;i<0x10;i  )
{
smbus[0][0x1A] = 0x20;   //ADDRESS Register
smbus[0][0x1B] = 0x80 i; //COMMAND Register        (OFFSET)
smbus[0][0x1C] = MT900F[i];         //DATA0          Register        (VALUE)
smbus[0][0x18] = SMBUS_WRITE_BYTE;         //PROTOCOL Register
while((smbus[0][0x19]&0x80) != 0x80); //WAIT COMPLETE
smbus[0][0x19] = 0x80;        //CLEAR FLAG
}
}
我不太了解的地方是smbus[0][0xXX]是陣列嗎? PS:範例是控制鍵盤的 按鍵矩陣。 謝謝!
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-08-13 16:55:18 IP:220.139.xxx.xxx 未訂閱
SMBus 的資料在網路上真的很少,我自己也找過很久了, 像是一些可以查看電腦內部感測器如 CPU 溫度, 機殼溫度, 風扇速度等等, 都可以透過 SMBus 來取得,但是,我在網路上幾乎找不到任何範例程式  如果您有 href="http://www.ViewMove.com" target="blank">視動科技 VMASK - ViewMove Automation Software Kernel 發表人 - dllee 於 2004/08/13 17:00:06
------
http://www.ViewMove.com
小蟲蟲
一般會員


發表:38
回覆:55
積分:23
註冊:2002-03-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-08-15 23:48:59 IP:61.229.xxx.xxx 未訂閱
好感動,終於有人回覆了。
引言:如果您有 source 的話,可以找一找那個檔案宣告了
我手邊的sample就是上面那些了。
引言:一般來說 smbus[0][0xXX] 是一個陣列沒錯
從程式看來,像是陣列,可以如果只是陣列的話,那一段for迴圈,怎麼會有功用呢?我猜是不是smbus指到一段特殊的記憶體,而這段記憶體是專為smbus使用的?
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-08-16 13:35:53 IP:220.139.xxx.xxx 未訂閱
如果您有的 sample code 只有如您所 post 的那些... 這樣,應該是作不出來吧... 至少我完全不知道如何開始。 這個週六、日,我又花了時間找 SMBus 的 sample code, 結果還是沒有...  只能說... 自求多福了... < href="http://www.ViewMove.com" target="blank">視動科技 VMASK - ViewMove Automation Software Kernel 發表人 - dllee 於 2004/08/16 14:05:00
------
http://www.ViewMove.com
Albertz
初階會員


發表:2
回覆:57
積分:31
註冊:2002-09-05

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-08-16 14:00:00 IP:211.20.xxx.xxx 未訂閱
SMBus 的 specification 可以在下面這個地方 download 的到 http://www.smbus.org/specs/smbus20.pdf 通常看完就可以寫得出來. 唯一要注意的是信號準位跟 timing 的問題. 我曾經用 GPIO 去做 SMBus 的 interface pin, 也沒有問題. 從你提供的 sample code 中, 該廠商隱藏了很多東西. 與其花時間在那上面, 不如好好研究它的 SMBus 的 protocol, 說不定可以殺出一血路.
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-08-16 14:11:39 IP:220.139.xxx.xxx 未訂閱
http://www.smbus.org/ 網站上只有硬體訊號規格,並沒有軟體的部分, 在 smbus10.pdf, smbus20.pdf 完全沒有提到如何由 DOS 或 Windows 去取得 SMBus 的控制權,這也使得程式根本不知從何開始。 像是如何開檔,如何存取,存取的資料格式等等,這些在 http://www.smbus.org/ 都沒有提到  而用 > 所以,我才說... 自求多福了... < href="http://www.ViewMove.com" target="blank">視動科技 VMASK - ViewMove Automation Software Kernel 發表人 - dllee 於 2004/08/16 14:17:34
------
http://www.ViewMove.com
Albertz
初階會員


發表:2
回覆:57
積分:31
註冊:2002-09-05

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-08-16 16:39:47 IP:211.20.xxx.xxx 未訂閱
dllee兄, 別介意, 小弟只是把經驗分享一下而已. 
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-08-17 07:25:41 IP:211.76.xxx.xxx 未訂閱
如果是使用微處理器,那真的是只需要了解 IO 底層的 protocol 就可以了。 我比較有興趣的是主機板內建的 href="http://www.ViewMove.com" target="blank">視動科技 VMASK - ViewMove Automation Software Kernel 發表人 - dllee 於 2004/08/17 07:26:28
------
http://www.ViewMove.com
Albertz
初階會員


發表:2
回覆:57
積分:31
註冊:2002-09-05

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-08-17 09:18:59 IP:211.20.xxx.xxx 未訂閱
引言:我比較有興趣的是主機板內建的 SMBus 的控制方法。不知道 Albertz 兄是否有相關的資料呢? 像是 EVEREST Home Edition 之類的軟體 http://www.lavalys.com/products/overview.php?pid=1&lang=en&pageid=1 就是使用 SMBus 來查主機板提供了那些感測器及其數值,這點是我有興趣的。
通常只要把 chipset 的 data sheet 在 smbus controller 的資料看一看就 可以了. 知道 controller 的 IO_BASE 及控制方法, 剩下的就是耐心了. smbus normal mode 最高可跑 100KHz, fast mode 可跑 400KHz, 但它還是 一個慢速的 bus, 太快的寫入動作, 常會造成資料遺失. 以前曾經做過實驗, 128byte 要花掉我 400ms~450ms. 再快資料就會遺失. 所以對 controller delay loop 的 fine tune 就變得很重要. chipset 不同, program 的方式也會有一些小小的變化. 這些必須你自己去 try & error 試出 來.
小蟲蟲
一般會員


發表:38
回覆:55
積分:23
註冊:2002-03-13

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-08-17 22:45:05 IP:61.229.xxx.xxx 未訂閱
感謝dllee與Albertz大力的相助,總算有個起頭。
系統時間:2024-04-30 2:17:21
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!