Thinkpad T4x 風扇轉速檔位控制

2021-09-05 14:30:37 字數 1171 閱讀 6304

thinkpad t4x的風扇轉速在一般的情況下由bios負責自動調整,其實我們也可以通過讀寫嵌入式控制器的0x62、0x66號埠實現對其的手動控制,這可以用來解決某些bios不盡如人意所導致的問題,如抑制轉動雜音、預熱風扇電機等。*自程式設計控制風扇轉速具有一定危險性,可能損壞硬體,請謹慎使用!*

[常數定義]

#define ec_dataport    0x62 //控制埠號

#define ec_ctrlport    0x66 //資料埠號

#define ec_cmd_write   0x81 //寫指令位元組

#define tp_fan_contrl  0x2f //寫指令引數1,設定風扇轉速檔位

#define tp_fan_levels     n //寫指令引數2,風扇檔位的具體取值

[設定步驟]

1.  輪詢控制埠,確保輸入、輸出緩衝區為空

2*. 向控制埠寫入乙個寫指令位元組,其值為ec_cmd_write

3.  輪詢控制埠,直到輸入緩衝區為空,確保寫指令位元組被取走

4*. 向資料埠寫入乙個位元組,該位元組為寫指令的第乙個引數,其值為tp_fan_contrl

5.  輪詢控制埠,直到輸入緩衝區為空,確保第乙個引數被取走

6*. 向資料埠寫入乙個位元組,該位元組為寫指令的第二個引數,其值為tp_fan_levels

7.  輪詢控制埠,直到輸入緩衝區為空,確保第二個引數被取走

8.  設定完畢,把耳朵趴在鍵盤上聽聽風扇的聲音吧!

[附加說明a]關於tp_fan_levels的取值

a. 從低速檔到高速檔,通常取值為0x0-0x7,0為風扇停轉

b. 特殊值0x80表示由thinkpad bios自動調節轉速,推薦值

c. 特殊值0x40表示風扇超高速運轉,某些機型不支援,可能會損壞風扇,慎用

d. 其他取值產生的結果要麼沒定義,要麼尚未確定,慎用

[附加說明b]檢驗輸入或輸出緩衝區為空的方式

#define ec_stat_obf 0x01   //輸出緩衝區滿標誌

#define ec_stat_ibf 0x02   //輸入緩衝區滿標誌

從控制埠中讀取出乙個dword,將其低位位元組分別與上述標誌位相與,若為0,則對應緩衝區為空,反之則緩衝區滿。

4x4矩陣求逆

最近學習自定義光柵化渲染器,在學習矩陣變換的時候,求矩陣的逆矩陣的時候遇到的一些問題,特記錄在此。typedef struct matrix3x3 type 3 3矩陣 matrix3x3,matrix3x3 ptr typedef struct matrix4x4 type 4 4矩陣 matri...

4X4矩陣鍵盤掃瞄程式

4x4矩陣鍵盤掃瞄 1.4根行線的gio均設為output,根列線的gio均設為input 2.4根行線的gio分別置為0111 1011 1101 1110,讀逐一讀取列線gio的值,可確定是哪乙個按鍵 電路圖如下 注意 1.圖中用作輸入的gio,一定要有乙個上拉電阻。2.晶元中的每乙個引腳是否用...

Unity 中的4X4矩陣

1 為什麼模型的變換是4x4而不是3x3的矩陣變換?我們知道,在空間裡的點的座標是vector3型別的,即是三維的,那為什麼要用4維矩陣才能進行旋轉平移和縮放呢?要解決這個問題就要從變換的本質來談起。我們知道,在變換裡分為線性變換和非線性變換,比如 我們対模型進行縮放,那麼縮放後的點座標是 pn a...