SMBUS的介绍与访问

article/2025/9/14 20:24:30

            博文是为了总结自己在bios学习上面的点点滴滴,并且加深印象,由于本人水平有限,难免存在不足之处,望指正,同时感谢CSDN提供的平台。本文主要介绍的是SMBUS。

           1  SMBUS的简介

                 特点:

 SMBUS,System Management BUS,即系统管理总线,1995年,由Intel公司提出,应用于移动PC和桌面PC系统的低速率通讯。通过一条廉价而又功能强大的总线

(由两条线组成),来控制主板上的设备以及收集相应的信息。
   
                   SMBUS有两条信号线,分别为SMBCLK与SMBDAT,即一条时钟线一条数据线,并且这两条信号线都是双向的,当总线空闲时,这两条信号线都是高电平。

                       SMBUS总线规范是基于I2C的总线规范。但与I2C总线规范也有一定的区别。
                       SMBUS与I2C总线之间在时序特性上存在一些差别。首先,SMBUS需要一定数据保持时间,而 I2C总线则是从内部延长数据保持时间。SMBUS具有超时功能,

因此当SCL太低而超过35 ms时,从器件将复位正在进行的通信。相反,I2C采用硬件复位。SMBUS具有一种警报响应地址(ARA),因此当从器件产生一个中断时,它不会

马上清除中断,而是一直保持到其收到一个由主器件发送的含有其地址的ARA为止。SMBUS工作频率从10kHz到最高100kHz。最低工作频率10kHz是由SMBUS超时功能

决定的。   

应用:

SMBUS最初的目的是为智能电池,充电电池和其他与系统进行通信的微控制器之间的通信链路而定义的。SMBUS也被用来连接各种设备,包括电源相关设备,系统传感器

,EEPROM通讯设备等等。
       SMBUS最适用于笔记本电脑上,检测各元件状态并更新硬件设置引脚 (pull-high 或 pull-low)。例如,将不存在的 DIMM 时钟关闭,或检测电池低电压状态。 SMBUS 的

数据传输率只有 100Kbit/s;这允许单一主机与 CPU 和多个主从硬盘通讯并收发数据。SMBUS 也可用于免跳线设计的主板上。

      下图为SMBUS的拓扑结构,其总线上所挂的设备都是通过线与逻辑连接到SMBUS上面。


       



时序分析:

SMBUS的起始和停止条件



如时序图所示,当CLK为高电平时,DAT从高电平转换为低电平,表示数据传输信号的开始;当CLK为高电平,DAT从低电平转换为高电平则表示数据传输的结束。


SMBUS的数据传输条件

 


当数据传输时,CLK信号线表示高电平时,DAT必须保持稳定,不可以进行高低电平切换,只有当CLK信号处于低电平的时候,才可以进行高低电平的转换。




SMBUS的数据传输每一个字节为8位,传输结束之后需要跟一个相应信号为:ACK。即每次传输的数据为九位,第一个发送的数据位为最高位。SMBUS每次传输的字节数量不受限制。



2 :SMBUS的访问过程

               在DATASHEET中,给出的SMBUS的byte的读方式如下:




但一般,在BIOS当中,一般会配置部分参数,也就是说,并不是所有的在函数中都需要配置,根据不同的bios可能会有所不同,在我所试验的bios版本中,已经配置了很多参数,所以只需要配置必须的参数即可,总结如下:

read byte:

1:写入slave+1,写入地址为base address+0x04 ,bit 0 置一表示读操作

2:选择需要的寄存器,设置其偏移量,地址为base address+0x03

3:写入操作方式0x48,写入地址为base address+0x02

4:读出数据,读数据的地址为base address +0x05

read Word:

1:写入slave+1,写入地址为base address+0x04,bit 0 置一表示读操作

2:选择需要的寄存器,设置其偏移量,地址为base address+0x03

3:写入操作方式0x4C,写入地址为base address+0x02

4:读出数据,读数据的地址为base address +0x05,base address +0x06

write byte: 

1:写入slave,写入地址为base address+0x04,bit 0 置零表示写操作

2:选择需要的寄存器,设置其偏移量,地址为base address+0x03

3:写入需要的数据:一个byte,写数据的地址为base address +0x05

4:设置byte的工作方式0x48,写入地址为base address +0x02

write Word:

1:写入slave,写入地址为base address+0x04,bit 0 置零表示写操作

2:选择需要的寄存器,设置其偏移量,地址为base address+0x03

3:写入需要的数据:一个word,写数据的地址为base address +0x05,base address +0x06

4:设置word的工作方式0x4C,写入地址为base address +0x02

下面show一下intel给出的Datasheet中关于block的读写方式的说明:



同样的,对一些必须的步骤进行总结:

read  block:

