超级输入输出芯片(SIO)一般位于主板左下方或者左上方。主要使用的芯片有Winbond、ITE,它为主板上的标准I/O接口提供控制处理功能。

Super这里所说的“超级”是指它集成了PS/2键盘、PS/2鼠标、串口COM、并口LPT接口等处理功能,而这些接口都是计算机中的慢速I/O设备。它们全部位于主板后部右边。它的主要功能包括负责处理从键盘、鼠标、串行接口等设备传输来的串行数据,将它们转换成为并行数据,同时也负责并行接口、软驱接口数据的传输与处理。

SIO芯片通过LPC连接在南桥,台式机主板EC ROM 挂载在SIO下,所以LPC初始化的时候要包含SIO的初始化和EC的初始化,当然现在先不说这个,现在主要讲怎么实现SIO的初始化,它的初始化意味着SIO下的PS/2键盘、串口、并口、以及通过一些LED、Beep、风扇控制等等。下面就smart fan 为例子,看下SIO的运行流程(ITE8738)。

1、 可以在Spec里面搜PnP Mode找到基地址,Address Port一般是2E,Data Port 一般是2F,如果有RW工具的话,可以进入IO Space,输入地址2E,然后在0x00位置依次输入(87h, 01h, 55h, 55h),进入MB PnP 模式。可能你发现你每输一个,它会自动变为0xff,不要以为没生效,其实它已经进入PnP Mode了。比如你输玩87h,确定后,马上变回00,不要慌,继续输入01h确定。

2、使能 EC(LDN=04h, Index 30h=01)通过看SPEC,可以发现逻辑设备选择寄存器是07h,它的逻辑设备号是04h,这时候,进入IO Space,输入2E,在控制寄存器2E地址即0x00位置输入07h,然后在数据寄存器2F地址即0x01位置输入04h,在控制寄存器2E地址即0x00位置输入30h,在数据寄存器2F地址即0x01位置输入01h,使EC生效。

Environment Controller Configuration Registers (LDN=04h)
Environment Controller Activate (Index=30h, Default=00h)
Bit Description:
7-1 Reserved
0 Environment Controller Enable
1: Enable
0: Disable
This is a read/write register

3、得到EC Base Address,可以从SPEC中看出,基地址是需要从60h,61h寄存器读出来的,60h是高八位,61h是低八位,合起来就是基地址base。然后我们的EC控制器的地址端口地址就是base+05h,数据端口就是base+06h。

基地址由逻辑设备寄存器确定(index=60h, 61h)。地址端口(Base+05h),数据端口(Base+06h)。

4、Smart Fan逻辑配置。

5、 退出MB PnP 模式(index=02h,default=02h)这个也可以在SPEC里面看到,这个退出PnP Mode在2E/2F端口里面的02h部分设置为01h。

至此,风扇控制就完毕了。

看下部分的代码怎么写的(包含库就不写了),功能不是smartfan,只是将风扇转速开到了最大。

static unsigned char linux_inb(unsigned long port)
{return (*(volatile unsigned char *)(0x90000efdfc000000 + port));
}
#define linux_outb(port,val) \
do {\*(volatile unsigned char *)(0x90000efdfc000000 + (port)) = (val);  \}
while(0)void EnterCOonfigMode(void)
{linux_outb(0x2E, 0x87);linux_outb(0x2E, 0x01);linux_outb(0x2E, 0x55);linux_outb(0x2E, 0x55);  return;
}void ExitConfigMode (void)
{UINT8  RegData = 0x00;linux_outb (0x2E, 0x02);RegData = linux_inb (0x2F) | BIT1;linux_outb (0x2E, 0x02);  linux_outb (0x2F, RegData);return;
}void SmartFanFunction(void)
{UINT16 addr;UINT8 base1,base2;UINT8 fandata1,fandata2;EnterConfigMode();//LDN Selectionlinux_outb(0x2E,0x07);linux_outb(0x2F,0x04);//Enable Environment Controllerlinux_outb(0x2E,0x30);linux_outb(0x2F,0x01);//Get BaseAddress 0x290linux_outb(0x2E,0x60);base1=linux_inb(0x2F);DEBUG((EFI_D_INFO, "base1: 0x%x\n", base1));linux_outb(0x2E,0x61);base2=linux_inb(0x2F);DEBUG((EFI_D_INFO, "base2: 0x%x\n", base2));addr=(base1<<8&0xFF00)|base2;DEBUG((EFI_D_INFO, "GetFanBaseAddress: 0x%x\n", addr));//Open ON/OFF modelinux_outb(addr+5,0x13);fandata1=linux_inb(addr+6);DEBUG((EFI_D_INFO, "fandata1: 0x%x\n", fandata1));linux_outb(addr+6,0x00);//Open ON control and FAN_CTL polarity highlinux_outb(addr+5,0x14);fandata2=linux_inb(addr+6);DEBUG((EFI_D_INFO, "fandata2: 0x%x\n", fandata2));linux_outb(addr+6,0x87);ExitConfigMode();
}void main()
{
SmartFanFunction();
return;
}

--------------2022年2月28日22:26:05-----------------

接之前的beep和LED,这次准备深入Smart fan的功能实现,首先需要理解,这个smart fan的运作机制,它就是监控机器的温度,然后根据温度的不同,对风扇的转速进行调节,根据文档,我们找到9.5节,其实大多数都是为这个smart fan开辟的IO space。

