串行存在检测

串行存在检测（英語：serial presence detect，缩写SPD）是一种访问内存模块有关信息的标准化方式。 早期的72 pin SIMM包括五个引脚，提供5位元并行存在检测（PPD）数据，而168 pin DIMM标准更改为串行存在检测，以编码更多信息。 在普通的现代電腦开机时，它将进行一次加电自检（POST）。自从20世纪90年代中期以来，这个过程包括自动設定当前存在的硬件。SPD是一项内存硬件特性，可使電腦了解存在的内存以及访问内存要使用的时序。 部分電腦可以完全自动地適應硬件变更。在大多数情况下，有一个特殊的可选步骤可以访问BIOS参数，得以查看并可能更改相关設定。有些電腦可以控制如何使用SPD中存储的数据——可以选择性的修改内存时序，乃至完全覆盖（忽视）SPD数据，詳見超頻。 对于支持SPD的内存模块，JEDEC标准要求在内存模块的一个EEPROM上的低128字节中存有特定参数。这些字节包括模块相关的时序参数、制造商、序列号及其他实用信息。利用内存的设备可以读取该信息来自动确定模块的关键参数。例如，SDRAM模块上的SPD数据可能提供有关CAS潜伏时间（英语：CAS latency）的信息，使系统可以自动配置而无需用户干预。 SPD EEPROM采用SMBus访问，这是I²C协议的一个变种。这将模块上的通信引脚数量减少到两个：时钟信号和数据信号。EEPROM与RAM共享接地引脚，有自己的电源引脚，并有三个额外引脚（SA0-2）来标识该槽，用于将EEPROM分配到0x50-0x57范围内的唯一地址。通信线路不仅可以在8个内存模块之间共享，同一SMBus通常也用于主板上的系统健康监控任务，例如读取电源电压、CPU温度和风扇速度。 （如果没有写保护，SPD EEPROMs也响应I²C地址0x30–0x37。一个扩展使用0x18–0x1F地址访问可选的芯片上温度传感器。） 第一个SPD规范由JEDEC发布，并由英特尔加强，作为其PC100（英语：PC100）内存规范的一部分。指定的大多数值为二進碼十進數形式。最重要的半字节（英语：Nibble）可以包含10到15个值，并在某些情况下可以扩展到更高。在这种情况下， 1、2、3的编码用于编码16,17和18。最高的0的半字节被保留表示为“未定义”。 SPD ROM定义了最多三个DRAM时序，在字节18中用设置位指定了三个CAS延迟。首先是最高的CAS延迟（最快时钟），然后是两个降低时钟速度的较低的CAS延迟。 DDR2 SPD标准做了一些修改，但大致同上。一个显着变化是删除混乱且很少使用的有两个不同大小Rank的DIMM支持。 时间周期字段（字节9、23、25和49）以二進碼十進數（BCD）编码，一些额外编码以十分位定义，以正确表示一些常见时序： DDR3 SDRAM标准大幅修缮，简化了SPD内容布局。取代多个BCD编码的纳秒字段，一些“时基”单元被规定为高精度，并且各种时序参数被编码为基本单元的倍数。此外，根据CAS延迟指定不同时序的做法已被删除，现在只有一组时序参数。 修订1.1使一些参数表示为“中等时基”值加上（带符号，-128 +127）“精细时基”校正。通常来说，中等时基为1/8 ns（125 ps），精细时基为1、2,5或5 ps。为了与缺少校正的早期版本兼容，中等时间基数通常向上取整，并且校正为负。以这种方式工作的值为： 模块的存储容量可以从字节4、7和8计算。模块宽度（字节8）除以每个芯片的位数（字节7）得出每个rank的芯片数量。然后可以乘以每个芯片的容量（字节4）和模块上芯片的Rank数量（通常为1或2，从字节7）。 JEDEC标准仅规定了部分SPD字节。真正关键的数据放在了前64个字节，而其余部分则由制造商标定。然而，通常提供的EEPROM为256字节。剩余空间目前已有一些用途。 内存通常在SPD ROM中附有保守的时序建议，以确保在所有系统上基本功能运行正常。爱好者通常会花费很多时间来手动调整内存时序以提高速度。 增强性能配置文件是一项SPD扩展，由Nvidia和Corsair开发，其中包含使DDR2 SDRAM以更高性能运行的额外信息，例如JEDEC SPD规范中不包括的供电电压和命令时序信息。EPP信息存储在同一个EEPROM中，不过字节在99-127，属于DDR2 SPD标准中的未使用区域。 这些参数专为nForce 5、nForce 6和nForce 7芯片组上的内存控制器设计。Nvidia鼓励在BIOS为其高端主板芯片组支持EPP。此能旨在提供“一键超頻”，以最小的努力取得更佳性能。 Nvidia为性能和稳定性得到认证的EPP内存提供的名称是“SLI-Ready 内存”。术语“SLI-Ready 内存”引起了一些混乱，因为这与NVIDIA SLI无关。用户可以使用单个视频卡（哪怕非Nvidia卡）搭配EPP/SLI内存，也可以在没有EPP/SLI内存的情况下运行多卡SLI视频配置。 其扩展版本EPP 2.0则支持DDR3内存。 与之类似的是，英特尔为DDR3 SDRAM DIMM开发了一个JEDEC SPD扩展。它使用JEDEC未分配的字节176-255来编码更高性能的内存时序。中文也称“扩展内存配置” 头部包含下列数据。其中最重要的是“中等时基”值MTB，它是一个合理的纳秒（常用值为1/8、1/12和1/16 纳秒）。之后的许多时序值都以整数个MTB单位表示。 头部还包括该配置文件旨在支持的每个内存通道的DIMM数量；更多的DIMM可能无法正常工作。 AMD也開發了一個SPD擴充集名為AMP，功用與XMP一樣。 一种常见的滥用是将信息写入某些内存区域，以将特定供应商的内存模块绑定到特定系统。已知富士通技术解决方案（英语：Fujitsu Technology Solutions）有这样做。向系统添加不同的内存模块通常会导致拒绝运行或其他反制措施（例如每次启动时需按F1）。 02 0E 00 01-00 00 00 EF-02 03 19 4D-BC 47 C3 46 ...........M.G.F 53 43 00 04-EF 4F 8D 1F-00 01 70 00-01 03 C1 CF SC...O....p..... 这是一个美光科技512 MB内存模块的输出，它的品牌是富士通西门子，注意“FSC”字符串。该系统BIOS拒绝从偏移128h开始没有此信息的内存模块。 内存模块制造商会将SPD信息写入模块上的EEPROM。主板BIOS则读取SPD信息来配置内存控制器。在大多数（但不是所有）主板芯片组中，存在多个能读取和修改SPD信息的程序。 dmidecode（页面存档备份，存于互联网档案馆）程序可以解码内存（及其他）有关信息，可以在Linux、FreeBSD、NetBSD、OpenBSD、BeOS、Cygwin和Solaris上运行。dmidecode不直接访问SPD信息；它会报告有关内存的BIOS数据。此信息可能受限或不正确。 在Linux系统上，使用者空間程序decode-dimms可以以i2c-tools解码和印出计算机中任何有SPD信息的内存信息。它需要内核中支持SMBus控制器、EEPROM内核驱动，并且SPD EEPROM已连接到SMBus。在旧的Linux发行版上，decode-dimms.pl作为lm_sensors（英语：lm_sensors）的一部分可用。 OpenBSD自4.3版本起包含驱动程序spdmem(4)[永久失效連結]来提供有关内存模块的信息。该驱动程序从NetBSD移植（自5.0版本可用）。 Coreboot读取和使用SPD信息来初始计算机中的所有内存控制器的时序、大小及其他属性。 Windows上使用如HWiNFO32（英语：HWiNFO32）、CPU-Z或Speccy软件可以读取和显示SPD中的DRAM模块信息。 使用eeprom编程器硬件和软件直接访问内存的EEPROM，可以直接读写SPD信息，而无需关心芯片组。 对于旧笔记本电脑来说，一种不太常见的用法是通用的SMBus读取器，因为BIOS可以在读取后禁用模块上的内部EEPROM，因此总线基本上可以使用[需要解释]。所用方法是将A0、A1线拉低，使内部存储器关闭，从而允许外部设备访问SMBus。完成此操作后，定制的Linux版本或DOS应用程序就可以访问外部设备。这样做的一个常见目的是从LCD面板的内存芯片中恢复数据，将通用面板改装为笔记本电脑专用。 部分较旧的设备必需使用具有并行存在检测（常称为简单存在检测，或缩写PD）的SIMM。这些设备中部分使用非标准的PD编码，尤其是如IBM计算机、惠普LaserJet，及其他一些打印机。 传感器电子数据表（英语：Transducer electronic data sheet） JEDEC发布DDR3串行存在检测规格文档. EDN电子技术设计. 2011-09-05 [2017-05-07]. （原始内容存档于2019-02-21）.  Thomas P. Koenig; Nathan John, Serial Presence Detection poised for limelight, Electronic News, 1997-02-03, 43 (2153) [2017-05-07], （原始内容存档于2015-05-03）  JEDEC Standard 21-C section 4.1.4 "Definition of the TSE2002av Serial Presence Detect (SPD) EEPROM with Temperature Sensor (TS) for Memory Module Applications" Application note INN-8668-APN3: SDRAM SPD Data Standards （页面存档备份，存于互联网档案馆）, memorytesters.com Understanding DDR3 Serial Presence Detect (SPD) Table. [2017-05-07]. （原始内容存档于2015-12-22）.  JEDEC Standard 21-C section 4.1.2.4 （页面存档备份，存于互联网档案馆） "SPDs for DDR SDRAM" JEDEC Standard 21-C section 4.1.2.10 （页面存档备份，存于互联网档案馆） "Specific SPDs for DDR2 SDRAM" JEDEC Standard 21-C section 4.1.2.11 "Serial Presence Detect (SPD) for DDR3 SDRAM Modules" JEDEC Standard 21-C section 4.1.2 （页面存档备份，存于互联网档案馆） "SERIAL PRESENCE DETECT STANDARD, General Standard" JEDEC Standard 21-C section 4.1.2.5 （页面存档备份，存于互联网档案馆） "Specific PDs for Synchronous DRAM (SDRAM)" DDR2 UDIMM Enhanced Performance Profiles Design Specification (PDF), Nvidia, 2006-05-12 [2009-05-05], （原始内容存档 (PDF)于2020-02-21）  SLI-Ready Memory with Enhanced Performance Profiles One-Click Hassle-Free Memory Performance Boost (PDF). [2017-05-07]. （原始内容存档 (PDF)于2020-02-21）.  Enhanced Performance Profiles 2.0 （页面存档备份，存于互联网档案馆） (pages 2–3) Intel Extreme Memory Profile (Intel XMP) DDR3 Technology (PDF). [2017-05-07]. （原始内容存档 (PDF)于2010-01-05）.  AMD 平台也有 XMP 記憶體超頻，這是怎麼一回事？. [2018-06-11]. （原始内容存档于2020-11-05）.  dmidecode: What's it good for?. [2017-05-07]. （原始内容存档于2011-05-22）.  decode-dimms Perl program. [2017-05-07]. （原始内容存档于2008-12-02）.  I2CTools – lm-sensors. Lm-sensors.org. [2014-08-14]. （原始内容存档于2012-03-11）.  HWiNFO32. [2017-05-07]. （原始内容存档于2020-12-11）.  Serial Presence Detect Standard, General Standard SPD Rev1.0 for DDR SDRAM（页面存档备份，存于互联网档案馆） SPD Rev1.2 for DDR2 SDRAM（页面存档备份，存于互联网档案馆） SPD Rev1.3 for DDR2 SDRAM SPECIALITY DDR2-1066 SDRAM（页面存档备份，存于互联网档案馆） Linux软件包i2c-tools Instructions on how to use lm-sensors or i2c-tools to read the data Memory Performance: 16GB DDR3-1333 to DDR3-2400 on Ivy Bridge IGP with G.Skill（页面存档备份，存于互联网档案馆） – explanation of various timing values