1:写入slave+1,写入地址为base address+0x04,bit 0 置一表示读操作

2:选择需要的寄存器,设置其偏移量,地址为base address+0x03

3:写入block的工作方式0x54,写入地址为base address + 0x02

4:读出count地址为 base address + 0x05,读出数据,地址为 base address + 0x07

5:清标志位,写0x80到base address + 0x00,执行前一步,如此反复,直到读出count个byte


Datasheet中也给出了写block的内容:



总结如下:

write block:

1:写入slave+1,写入地址为base address+0x04,bit 0 置一表示写操作

2:选择需要的寄存器,设置其偏移量,地址为base address+0x03

3:写入count地址为 base address + 0x05,写入数据,地址为 base address + 0x07

4:设置block工作方式0x54,地址为base address + 0x02

5:清标志位,写0x80到base address + 0x00,执行第三步,再跳到此步,直到写入count个byte。


上面说了很多,其实主要的设置就是两点,一个是command,一个数据寄存器,其他都是大同小异,通过这些配置,实现不同的读写方式:


而我们在这些东西里面修改的主要还是寄存器,寄存器是如何工作的?在Datasheet中也有说明,下面介绍部分常用的寄存器:

     1:基址寄存器


对SMBUS进行访问需要知道他的基地址,其基地址可以通过PCI的访问方式,访问位置为bus=0,device=31,function=3,offset:20-23H的[15:5]。





bit 0,表示smbus是否空闲,bit 1,表示操作是否终止,bit 6:当前smbus是否可用,往这个位写1表示清除该位。bit 7:表示已经执行结束一个byte的读写.




bit 6:用来控制操作开始,[4:2]:表示对读写方式的选择:此次会用到的三种方式分别为:010=byte,011=word,101=block


对需要操作的寄存器进行操作,在这个寄存器内设置所操作寄存器的偏移量。

[7:1]选择slave,bit 0去决定读写操作,0表示写,1表示读。



这个寄存器有两种功能,一个是在byte/word的方式下,作为需要写/读的数据寄存器,另一种则是在block的方式下,用来存放需要读写的数据个数,其范围为不能为0,也不能超过32,否则会产生不可预知的动作。


这个寄存器是在word的方式下用来存放数据,(DATA 0存放高八位),用来存放低八位的数据。



这个寄存器是在block方式用来存放数据的



在RU下读一个byte示例:



程序示例,读一个byte:


这篇博文对smbus的访问介绍的十分详细,在这个博文里,使用的是smbus对spd信息进行访问的,需要注意的是,spd信息的写需要注意,因为信息很重要,数据写错易导致内存烧掉,需要谨慎。

Thanks for your reading.


http://chatgpt.dhexx.cn/article/Neo9Se8k.shtml

相关文章

java完整开发环境搭建_如何搭建一个完整的Java开发环境

这篇文章主要教大家如何搭建一个完整的Java开发环境,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 作为一个Java程序员,配置一个java开发环境是必备的技能,今天给广大菜鸟初学者补上一课。环境的配置,大概就分三个…

1.1-java开发环境搭建

java开发环境搭建 回到第一章:目录 文章目录 java开发环境搭建前言一、下载jdk1.安装前检查 二、安装jdk1.安装2.配置环境变量3.验证安装 前言 本节内容是搭建java的开发环境。 分为三步:下载jdk;安装jdk;配置环境变量&#xff…

Windows Java开发环境搭建

1.下载安装配置 JDK 8 打开 https://developer.oracle.com/找到 Java8 下载位置,点击下载链接,下载JDK 8 下载后如下图所示,双击安装一直选择选择下一步 2.下载安装 Eclipse点击官网下载 Eclipse下载后就是一个压缩包,只需解压即…

基于Centos7的Java开发环境搭建

基于Centos7的Java服务器搭建 前提:Centos常用命令安装 1. 安装wget yum -y install wget2. 安装gcc yum -y install gcc1. Centos7下的防火墙操作 systemctl status firewalld # 查看防火墙状态 systemctl start firewalld # 开启防火墙 systemctl stop fi…

Java开发环境的搭建与配置

Java开发环境的搭建与配置 1、JDK、JRE、JVM的关系 2、JDK的下载:http://java.sun.com 3、JDK安装:可以自定义安装路径 4、JDK环境变量配置: 鼠标右击【计算机】->【属性】->【高级系统设置】->【高级】->【环境变量】 系统变…

Java开发环境搭建实践

前言 刚刚弄完python的环境搭建,今年打算也要好好学习Java,所以把Java的环境弄起来 搭建过程 jdk下载和安装 下载 官网:Oracle 甲骨文中国 | 云应用和云平台 打开官网 点击产品后下拉找到Java点进去。 下载Java 我就下载最新的jdk把…

