如何控制SMBus? |
尚未結案
|
小蟲蟲
一般會員 發表:38 回覆:55 積分:23 註冊:2002-03-13 發送簡訊給我 |
請教前輩:
我手邊有一片段控制的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 發送簡訊給我 |
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 發送簡訊給我 |
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
如果您有的 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 發送簡訊給我 |
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 發送簡訊給我 |
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 發送簡訊給我 |
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
如果是使用微處理器,那真的是只需要了解 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 發送簡訊給我 |
引言:我比較有興趣的是主機板內建的 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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |