内存容量自动识别
来自Jack's Lab
(版本间的差异)
(以“== 概述 == 现在内存条上皆有一个 8 针的 EEPROM 芯片(大约为 3mm x 2mm x 1.5mm)记录该内存条的一些参数信息,如工作频率,工...”为内容创建页面) |
(→SPD Table) |
||
(未显示1个用户的1个中间版本) | |||
第26行: | 第26行: | ||
Byte 6: | Byte 6: | ||
− | Module Width of this assembly,数据总线接口位宽,现在一般为 64 bit,ECC 的为 72 位。指的是一个 rank 的总线位宽,多个 rank | + | Module Width of this assembly,数据总线接口位宽,现在一般为 64 bit,ECC 的为 72 位。指的是一个 rank 的总线位宽,多个 rank 通过片 |
+ | 选来切换,对外而言实际上就是 Module (rank 的集合)的数据位宽 | ||
Byte 7: | Byte 7: | ||
第37行: | 第38行: | ||
Byte 13: | Byte 13: | ||
− | Primary SDRAM Width,芯片的位宽,一般为 8 bits 或 16 bits,此为单个内存颗粒 (chip) 内部 bank 的位宽,多个 bank | + | Primary SDRAM Width,芯片的位宽,一般为 8 bits 或 16 bits,此为单个内存颗粒 (chip) 内部 bank 的位宽,多个 bank 通过片选切换,因 |
+ | 此亦可称其为单个 chip 的位宽。 | ||
Byte 17: | Byte 17: | ||
Number of Banks on SDRAM Device,内存颗粒 (chip) 内部 bank 数,一般为 4 | Number of Banks on SDRAM Device,内存颗粒 (chip) 内部 bank 数,一般为 4 | ||
</source> | </source> | ||
+ | |||
+ | <br><br> | ||
+ | |||
+ | == 内存结构 == | ||
多个 bank 是为一个 chip,数据位宽为 sdram_width | 多个 bank 是为一个 chip,数据位宽为 sdram_width | ||
第47行: | 第53行: | ||
多个 chip 组成一个 rank,数据位宽为 data_width | 多个 chip 组成一个 rank,数据位宽为 data_width | ||
− | 多个 rank 合为一个 Module (内存条),数据位宽仍为 data_width | + | 多个 rank 合为一个 Module (内存条),数据位宽仍为 data_width |
+ | <br><br> | ||
− | + | == 容量计算 == | |
− | 总 chips 数为: n_chips = n_chips_per_rank * n_ranks_per_module | + | 每个 rank 所含 chip 的数为: |
+ | |||
+ | n_chips_per_rank = data_width / sdram_width | ||
+ | |||
+ | |||
+ | 总 chips 数为: | ||
+ | |||
+ | n_chips = n_chips_per_rank * n_ranks_per_module | ||
+ | |||
+ | |||
+ | 每个 chips 的容量则为: | ||
+ | |||
+ | chip_size = 2 ^ (n_cols + n_rows) * sdram_width * n_banks_per_chip | ||
− | |||
列地址位宽和行地址位宽是 chip 内之 bank 的参数 | 列地址位宽和行地址位宽是 chip 内之 bank 的参数 | ||
+ | |||
故内存总容量为: | 故内存总容量为: |
2014年11月11日 (二) 13:15的最后版本
目录 |
[编辑] 1 概述
现在内存条上皆有一个 8 针的 EEPROM 芯片(大约为 3mm x 2mm x 1.5mm)记录该内存条的一些参数信息,如工作频率,工作电压,行地址位宽,列地址位宽等等。一般称该芯片为 SPD (Serial Presence Detect) 芯片。
内存条上的 SPD 容量一般为 256 字节,使用 I2C 接口,因此要读取其中的信息,得先初始化好 I2C 总线控制器,欣慰的是 I2C 是一个很简单的总线。
[编辑] 2 SPD Table
一般称 256 字节的 SPD 数据位 SPD Table,其每一字节是为一个数据单位。择其要着,简述如下:
Byte 1: SPD 容量,常见的为 256B (0x08, 2^8),也有 128B (0x07, 2^7) Byte 3: 行地址位宽,0x0E (14 bits),0x0C (12 bits) Byte 4: 列地址位宽,0x0A (10 bits) Byte 5: Number of physical banks on DIMM,物理 bank 数,Module Bank 数,又称 rank 数。rank 的集合一般称为一个 module(相当于一个内存条) Byte 6: Module Width of this assembly,数据总线接口位宽,现在一般为 64 bit,ECC 的为 72 位。指的是一个 rank 的总线位宽,多个 rank 通过片 选来切换,对外而言实际上就是 Module (rank 的集合)的数据位宽 Byte 7: Module Width of this assembly (high bits),数据总线接口位宽的扩展字节,用于 Byte 6 不够用的情形 Byte 11: DIMM Configuration Type,数据校验类型,有: ECC: 0x00,则 64 bit 之数据宽度还要加一个 8 bit,一共 72 bit。计算容量时要剔除这 8 bit Non ECC: 0x02 Byte 13: Primary SDRAM Width,芯片的位宽,一般为 8 bits 或 16 bits,此为单个内存颗粒 (chip) 内部 bank 的位宽,多个 bank 通过片选切换,因 此亦可称其为单个 chip 的位宽。 Byte 17: Number of Banks on SDRAM Device,内存颗粒 (chip) 内部 bank 数,一般为 4
[编辑] 3 内存结构
多个 bank 是为一个 chip,数据位宽为 sdram_width
多个 chip 组成一个 rank,数据位宽为 data_width
多个 rank 合为一个 Module (内存条),数据位宽仍为 data_width
[编辑] 4 容量计算
每个 rank 所含 chip 的数为:
n_chips_per_rank = data_width / sdram_width
总 chips 数为:
n_chips = n_chips_per_rank * n_ranks_per_module
每个 chips 的容量则为:
chip_size = 2 ^ (n_cols + n_rows) * sdram_width * n_banks_per_chip
列地址位宽和行地址位宽是 chip 内之 bank 的参数
故内存总容量为:
memery_size = 2 ^ (n_cols + n_rows) * data_width * n_banks_per_chip * n_ranks_per_module
还有一个简化的计算方法:
Byte 31: Module Bank Density,每个 rank 的容量。其值含义为: 0x08 32 MB 0x10 64M 0x20 128MB 0x40 256MB 0x80 512MB
可以简化为 rank_density * 4MB
则另一个计算方法为:
memory_size = rank_density * 4MB * n_ranks_per_module