程序员福音 【完整的Java开发环境搭建】 系列篇

原文地址 BY Jason 文章目录 原文地址Java开发环境搭建统一问题解决(更新中)1. vim常用操作命令2. 关于Linux防火墙开放端口问题 环境安装目录(更新中)Docker安装容器安装SSHJDK安装MySQL安装Redis安装RabbitMQ安装 Java开发环境…

Windows下Java开发环境搭建

本文以Win7操作系统解压版Eclipse安装版JDK1.7为例,展示如何搭建初级Java开发环境。 第一步:根据自己电脑的操作系统的位数选择相应版本的安装包进行安装: (1)查看自己电脑操作系统位数:找到“计算机”图标…

Java开发环境搭建详细教程(JDK+Eclipse)

前言 学习 Java 编程的第一件事情就是把开发环境搭建起来,这样才能开始快乐的编程学习之旅。然而,很多萌新经常因为种种问题无法搭建好开发环境,导致自己信心受挫,学习兴趣和激情也大减,甚至因此彻底放弃学习 Java 编…

【Java编程进阶】Java开发环境搭建

文章详细讲述了 Java 开发环境的搭建,编写并运行第一个 Java 程序,为后续的 Java 学习做了准备工作。 推荐学习专栏:Java编程进阶之路 文章目录 1. 为什么安装JDK?2. JDK的下载安装3. 配置环境变量4. 第一个Java程序1. 为什么安装JDK? 什么是JDK? JDK是java软件开发包,…

Java开发环境搭建超全详解

在项目产品开发中,开发环境搭建是软件开发的首要阶段,也是必须阶段,只有开发环境搭建好了,方可进行开发,良好的开发环境搭建,为后续的开发工作带来极大便利。 对于大公司来说,软件开发环境搭建工…

JAVA开发环境的搭建(最新版)【2019.2.12】

JAVA环境搭建 JAVA(咖啡)这个名字很有意思这里我会教大家来找到泡咖啡需要的用品 一、下载环境包(找到茶杯) 首先,我们需要到Oracle官网去下载开发环境步骤如下 主页操作如下(可能会随着时间的变化网页布局会改变,不要慌&#…

Java开发环境搭建:Windows

Java开发环境搭建:Windows JDK下载安装JDK下载设置环境变量测试是否安装成功 开发工具下载安装:IdeaIdea下载Idea安装 Idea开发JAVA推荐一波 JDK下载安装 JDK下载 JDK官网下载点这里 根据自己的电脑操作系统选择JDK 的安装包。 需要记住安装位置,后面设置环境变量…

Java开发的环境搭建

目录 1>下载并安装JDK 2>下载并安装IntelliJ IDEA Ultimate 3>下载并安装Tomcat 1>下载并安装JDK 下载地址(要注册账号,建议去百度网盘下载): https://www.oracle.com/java/technologies/javase/javase-jdk8-dow…

java开发环境搭建与配置

java开发环境搭建与配置 1.首先鼠标右击我的电脑,找到“属性”,点击进入 2.找到“高级系统设置”,点击进入 3.点击“高级”,再点击“环境变量” 4.选择“系统变量” 用户变量只对当前用户有效,如用户更换&#xff0…

如何搭建Java的开发环境

我们在学习Java之前第一步应该搭建Java的开发环境,那开发环境如何搭建? 安装JDK配置环境变量 下面逐一介绍: JDK的下载与安装 1. 下载 打开浏览器,搜索JDK8(企业用的最多的是JDK7和JDK8,主流是JDK8&a…

Java开发环境搭建01:JDK安装和配置

一、JDK介绍 JDK是 Java 语言的软件开发工具包,是整个Java开发的核心,它包含了Java的运行环境(JVMJava系统类库)和Java工具(javac命令和java命令等)。总之一句话:开发Java程序必须下载并安装该…

Java开发环境搭建(windows版、史上最详细版)

Java开发环境搭建 在本章节中我们将为大家介绍如何搭建Java开发环境。我使用的是windows系统,那就给大家讲一下在windows系统下搭建java的开发环境。 Jdk介绍 JDK(Java Development Kit)是 Java 语言的软件开发工具包,主要用于…

从零学Java(2)之搭建开发环境

目录 从零学Java(8)之变量 从零学Java(7)之数据类型 从零学Java(6)之字面量和常量 从零学Java(5)之关键字和保留字 从零学Java(4)之编程规范 从零学Java&…

Java基础篇 | Java开发环境的搭建

前言: 对于java以前学过一点点,时间太久都忘了,今天开始就更新java了;从最基础的开始,打好java基础,便于以后复习。我们刚开始学就在dos命令框运行,不要直接在编译器IDEA上直接敲代码&#xff0…