SPD (SMBUS)

SMBUS读取SPD信息学习 dos下读取spd 阅读详情

Memory   SPD   (Serial   Presence   Detect),记录了一些内存底层信息,如频率,大小,内存内型,内存标示号...等.测试软件SiSoft   Sandra   Professional中有一个spdinfo.exe,可以查看SPD的内容。本人用soft-ice
跟踪SPDINFO。EXE,发现它是从I/O端口0XC05,0XC06返回SPD内容,又得知IC2   控制芯片用SMBus接口S来管理MEMORY   SP,查看Windows98的系统信息,0xc00-0xc0f分一组.而SMBUS只有4种信号,觉的可能每种信号对应二个I/O端口.于是编程向 0xc03,0xc04发送一组数据.发现当向I/O端口0XC04发送0XA1时,I/O端口0xc05返回一个有效值.但和SPDINFO.EXE返 回的数值不同.

 

It 's   difficult   to   read   spd   of   memory.  
The   Following   asm   Example   is   to   show   the   spd   of   memory,
But   Your   pc   's   south   bridge   should   be   Intel   PIIx4.
So,   The   following   is   just   for   you   to   conference,
In   a   word   ,   You   should   follow   the   8   steps   to   read   spd.

Test   successful   On   My   machine   (Notebook)

;***********************************
;function:   read   spd   from   DRAM
;spec:   PIIX4.pdf   150
;***********************************

.model   small
include   myhead.asm
.data
pro0   db   'The   spd   of   dram0:$ '
        pro1   db   'The   spd   of   dram1:$ '
pro2   db   '00   01   02   03   04   05   06   07   08   09   10   11   12   13   14   15$ '
base   dw   ?
num   db   ?
temp   db   ?
tag   db   ?
.code  
assume   cs:@code,ds:@data
.startup
.386
mov   ax,@data
mov   ds,ax
mov   tag,0
mov   eax,80000060h    
mov   dx,0cf8h                
out   dx,eax
mov   dx,0cfch
in     ax,dx
cmp   ax,0000h
jz m2
m1:
mov ax,1000h ;power   base   address
add ax,34h
mov dx,ax
in al,dx
and al,0f3h
out dx,al
        PROMPT   pro0
mov   tag,1
        call   readspd
        crlf
m2:
        cmp           tag,0
        jz             read2
        mov           eax,80000060h
mov           dx,0cf8h                
out           dx,eax
        mov           dx,0cfeh
in             ax,dx
        cmp           ah,al
        jnz           read2
        .exit
read2:
        mov   ax,1000h
add ax,34h
mov dx,ax
in al,dx
and al,0f3h
or al,04h
out dx,al
        mov   tag,0
        PROMPT   pro1
        call   readspd        
        .exit
readspd   proc   near
        mov   eax,80003b90h         ;dev#=7   fun#   =3   bus#=0   address   offset:=90h
        mov   dx,0cf8h
        out   dx,eax
        mov   dx,0cfch
        in     ax,dx
        and   ax,1111111111110000b                                                                                                
mov   base,ax
;ax=1040h
crlf
        mov   num,0
mov   temp,0
mov   ax,base
again:
;STEP   1   ***************Specify   the   byte#   of   SMBus   device--SMBHSTCMD
mov   dx,base
add   dx,03h ;SMBHSTCMD   address
mov   al,num
out   dx,al ;0-7fh
;STEP   2   ***************Set   address   of   SMBus   device--SMBHSTADD
mov   dx,base
add   dx,04h ;SMBHSTADD   address
mov   al,0a1h ;read
out   dx,al
;STEP   3   ***************Set   R/W   protocol--SMBHSTCNT
mov   dx,base
add   dx,02h ;SMBHSTADD   address
in     al,dx
and   al,0e3h
or     al,08h
out   dx,al
;STEP   4   ***************Clear   the   host   status   register--SMBHSTSTS
mov   dx,base
add   dx,0h ;SMBHSTSTS   address
and al,0e0h
or al,1fh
out   dx,al
;STEP   5   ***************Clear   the   slave   status   register--SMBSLVSTS
mov   dx,base
add   dx,1h ;SMBSLVSTS   address
in     al,dx
or     al,3ch
out   dx,al
;STEP   6   ***************Start   the   SMBus   command--SMBHSTCNT
mov   dx,base
add   dx,2h ;SMBSLVSTS   address
in     al,dx
or     al,40h
out   dx,al
;STEP   7   ***************Wait   for   INT   assert--SMBHSTSTS

