日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

BIOS实战之读写逻辑设备(SIO)

發布時間:2023/12/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BIOS实战之读写逻辑设备(SIO) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前幾天提到了SIO有關的,之前略有研究,不過確實實際只研究過小部分功能,也就做龍芯BIOS的時候參與過SIO的有關編程,因為這個東西筆記本是肯定不會用的,筆記本用EC,這個SIO也就相當于PC板上的EC了,某位大佬既然問了我這些,回去立馬找了份SIO芯片的文檔,仔細看了下,也算查漏補缺了,這篇主要記錄讀寫邏輯設備的原理以及有關編程

咱們還是以IT8738芯片為例子(實際最新的芯片不得而知,手上就這一份SPEC)

下面的代碼未曾實踐過,只是我根據spec寫出來的,沒寫對的煩請指正

邏輯設備號(LDN),LDN在芯片文檔中的配置章節有提到,我們來看下,分別是1、2、3、4、5、6、7、8、A、F、10、11、12、19

之前在SIO相關知識以及Smart Fan的初步實現文章中提到過怎么操作SIO,那么讀寫邏輯設備,咱們先把流程理順一下:

1、進入PNP mode

2、選擇邏輯設備

3、讀取該邏輯設備的寄存器

4、寫該邏輯設備某個寄存器的值

5、退出PNP mode

根據這個流程,我們可以直接寫5個函數:

1、進入PNP mode

void EnterPnpMode(void) {IoWrite8(0x2E, 0x87);IoWrite8(0x2E, 0x01);IoWrite8(0x2E, 0x55);IoWrite8(0x2E, 0x55); ?return; }

2、選擇邏輯設備

void SelectLDN (void) {//LDN Selectionunsigned int LDNumber;scanf("%x",&LDNumber);printf("Now LDN:%x",LDNumber);IoWrite8(0x2E,0x07);IoWrite8(0x2F,LDNumber);return; }

3、讀取該邏輯設備的寄存器

void ReadLdnRegister(void) {unsigned int row,col;unsigned int addr=0;unsigned int value[16][16];printf("--------------------------------------------------------------\n\n");printf("00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F\n");for(row=0;row<16;row++){for(col=0;col<16;col++){IoWrite8(0x2E,addr);value[row][col]=IoRead8(0x2F);if(value[row][col]<16){printf("0%X ",value[row][col]);}else{ printf("%x ",value[row][col]);}addr++;}printf("\n");}return; }

4、寫該邏輯設備的某個寄存器值

void WriteLdnRegister(void) {char order;unsigned int index,data;printf("Do you need to write registers? YES please intput W NO input Q:"); scanf("%c",&order); if(order == 'W'){printf("Please input Index:");scanf("%x",&index);printf("Please input Data:");scanf("%x",&data);IoWrite8(0x2E,index);Iowrite8(0x2F,data);} else{printf("Exit write ld reg:");return;}return; }

5、退出Pnp mode

void ExitPnpMode (void) {unsigned int ?RegData = 0;IoWrite8(0x2E, 0x02);RegData = IoRead8(0x2F) | BIT1;IoWrite8(0x2E, 0x02); ?IoWrite8(0x2F, RegData);return; }

ok,有了上述的函數,我們就可以寫main函數了,整體的不寫了,很容易,怎么組合怎么寫,反正得在這個邏輯內,先進PNP mode,中間選擇LDN,才能讀寫寄存器,最后退出,總體就是這樣吧。

總結

以上是生活随笔為你收集整理的BIOS实战之读写逻辑设备(SIO)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。