SDRAM 特性
(1) 通常情况下, SDRAM 是拥有四个 Bank 的动态刷新存储器,存储器工作在 3.3V 的电压下,拥有一个同步接口,SDRAM 的所有信号都在时钟信号的上升沿被寄存。 (DDRDRAM工作电压是 2.5V、 DDR2 SDRAM 工作电压是 1.8V)。
(2) 对于 256Mb 的 SDRAM,每个 Bank 存储 64Mbit(67108864bit)的数据。当 SDRAM的数据位宽为 4bit 时,这些数据组成 8192 行*2048 列,每个存储单元存储 4bit 数据。当SDRAM 的数据位宽为 8bit 时,这些数据组成 8192 行*1024 列,每个存储单元存储8bit 数据。当 SDRAM 的数据位宽为 16bit 时,这些数据组成 8192 行*512 列,每个存储单元存储16bit 数据。
(3) 对于常用的一款型号为 HY57V281620 的 SDRAM 芯片,总共有 128Mbit 的存储空间, 其具有4 个 Bank,每个 Bank 存储32Mbit(33554432bit)的数据。 SDRAM 的数据位宽为16bit,这些数据组成 4096 行*512 列,每个存储单元存储 16bit 数据。
(4) 对于 SDRAM 的读写是以突发的方式进行的,对 SDRAM 的操作(读或写)是从一个指定的地址开始,并按照编程好的数量(长度)的地址, 顺序读写数据。对 SDRAM的操作(读或写)是以一个激活命令(包含打开行地址) 开始,然后跟随一个读或写命令。伴随着激活命令,
A0-A12 上同时被寄存的数据是期望获取位置的行地址, BA0 和BA1 上被寄存的数据是期望获取位置的 Bank 地址。伴随着读/写命令, A0—A8 上同时被寄存的数据是期望获取位置的列地址的首地址。
SDRAM 上电初始化时序
1. 加载电源( VDD 和 VDDQ);
2. CKE 设置为低低电平( LVTTL 逻辑低电平);
3. 加载稳定的时钟信号;
4. 等待至少 100us 的时间,此过程中的命令保持为禁止命令或空操作命令;
5. 在步骤 4 的 100us 中的某个时刻,将 CKE 设置为高;
6. 步骤 4 的 100us 等待时间结束后, 随即可发出一个全部 BANK 的预充电命令;
7. 等待时间 tRP,此过程中命令保持为禁止命令或空操作命令;
8. 步骤 7 钟的等待时间 tRP 结束时, 发出一个自动刷新命令;
9. 等待时间tRFC(Auto refresh period),此过程中命令仅允许是禁止命令或空操作命令;
10. 步骤 9 中的等待时间 tRFC 结束时, 再发出一个自动刷新命令;
11. 再等待时间 tRFC, 此过程中命令仅允许是禁止命令或空操作命令;
12. 步骤 11 中的等待时间 tRFC 结束时, 发出装载模式寄存器命令设置模式寄存器, 具
体模式寄存器的值由A0~A11 传输;
13. 等待时间 tMRD, 此过程中命令仅允许是禁止命令或空操作命令;
SD卡的写操作流程如下
1、 拉低片选CS引脚, 发送命令CMD24( 0x58)读取单个数据块,命令发送完成后等待SD卡返回响应数据;
2、 SD卡返回正确响应数据0x00后, 等待至少8个时钟周期, 开始发送数据头0xfe;
3、 发送完数据头0xfe后,接下来开始发送512个字节的数据;
4、 数据发送完成后,发送2个字节的CRC校验数据。 由于SPI模式下不对数据进行CRC校验, 直接发送两个字节的0xff即可;
5、 校验数据发送完成后,等待SD卡响应;
6、 SD卡返回响应数据后会进入写忙状态( MISO引脚为低电平), 即此时不允许其它操作。当检测到MISO引脚为高电平时, SD卡此时退出写忙状态;
7、 拉高CS引脚,等待8个时钟周期后允许进行其它操作。
SD卡的读操作流程如下
1、 拉低片选CS引脚, 发送命令CMD17( 0x51)读取单个数据块,命令发送完成后等待SD卡返回响应数据;
2、 SD卡返回正确响应数据0x00后, 准备开始解析SD卡返回的数据头0xfe;
3、 解析到数据头0xfe后,接下来接收SD卡返回的512个字节的数据;
4、 数据解析完成后,接下来接收两个字节的CRC校验值。 由于SPI模式下不对数据进行CRC校验, 可直接忽略这两个字节;
5、 校验数据接收完成后,等待8个时钟周期;
6、 拉高片选CS引脚,等待8个时钟周期后允许进行其它操作。
(我也是看了很多资料把大部分有用的发上来了,其他杂七杂八的你们自己找哈!)
想一起讨论的加我qq哈 1125854915;