mov   dx,base
add   dx,0h ;SMBSLVSTS   address
waitint:
        in     al,dx
; test   al,04h
; jnz     changebank
and   al,02h
jz       waitint
;STEP   8   ***************Get   the   desired   data--SMBHSTDATA0
mov   dx,base
add   dx,5h ;SMBSLVSTS   address
in     al,dx
printal   al
SHOWCHAR   20H
inc   num
inc   temp
cmp   num,080h
        jz     readspd_exit
cmp   temp,16
jnz   k1
mov   temp,0
CRLF
k1:
        jmp   again
readspd_exit:
        ret
readspd   endp
;*******************read   error--changebank
quit:
.exit
end

透过 Intel SMBus Controller 读取 DDR4 SPD 切page的方式是对 0x36 (SPA0) 或 0x37 (SPA1) 的7 bits address写入一个byte (这边的data可以忽略,填0x00就好)。不太熟悉 SMBus 可以先参考。(*0x36 是7bit address, 要加上一个R/W# bit=0 才会是最后送出的address,所以 0x36 ...... 阅读详情

相关推荐

DOS下和WINDOWS下读内存SPD信息

一:WINDOWS下,用VC++编译,需要加载WINIO驱动。       读取方法:通过PCI  DEVICE上SMBUS来读取。                          1,找SMBUS BASE ADDRESS,查INTEL 南桥SPEC得到SMBUS的BUS#,DEVICE#,FUCTION#,OFFSET#,---------------0X8000FB20.#defi

liwu_111的专栏 6950

linux读取spd信息,linux怎样读取memory spd

匿名用户1级2016-07-02 回答随着linux广泛的使用,了解到服务器所运行的进程是势在必行的,作为初学者有必要总结自己的技术文档,根据自己的总结文档 写了如下的介绍。ps 查看静态的进程信息可以使用man 来查看 ps 的使用参数 以下是几个常使用到得,a 显示当前终端的所有进程信息u 使用以用户为主的格式输出进程信息x 显示当前用户在所有终端下的进程信息-e 显示 系统内的所有进程# ...

weixin_39814454的博客 1557

如何读SPD 信息...(转自英布之剑的博客)

之前接到过网友的询问,没有时间回复... 非常抱歉!真正创业的时候,才知道创来是如此不简单... 特别是再也没有这么多空余时间来钻研技术了... 还好,总是能收到网友讨论问题的邮件,让我偶尔还去看一下尘封以久的code, 或是再打开调试一下... 忙,没空写更多的费话,昨晚弄好code就睡了,贴一下出来... #include #include #include #include

Blaider的专栏 5019

内存技术扫盲:DIMM、DDR、SODIMM、SPD与JEDEC

在计算机硬件领域,内存相关的术语常常让人感到困惑。DIMM、DDR、SODIMM、SPD和JEDEC这些术语看似专业且相互关联,却又难以理清彼此间的关系。本文将系统地解析这些概念,厘清它们之间的关系,并以x86电脑和智能手机为例,说明这些技术在实际设备中的应用。

kanhao100的博客 1万+

smbus访问SPD

通常有IO和MMIO两种方式访问SMBUS,但两种方式除了base address不同,访问方法相似。 IO方式简化流程: 1. 找出smbus base address(记为smbase) 2. smbase + 04h处填入  SPD设备地址+1 (例如,   A2h+1=A3h)  3. smbase + 03h处填入  目标数据在SPD内的偏移地址 4. smbase +

ahotcoffee的专栏 3480

华硕spd信息_DOS下读取spd信息的汇编程序(通过SMBus

1 ;-----------------------------------------------------------2 ;功能: 通过SMbus 读取内存的SPD 信息3 ;时间: 2015/094 ;环境: DOS + MASM55 ;说明: 代码中涉及的smbus规范是基于Intel平台6 ;-----------------------------------------------...

weixin_42547431的博客 1075

smbus读取spd方法

smbus设备的bar5一般为smbus设备的io基地址。可以通过设备管理器查看。 Read SPD information The SMBus DeviceID of memory bank0 is a0, bank1= 0xa2, and bank2 =0xa4 smbus操作的过程如下所示 a. start out Base+0, 1e b. wait smbus re

Blaider的专栏 1万+

怎样读写SMBus上的Device—以获取Intel平台上MemorySPD信息为例

smbus,spd

菠菜的专栏 1万+

DOS下读取spd信息的汇编程序(通过SMBus

编程序编写的读取spd信息的代码: 1 ;----------------------------------------------------------- 2 ;功能: 通过SMbus 读取内存的SPD 信息 3 ;时间: 2015/09 4 ;环境: DOS + MASM5 5 ;说明: 代码中涉及的smbus规范是基于Intel平台 ...

anqian8401的博客 1227

针对罗冰的《UEFI编程实践》的补充------UEFI环境下,如何通过SMBUS访问SPD

1、UEFI环境下,如何通过SMBUS访问SPD? 2、INTEL平台下的如何获取DDR4内存条的SPD? 3、INTEL平台下的如何获取DDR5内存条的SPD? 4、AMD平台下的如何获取DDR4内存条的SPD? 5、AMD平台下的如何获取DDR5内存条的SPD? 6、获取到512字节的DDR4 SPD或者1024字节的DDR5 SPD后,如何解析? 如何根据SPD信息计算内存条的容量、SN、PN、RANK、生产商、内存颗粒信息等等。 这本书的第七章,应该分别就这些问题给出对应的实践案例。

2401_82550753的博客 613

以byte方式讀取SPD的數據(SMBus Controller在PCH中)

Reading A Byte of SMBus EEPROM DataThe following steps have to be followed for the System BIOS to read a byte of the Serial Presence Detect (SPD) datafromthe DIMM.1.Program the SMBus Base Address Re...

weixin_30682415的博客 378

10.20-smbus

10.20 任务目标 // 进度: SMBus/I2C:编写dos下小工具,读取256字节SPD信息 汇编语言 工作结果: 学习笔记: SMBus(System Management Bus) SMBus:双线通信专利技术,与I2C串行总线兼容,是I2C的子集。SMBUS可获取内存的SPD参数。0xA0, 0xA2, 0xA4, 0xA6 读取SPD。 工作频率:10-100khz 应答信息:ACK / NACK 读操作:接收器->发送器; 写操作:发送器->接收

qq_37607830的博客 1612

[Linux]学习笔记系列 -- [drivers]I2C]i2c-smbus

本文介绍了Linux内核中drivers/i2c/i2c-core-smbus.c文件实现的I2C/SMBus核心协议。SMBus是基于I2C协议的系统管理总线标准,主要用于电源管理和低速设备通信。文章分析了其历史背景、核心原理、使用场景及对比优势。SMBus通过标准化事务类型和PEC校验机制,提高了系统管理通信的可靠性,同时简化了驱动开发。其典型应用包括智能电池管理、温度传感器控制和服务器BMC通信。虽然SMBus在低速系统管理场景表现优异,但不适用于高速数据传输或非标准I2C通信场景。该实现通过分层架构

wdfk-prog.space 1207

【我所認知的BIOS】—>SPD

【我所認知的BIOS】—>SPDBy LightSeed2009-7-22  1、什麼是 SPD?存在SPD是Serial Presence Detect的縮寫,中文意思是模組存在的串列檢測。也即是通過上面講的I2C串列介面的EEPROM堆記憶體插槽中的模組存在的資訊檢查。這樣的話,模組有關的資訊都必須紀錄在EEPROM中。習慣的,我們把這顆EEPROM IC就稱為SPD了。以往開

肢解BIOS 4万+

spd read 当时编的.可能有点问题的..那个AMD的 SMBus 地址貌似可以固定下来.

http://en.wikipedia.org/wiki/Serial_presence_detect SPD ==Serial presence detect其中用到了 DDR2 ,DDR3 , JEDEC 106AA( Manufactures JEDEC ID)http://download.csdn.net/source/2374958 //by //COP

sxc_ujs的专栏 3023

内存中的串行存在检测器(SPD):系统稳定的幕后功臣

SPD作为内存模块的“身份证”和“说明书”,通过标准化接口与自动化配置,极大简化了系统对内存的管理。随着DDR5和CXL技术的发展,SPD的扩展性与灵活性将进一步提升,成为高性能计算与异构系统中不可或缺的组件。未来,SPD或将在内存健康监控、动态调频等领域发挥更大作用14。通过理解SPD的底层机制,用户不仅能优化系统性能,还能深入掌握内存技术的演进脉络。如需进一步探索SPD的字节级定义,可参考JEDEC标准文档(如JESD400-5)1。

麟的博客 3697
上一篇: SMBUS访问
下一篇: C和C++语言学习总结
Henrykobe
博客等级 码龄18年 29粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值