480 likes | 671 Views
ARM嵌入式体系结构与接口技术 第 9 章 存储器接口. 课程安排 :. 第 1 章 嵌入式系统基础知识 第 2 章 ARM 技术概述 第 3 章 ARM 的指令系统 第 4 章 ARM 汇编语言程序设计 第 5 章 ARM Realview MDK 集成开发环境 第 6 章 GPIO 编程 第 7 章 ARM 异常中断处理及编程 第 8 章 串行通信接口. 课程安排 :. 第 9 章 存储器接口 第 10 章 定时器 第 11 章 A/D 转换器 第 12 章 LCD 接口设计 第 13 章 温度监测仪开发实例. 本章课程:.
E N D
ARM嵌入式体系结构与接口技术第9章 存储器接口
课程安排: • 第1章 嵌入式系统基础知识 • 第2章 ARM技术概述 • 第3章 ARM的指令系统 • 第4章 ARM汇编语言程序设计 • 第5章 ARM Realview MDK集成开发环境 • 第6章 GPIO编程 • 第7章 ARM异常中断处理及编程 • 第8章 串行通信接口
课程安排: • 第9章 存储器接口 • 第10章 定时器 • 第11章 A/D转换器 • 第12章 LCD接口设计 • 第13章 温度监测仪开发实例
本章课程: • 9.1 Flash ROM介绍 • 9.2 Nor Flash操作 • 9.3 NAND Flash操作 • 9.4 S3C2410X中Nand Flash控制器的操作 • 9.5 S3C2410X Nand Flash接口电路与程序设计 • 9.6 SDRAM芯片介绍 • 9.7 小结 • 9.8 思考与练习
9.1 Flash ROM介绍 • Falsh器件的主要特点是在不加电的情况下能长期保持存储的信息。Flash Memory属于EEPROM(电擦除可编程只读存储器)类型。它既有ROM的特点,又有很高的存取速度,而且易于擦除和重写,功耗很小。 • Flash主要有两种类型:“或非NOR”和“与非NAND” • Intel于1988年首先开发出NOR Flash技术 • 东芝公司1989年发表了NAND Flash结构 • Nand Flash与Nor Flash对比: • 1、接口对比NOR Flash带有通用的SRAM接口,可以轻松地挂接在CPU的地址、数据总线上,对CPU的接口要求低。NOR Flash的特点是芯片内执行(XIP,eXecute In Place),这样应用程序可以直接在Flash闪存内运行,不必再把代码读到系统RAM中。NAND Flash器件使用复杂的I/O口来串行地存取数据,8个引脚用来传送控制、地址和数据信息。
9.1 Flash ROM介绍 • 2、容量和成本对比相比起NAND Flash来说,NOR Flash的容量要小,一般在1~32MByte左右 • 3、可靠性性对比NAND器件中的坏块是随机分布的,而坏块问题在NOR Flash上是不存在的 • 4、寿命对比NAND闪存中每个块的最大擦写次数是一百万次,而NOR的擦写次数是十万次 • 5、升级对比NOR Flash的升级较为麻烦,因为不同容量的NOR Flash的地址线需求不一样不同容量的NAND Flash的接口是固定的,所以升级简单 • 6、读写性能对比擦除NOR器件时是以64~128KB的块进行的,执行一个写入/擦除操作的时间约为为5s。擦除NAND器件是以8~32KB的块进行的,执行相同的操作最多只需要4ms。NOR的读速度比NAND稍快一些。
9.2 Nor Flash操作 • 9.2.1 SST39VF160芯片介绍 • SST39VF160是一个1M×16的CMOS多功能Flash器件 • SST39VF160的工作电压为2.7~3.6V,单片存储容量为2M字节,采用48脚TSOP封装,16位数据宽度。 • SST39VF160引脚图
9.2 Nor Flash操作 • SST39VF160的引脚功能描述如下表
9.2 Nor Flash操作 • 9.2.2 SST39VF160字编程操作 • 1、执行3字节装载时序,用于解除软件数据保护 • 2、装载字地址和字数据 • 在字编程操作中,地址在CE#或WE#的下升沿(后产生下降沿的那个)锁存,数据在CE#或WE#的上升沿(先产生上升沿的那个)锁存。 • 3、执行内部编程操作该操作 • 在第4个WE#或CE#的上升沿出现(先产生上升沿的那个)之后启动编程操作。一旦启动将在20ms内完成。
9.2 Nor Flash操作 • 9.2.3 SST39VF160扇区/块擦除操作 • 扇区操作通过在最新一个总线周期内执行一个6字节的命令时序(扇区擦除命令30H和扇区地址SA)来启动。块擦除操作通过在最新一个总线周期内执行一个6字节的命令时序(块擦除命令50H和块地址BA)来启动。
9.2 Nor Flash操作 • 9.2.4 SST39VF160芯片擦除操作 • 芯片擦除操作通过在最新一个总线周期内执行一个6字节的命令5555H地址处的芯片擦除命令10H时序来启动在第6个WE#或CE#的上升沿(先出现上升沿的那个)开始执行擦除操作,擦除过程中只有触发位或数据查询位的读操作有效
9.2 Nor Flash操作 • 9.2.5 SST39VF160与S3C2410X的接口电路 • 一片SST39VF160以16位的方式和S3C2410的接口电路:
9.2 Nor Flash操作 • 9.2.6 SST39VF160存储器的程序设计 • 1、字编程操作 • 从内存“DataPtr”地址的连续“WordCnt”个16位的数据写入SST39VF160的“ProgStart”地址 • 利用了数据查询位(DQ7)和查询位(DQ6)来判断编程操作是否完成 • 函数中用到的几个宏的定义如下: • #define ROM_BASE 0x00000000 • #define CMD_ADDR0 *((volatile U16 *)(0x5555*2+ROM_BASE)) • #define CMD_ADDR1 *((volatile U16 *)(0x2aaa*2+ROM_BASE))
9.2 Nor Flash操作 • 9.2.6 SST39VF160存储器的程序设计 • 2、扇区擦除操作 • SectorErase函数实现了一个扇区(扇区的开始地址为“sector”)的擦除工作 • 注意数据查询位(DQ7)在编程函数和擦除函数中的使用差别
9.2 Nor Flash操作 • 9.2.6 SST39VF160存储器的程序设计 • 3、读操作 • FlashRead函数实现了从“ReadStart”位置,读取“Size”个字节的数据到“DataPtr”中。 • void FlashRead(unsigned int ReadStart, unsigned short *DataPtr, unsigned int Size) • { • int i; • ReadStart += ROM_BASE; • for(i=0; i<Size/2; i++) • *(DataPtr+i) = *((unsigned short *)ReadStart+i); • }
9.3 NAND Flash操作 • 9.3.1 K9F1280芯片介绍 • 常见的8位Nand Flash有三星公司的K9F1208、K9F1G08、K9F2G08等,K9F1208、K9F1G08、K9F2G08的数据页大小分别为512B、2kB、2kB。 • K9F1208存储容量为64M字节,除此之外还有2048K字节的spare存储区。该器件采用TSSOP48封装,工作电压2.7~3.6V。 K9F1208对528字节一页的写操作所需时间典型值是200μs,而对16K字节一块的擦除操作典型仅需2ms。8位I/O端口采用地址、数据和命令复用的方法。这样既可减少引脚数,还可使接口电路简洁。
9.3 NAND Flash操作 • 9.3.1 K9F1280芯片介绍 • 管脚名称 描述 • I/O0 ~ I/O7 数据输入输出 • CLE 命令锁存使能 • ALE 地址锁存使能 • CE# 片选 • RE# 读使能 • WE# 写使能 • WP# 写保护 • R/B# 准备好/忙碌 输出 • VCC 电源(+2.7V~3.6V) • VSS 地 • N.C 空管脚
9.3 NAND Flash操作 • 9.3.1 K9F1280芯片介绍 • 1block = 32page;1page = 528byte = 512byte(Main Area) + 16byte(Spare Area) • 总容量为 = 4 096(block数量) × 32(page/block) × 512(byte/page) = 64MB • Nand Flash以页为单位读写数据,而以块为单位擦除数据。 • 对Nand Flash的操作主要包括:读操作、擦除操作、写操作、坏块设别、坏块标识等。
9.3 NAND Flash操作 • 9.3.2 读操作过程 • K9F1208的寻址分为4个cycle,分别是A[0:7]、A[9:16]、A[17:24]、A[25] • 读操作的过程为:① 发送读取指令;② 发送第1个cycle地址;③ 发送第2个cycle地址;④ 发送第3个cycle地址;⑤ 发送第4个cycle地址;⑥ 读取数据至页末 • K9F1208提供了两个读指令:“0x00”、“0x01”。这两个指令区别在于“0x00”可以将A[8]置为0,选中上半页;而“0x01”可以将A[8]置为1,选中下半页 • 读操作的对象为一个页面,建议从页边界开始读写至页结束
9.3 NAND Flash操作 • 9.3.2 读操作过程 • K9F1208读操作流程如图
9.3 NAND Flash操作 • 9.3.3 擦除操作过程 • 擦除的操作过程为: • ① 发送擦除指令“0x60”; • ② 发送第1个cycle地址(A9~A16); • ③ 发送第2个cycle地址(A17~A24); • ④ 发送第3个cycle地址(A25); • ⑤ 发送擦除指令“0xD0”; • ⑥ 发送查询状态命令字“0x70”; • ⑦ 读取K9F1208的数据总线,判断I/O 6上的值或判断R/B线上的值,直到I/O 6 = 1或R/ = 1; • ⑧ 判断I/O 0是否为0,从而确定操作是否成功。0表示成功,1表示失败。 • 擦除的对象是一个数据块,即32个页面。
9.3 NAND Flash操作 • 9.3.3 擦除操作过程 • K9F1208擦除操作流程图
9.3 NAND Flash操作 • 9.3.4 写操作过程 • 写入的操作过程为: • ① 发送编程指令“0x80”; • ② 发送第1个cycle地址(A0~A7); • ③ 发送第2个cycle地址(A9~A16); • ④ 发送第3个cycle地址(A17~A24); • ⑤ 发送第4个cycle地址(A25); • ⑥ 向K9F1208的数据总线发送一个扇区的数据; • ⑦ 发送编程指令“0x10”; • ⑧ 发送查询状态命令字“0x70”; • ⑨ 读取K9F1208的数据总线,判断I/O 6上的值或判断R/线上的值,直到I/O 6=1或R/ =1; • ⑩ 判断I/O 0是否为0,从而确定操作是否成功。0表示成功,1表示失败。 • 注意:写入的操作对象是一个页面。
9.3 NAND Flash操作 • 9.3.4 写操作过程 • K9F1208写操作流程图
9.4 S3C2410X中Nand Flash控制器的操作 • 9.4.1 S3C2410X Nand Flash控制器概述 • S3C2410x 可以实现从NAND Flash启动和引导系统,在SDRAM上执行主程序代码。 • S3C2410x中的NAND Flash的特性有: • 支持读/擦/编程NAND Flash存储器 • 支持自动引导模式:复位后,引导代码被送入Steppingstone,传送后,引导代码在Setppingstone中运行 • 具备硬件ECC产出模块 • NAND Flash控制器工作机制
9.4 S3C2410X中Nand Flash控制器的操作 • 9.4.2 S3C2410X Nand Flash控制器寄存器详解 • 配置寄存器NFCONF • (地址0x4E000000)
9.4 S3C2410X中Nand Flash控制器的操作 • 9.4.2 S3C2410X Nand Flash控制器寄存器详解 • 命令寄存器NFCMD(地址:0x4e000004) • 地址寄存器NFADDR(地址:0x4E000008)
9.4 S3C2410X中Nand Flash控制器的操作 • 9.4.2 S3C2410X Nand Flash控制器寄存器详解 • 数据寄存器NFDATA(地址:0x4E00000C) • 状态寄存器NFSTAT(地址:0x4E000010)
9.5 S3C2410X Nand Flash接口电路与程序设计 • 9.5.1 K9F1208和S3C2410X的接口电路 • K9F1208和S3C2410X • 的接口电路
9.5 S3C2410X Nand Flash接口电路与程序设计 • 9.5.2 S3C2410X NAND Flash寄存器设置 • (1)控制器初始化时,需要使能控制器 • 设置UFCON的[15]为“1”。 • (2)使能NAND Flash芯片 • 设置UFCON的[11]为“0”。 • (3)通过NAND控制器向NAND Flash写入命令 • 设置NFCMD为要发送的命令。 • (4)通过NAND控制器向NAND Flash写入地址 • 设置NFADDR为要发送的地址。 • (5)通过NAND控制器向NAND Flash写入数据 • 设置NFDATA为要写入的数据。
9.5 S3C2410X Nand Flash接口电路与程序设计 • 9.5.3 S3C2410X控制K9F1208的程序设计 • 实现向K9F1208的一个页面中写入0,1,2,3,4,5,6,7,8,9。然后读出数据,打印到串口终端。程序设计如下: • 1、NAND Flash控制器相关寄存器及宏定义 • 2、主测试程序 • 3、K9F1208初始化函数 • 4、K9F1208页面读函数 • 5、K9F1208页面写函数 • 6、K9F1208块擦除函数 • 7、调试与运行结果
9.6 SDRAM芯片介绍 • 9.6.1 SDRAM介绍 • SDRAM存储一个位的消息只需要一只晶体管,但是需要周期性地充电,才能使保存的信息不消失。 • SDRAM的一个存储位单元结构如图 • 电容器的状态决定了这个 • SDRAM单位的逻辑状态是 • 1还是0。一个充电的电容 • 器被认为是逻辑上的1, • 而“空”的电容器则是0 。
9.6 SDRAM芯片介绍 • 9.6.1 SDRAM介绍 • SDRAM内部结构 • 示意图
9.6 SDRAM芯片介绍 • 9.6.1 SDRAM介绍 • SDRAM的读取过程: • SDRAM的写入过程和读取过程基本一样,这里就不再详细介绍了 • 在SDRAM读取方式中,当一个读取周期结束后,和都必须失效,然后再进行一个回写过程才能进入到下一次的读取周期中。
9.6 SDRAM芯片介绍 • 9.6.1 SDRAM介绍 • 与Flash存储器相比较,SDRAM不具有掉电保持数据的特性,但其存取速度大大高于Flash存储器,且具有读/写的属性,因此,SDRAM在系统中主要用作程序的运行空间,数据及堆栈区。当系统启动时,CPU首先从复位地址0x0处读取启动代码,在完成系统的初始化后,程序代码一般应调入SDRAM中运行,以提高系统的运行速度,同时,系统及用户堆栈、运行数据也都放在SDRAM中。 • SDRAM的存储单元可以理解为一个电容,总是倾向于放电,为避免数据丢失,必须定时刷新(充电) • 目前常用的SDRAM为8位/16位的数据宽度,工作电压一般为3.3V。主要的生产厂商为HYUNDAI、Winbond等
9.6 SDRAM芯片介绍 • 9.6.2 HY57V561620的结构 • HY57V561620存储容量为4M×4bank×16位(32M字节),工作电压为3.3V,常见封装为54脚TSOP,兼容LVTTL接口,支持自动刷新(Auto-Refresh)和自刷新(Self-Refresh),16位数据宽度
9.6 SDRAM芯片介绍 • 9.6.2 HY57V561620的结构 • 引脚 名称 • CLK 时钟 • CKE 时钟使能 • /CS 片选 • BA0,BA1 组地址选择 • A12~A0 地址总线 • /RAS 行地址锁 • /CAS 存列地址锁 • /WE 存写使能 • LDQM,UDQM数据I/O屏蔽 • DQ15~DQ0 数据总线 • VDD/VSS 电源/地 • VDDQ/VSSQ电源/地 • NC 未连接
9.6 SDRAM芯片介绍 • 9.6.3 接口电路 • 采用的是利用两片16位的SDRAM构造成一片32位的SDRAM存储系统。
9.6 SDRAM芯片介绍 • 9.6.3 接口电路 • 引脚描述如下: • nSRAS:SDRAM行地址选通信号 • nSCAS:SDRAM列地址选通信号 • nGCS6:SDRAM芯片选择信号 • nWBE[3:0]:SDRAM数据屏蔽信号 • SCLK0[1]:SDRAM时钟信号 • SCKE:SDRAM时钟允许信号 • DATA[0:31]:32位数据信号 • ADDR[2:14]:行列地址信号 • ADDR[25:24]:bank选择线
9.6 SDRAM芯片介绍 • 9.6.3 接口电路 • HY57V561620的Bank选择线BAn与S3C2410X地址线的对应关系,依照表9-12选择连接。HY57V561620的Bank大小位64MB,总线宽度位16位,单个器件容量为256MB,存储空间配置为(4MB×16×4BANK)×2片。所以BANK地址对应A[25:24] • SDRAM Bank地址配置表
9.6 SDRAM芯片介绍 • 9.6.4 寄存器设置 • 1.BWSCON寄存器 • BWSCON寄存器主要用来设置外接存储器的总线宽度和等待状态 • BWSCON寄存器在Bank6上的位定义 • SDRAM(Bank6)采用32位总线宽度,因此,DW6=10,其他2位采用缺省值
9.6 SDRAM芯片介绍 • 9.6.4 寄存器设置 • 2.BANKCONn寄存器的设置 • S3C2410X有8个BANKCONn寄存器,分别对应着Bank0~Bank7。Bank6~Bank7可以作为FP/EDO/SDRAM等类型存储器的映射空间 • BANKCONn寄存器在Bank6和Bank7上的位定义 • BANKCONn寄存器在MT=11时的相关位定义 • Trcd是从行使能到列使能的延迟,根据S3C2410X的HCLK频率(100M)及HY57V561620特性,此项取01。SCAN为列地址线数量,此项根据HY57V561620特性取01。
9.6 SDRAM芯片介绍 • 9.6.4 寄存器设置 • 3.REFRESH寄存器是DRAM/SDRAM的刷新控制器
9.6 SDRAM芯片介绍 • 9.6.4 寄存器设置 • 4、BANKSIZE寄存器
9.6 SDRAM芯片介绍 • 9.6.4 寄存器设置 • 5、MRSR寄存器 • MRSR寄存器有2个,为MRSRB6和MRSRB7对应着Bank6和Bank7 • 注意:当代码在SDRAM中运行时,绝不能够重新配置MRSR寄存器。 • 在掉电模式下,SDRAM必须进入SDRAM的自我刷新模式。
9.7 小结 • 本章重点讲解了在嵌入式系统中常用的各种存储器,以及在S3C2410X芯片中NAND Flash、NOR Flash、SDRAM的操作方法。
9.8 思考与练习 • 9-1 Nor Flash和Nand Flash的特征及它们之间特性的对比? • 9-2 Nor Flash的读、写、擦擦操作方法? • 9-3 Nand Flash的读、写、擦擦操作方法? • 9-4 SDRAM和RAM的区别?