《嵌入式Linux软硬件开发详解——基于S5PV210处理器》——2.3 SLC Nand Flash芯片

简介:

本节书摘来自异步社区《嵌入式Linux软硬件开发详解——基于S5PV210处理器》一书中的第2章,第2.3节,作者 刘龙,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.3 SLC Nand Flash芯片

2.3.1 NOR Flash与NAND Flash对比

在嵌入式系统中,很多信息在系统关闭电源后不能够丢失,这些信息需要使用非易失性存储器来存储,我们可以使用NOR Flash和NAND Flash来实现。

NOR Flash和NAND Flash是现在市场上两种主要的非易失闪存技术。Intel公司于1988年首先开发出NOR Flash技术;1989年,东芝公司开发出NAND Flash技术。NAND Flash和NOR Flash的主要区别如表2-3所示。


screenshot

2.3.2 SLC与MLC NAND Flash技术对比

在嵌入式设备中使用SLC和MLC这两种不同类型的NAND Flash闪存技术的设备都很常见。SLC全称为Single-Level Cell,单层单元闪存;MLC全称为Multi-Level Cell,多层单元闪存。两者的主要区别是SLC每一个单元储存一位数据,而MLC通过使用多个电压等级,每一个单元储存两位数据,数据密度比较大。

SLC生产成本较高,但在效能上大幅胜于MLC。SLC晶片可重复写入约10万次,而MLC晶片的写入次数约为1万次,目前三星采用的MLC芯片写入寿命在5000次左右。在读写速度上,相对于主流SLC芯片,MLC芯片理论速度较慢。MLC能耗大于SLC,在相同使用条件下比SLC要多15%左右的能耗,因为MLC理论写入次数上限相对较少,所以在相同使用情况下,使用寿命比SLC短。

两种闪存技术对应芯片区别如表2-4所示。


screenshot

Smart210开发板无NOR Flash。采用的是SLC类型NAND Flash,容量为512MB,型号为K9F4G08UOB。

2.3.3 K9F4G08UOB引脚功能

K9F4G08UOB的引脚排列如图2-8所示,各个引脚的功能如表2-5所示。


screenshot


screenshot


screenshot

screenshot

K9F4G08UOB内部结构如图2-9所示。


screenshot

NAND Flash设备的存储容量是以页(Page)和块(Block)为单位,1Block=64Page,1Page=2112Byte(2048Byte用于存放数据,其余64Byte用于存放其他信息,如块好坏的标记、块的逻辑地址、页内数据的ECC校验和等)。

容量为512MB的NAND Flash存储结构为:2048Byte×64Page×4096Blocks。

芯片(Device)、块(Block)、页(Page)之间的关系如下。

1 Device = 4,096 Blocks = 4096×64 Pages = 256K Pages

1 Block = 64 Page

1 Page = 2112 Byte = 2048 Byte + 64 Byte

用于数据存储的单元有 2048 Bytes×64 Pages×4096 Blocks = 512 MB。

用于ECC校验或其他功能的单元有64 Bytes×64 Pages×4096 Blocks = 16MB 。

NAND Flash以页为单位进行读和编程(写)操作,一页为2048Byte;以块为单位进行擦除操作,一块为2048Byte×64page=128KB。

K9F4G08UOB的内部对每一页又进行了划分,每页分成前2048Byte的Main域和64Byte的Spare域,在Main域中,分成A、B、C、D四个扇区;Spare域中,分成E、F、G、H四个扇区。每个扇区占据不同的存储空间,具体分布情况如图2-10、图2-11所示。

screenshot

2.3.4 NAND Flash硬件设计

S5PV210和K9F4G08UOB的连接方式如图2-12所示。

K9F4G08UOB的访问地址、数据和控制命令只能在引脚I/O[7:0]上传递。对于不同的数据类型,S5PV210微处理器和NAND Flash之间是通过控制总线和一些命令序列来进行区分的。该NAND Flash芯片所支持的命令序列如表2-6所示。


screenshot


screenshot


screenshot

screenshot

K9F4G08UOB容量为512MB,需要30根地址线确定微处理器要访问的地址,而K9F4G08UOB只有8个I/O口,所要操作的地址是在控制引脚的配合下,先后5次发送至Flash内部。发送地址时地址序列如表2-7所示。


screenshot

序列中列地址为A0~A11,行地址为A12~A29,L表示在写的时候置为0。对S5PV210访问NAND Flash地址的指定,只需要分5步将地址值写入S5PV210的NAND Flash控制寄存器即可,NAND Flash控制器会自动地通过8个I/O,在控制引脚帮助下,分五次通过I/O0~I/O7完成对NAND Flash地址的写操作。

相关文章
|
6天前
|
Linux 编译器 Android开发
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
在Linux环境下,本文指导如何交叉编译x265的so库以适应Android。首先,需安装cmake和下载android-ndk-r21e。接着,下载x265源码,修改crosscompile.cmake的编译器设置。配置x265源码,使用指定的NDK路径,并在配置界面修改相关选项。随后,修改编译规则,编译并安装x265,调整pc描述文件并更新PKG_CONFIG_PATH。最后,修改FFmpeg配置脚本启用x265支持,编译安装FFmpeg,将生成的so文件导入Android工程,调整gradle配置以确保顺利运行。
24 1
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
|
24天前
|
JSON 机器人 Linux
推荐一款嵌入式Linux开源框架与封装-cpp-tbox
推荐一款嵌入式Linux开源框架与封装-cpp-tbox
54 3
|
1月前
|
Linux 开发工具 git
Linux嵌入式系统中如何使用U-Boot实例
Linux嵌入式系统中如何使用U-Boot实例
26 0
|
12天前
|
Linux 编译器 测试技术
嵌入式 Linux 下的 LVGL 移植
嵌入式 Linux 下的 LVGL 移植
|
12天前
|
Linux 内存技术 Perl
【ZYNQ】制作从 QSPI Flash 启动 Linux 的启动文件
【ZYNQ】制作从 QSPI Flash 启动 Linux 的启动文件
|
22天前
|
Linux API C语言
FFmpeg开发笔记(一)搭建Linux系统的开发环境
本文指导初学者如何在Linux上搭建FFmpeg开发环境。首先,由于FFmpeg依赖第三方库,可以免去编译源码的复杂过程,直接安装预编译的FFmpeg动态库。推荐网站<https://github.com/BtbN/FFmpeg-Builds/releases>提供适用于不同系统的FFmpeg包。但在安装前,需确保系统有不低于2.22版本的glibc库。详细步骤包括下载glibc-2.23源码,配置、编译和安装。接着,下载Linux版FFmpeg安装包,解压至/usr/local/ffmpeg,并设置环境变量。最后编写和编译简单的C或C++测试程序验证FFmpeg环境是否正确配置。
39 8
FFmpeg开发笔记(一)搭建Linux系统的开发环境
|
25天前
|
Linux
嵌入式Linux系统(NUC980)tf卡出错处理errors=remount-ro改为errors=continue
嵌入式Linux系统(NUC980)tf卡出错处理errors=remount-ro改为errors=continue
7 1
|
25天前
|
Linux 内存技术
Linux内核读取spi-nor flash sn
Linux内核读取spi-nor flash sn
18 1
|
25天前
|
安全 Linux
嵌入式Linux系统关闭串口调试信息的输出
嵌入式Linux系统关闭串口调试信息的输出
19 1
|
25天前
|
Linux 编译器 网络安全
嵌入式Linux移植dropbear
嵌入式Linux移植dropbear
19 3