下面的位置就是操作smart fan需要用到的

每个寄存器都有相应的描述:

这里2-0对应3-1,6-4对应3-1,不要弄反了,这些英文都能看得懂,一个一个去看就行了,具体怎么操作不想记录了,反正就是按着步骤和自己的编程思维来就行。

BIOS实战之Super IO-Smart Fan相关推荐

  1. 【我所認知的BIOS】—Super IO

    [我所認知的BIOS]->Super IO By LightSeed 2009-9-2 1.Superio概述 Super I/O芯片也叫I/O芯片.在486以上档次的主板上都有I/O控制电路. ...

  2. ITE Super IO入门篇

    接触BIOS以来算起来已经有四年了,想着将自己所学的知识记录起来,这样也方便他人学习.这是我的第一篇博客,从SIO开始吧! 简介 SIO应用在台式机比较多,主要用来做电源管理,如上电时序控制:外围接口 ...

  3. ITE Super IO - Environment Controller

    简介 Environment Controller,即环境控制器,可以说是SIO中最复杂也是最重要的功能了,它主要包含了风扇控制.电压监测和温度监测三个模块,它们组合起来就可以实现智能风扇(Smart ...

  4. LPC(Low Pin Count) 与SIO(Super IO)

    记录bios学习的点点滴滴,虽然已经学了很长时间才发出来,但就当是温故而知新吧,由于水平有限,难免存在错误,望指正,同时感谢CSDN提供的平台. 1.LPC 定义:​ Intel所定义的PC接口,将以 ...

  5. Linux 访问superio 寄存器,ITE Super IO 学习 - GPIO

    简述 Super IO中的GPIO逻辑设备功能还是挺丰富的,除了通用GPIO功能,还支持看门狗(Watch Dog Timer).SMI输出路由(SMI Ouput Routing).外部中断路由(E ...

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

    前几天提到了SIO有关的,之前略有研究,不过确实实际只研究过小部分功能,也就做龙芯BIOS的时候参与过SIO的有关编程,因为这个东西笔记本是肯定不会用的,笔记本用EC,这个SIO也就相当于PC板上的E ...

  7. ITE Super IO - 串口

    简述 串口都算是一个比较古老的功能了,也就是比较成熟了.Super IO中的大部分是硬件已经做好的,BIOS这边只需做小小的改动甚至默认便可以工作了. 串口寄存器 串口有关的寄存器总的来说有4个,两个 ...

  8. BIOS实战之PCI设备枚举二

    上次说到了除了IO枚举PCI设备,还有另一种方式枚举PCI设备,那就是通过pciio,这也是UEFI代码中的常规操作(当然还有MMIO,不过不写了) UEFI BIOS 提供了两个主要的模块来支持PC ...

  9. Netty介绍及实战(二)之IO与NIO和多路复用与零拷贝

    Netty介绍及实战(一) 一.Netty到底是什么?什么是多路复用?什么叫做零拷贝? Netty是一个NIO客户端服务器框架,可以快速.轻松地开发协议服务器和客户端等网络应用程序.它极大地简化和简化 ...

  10. BIOS实战之Memory配置

    目前有SPD和SMIP两种,现在主要配置SMIP,soft:BMP:需要修改的相关文件smip.c BGA:贴片式,Dimm:插槽,MemoryDown:贴片必须要用到的: ch0 RankEnabl ...

最新文章

  1. 源代码下载 第六章 注解式控制器详解
  2. [转]xargs详解
  3. ZF2系列 – Zend Framework 2 MVC實作 (Part 3)
  4. 爬虫-post请求-RR网的登陆页-草稿-关注js反爬虫手法-只看不钻
  5. 12v直流电机并联多大电容_对电容的理解
  6. PCL三维点云拼接融合
  7. handler机制及使用场景
  8. 统计思维-程序员数学之概率统计_源代码
  9. python爬虫学习,使用requests库来实现模拟登录4399小游戏网站。
  10. 国美易卡使用HTTP连接方式,国美易卡保证客户端状态
  11. 关于/etc/hosts文件
  12. 2014Android Demo源码 文件夹 PATH 列表
  13. 【vscode】调试cocos creator (Js 无法命中断点问题解决)
  14. mysql以及DBeaver的使用
  15. mongoDB百度脑图总结
  16. 计算机专业英语试题2,计算机专业英语试题2
  17. 安卓So(C代码)MD5算法
  18. elementUI el-upload上传文件 关闭文件列表
  19. win10以太网无法连接网络解决办法
  20. 科大奥瑞物理实验——光强调制法测光速

热门文章

  1. OBS(Open Broadcaster Software)桌面视频直播软件/直播推流工具使用方法指南
  2. 用Threejs做一只会动的3D玉兔祝大家中秋快乐
  3. win11桌面图标怎么调大小
  4. 要运行python程序要安装什么_求你要我(2)
  5. JavaScript线条变形动画网页js特效
  6. 云计算与云原生 — OpenShift 部署实践
  7. U盘打不开的常见情况和解决方法
  8. 深入理解 Java 中的转义符: \u000a\u0022
  9. dataGrid使用deleteRow删除数据时会出现 ‘id‘ of undefined
  10. c++ primer plus6.11第三题 编写一个菜单驱动程序雏形。