在线问答
登录
直播中
h1654155865.6393
10年用户
301经验值
擅长:可编程逻辑 测量仪表 嵌入式技术 模拟技术 处理器/DSP 控制/MCU
私信
关注
【OK210试用体验】裸机篇 -- Nand Flash 读写
【OK210试用体验】裸机篇 -- Nand Flash 读写
本帖来学习对Nand Flash的读写等操作。S5PV210中的Nand Flash 控制器的详细资料可以看
S5PV210_UM_REV1.1
中的
sec
ti
ons 05_memory
的
NAND FLASH CONTROLLER
。在OK210中,采用的Nand Flash芯片是
MT29F8G08ABABA
。详细的芯片datasheet 在飞凌官方光盘资料的
OK210 V1.1硬件资料Datasheet
目录下可以找到。
S5PV210中的NAND FLASH CONTROLLER
S5PV210的NAND Flash控制器有如下特点:
1) 支持512byte,2k,4k,8k的页大小
2) 通过各种软件模式来进行NAND Flash的读写擦除等
3) 8bit的总线
4) 支持SLC和MCL的NAND Flash
5) 支持1/4/8/12/16bit的ECC
6) 支持以字节/半字/字为单位访问数据/ECC寄存器,以字为单位访问其他寄存器。
S5PV210的Nand Flash 控制器模块框架图:
相应的I/O描述:
MT29F8G08ABABA
OK210
开发板
板载的Nand Flash芯片
MT29F8G08ABABA
为8 G bit。
·
Organization
– Page size x8: 4320 bytes (4096 + 224 bytes)
– Block size: 128 pages (512K +28 K bytes)
– Plane size: 2 planes x 1024 blocks per plane
– Device size: 8Gb: 2048 blocks
通过核心板原理图可以知道芯片接线:
通过芯片datasheet可以知道对芯片进行各种操作的command:
在对异步和同步的操作过程中的电平配置:
程序编写思路
这次的程序还是要沿用之前配置好的,新加入对Nand Flash寄存器的配置函数nandFlash_init,start.S:
.global _start
_start :
bl clock_init
bl uart_init
bl nandFlash_init
bl main
halt :
b halt
Nand Flash控制器的配置的思路:
1. 设置
NFC
ONF和NFCONT两个寄存器
2. 配置引脚,配置NAND Flash相关功能
3. 复位
配置NAND FLASH的寄存器前,当然是要进行寄存器地址宏定义啦。
#define NFCONF (*(volatile unsigned int *)0xB0E00000)
#define NFCONT (*(volatile unsigned int *)0xB0E00004)
#define NFCMMD (*(volatile unsigned int *)0xB0E00008)
#define NFADDR (*(volatile unsigned int *)0xB0E0000C)
#define NFDATA (*(volatile unsigned char *)0xB0E00010)
#define NFSTAT (*(volatile unsigned int *)0xB0E00028)
// 对应引脚映射地址定义
#define MP0_1CON (*(volatile unsigned int *)0xE02002E0)
#define MP0_3CON (*(volatile unsigned int *)0xE0200320)
#define MP0_6CON (*(volatile unsigned int *)0xE0200380)
Nand Flash芯片的分块定义:
// Array Organization per Logical Unit (LUN)
#define PAGE_SIZE 4320
#define BLOCK_SIZE (PAGE_SIZE * 128)
#define PLANE_SIZE (BLOCK_SIZE * 102)
#define LUN_SIZE (PLANE_SIZE * 2)
部分命令宏定义:
// Command Definitions
#define NF_CMD_RESET 0xFF
#define NF_CMD_READ_ID 0x90
#define NF_CMD_READ_PAR_PAGE 0xEC
#define NF_CMD_READ_UNIQUE_ID 0xED
#define NF_CMD_READ_STATUS 0x70
#define NF_CMD_READ_PAGE_1st 0x00
#define NF_CMD_READ_PAGE_2nd 0x30
#define NF_CMD_COPYBACK_READ_1st 0x00
#define NF_CMD_COPYBACK_READ_2nd 0x35
#define NF_CMD_PROGRAM_PAGE_1st 0x80
#define NF_CMD_PROGRAM_PAGE_2nd 0x10
#define NF_CMD_CHANGE_READ_COLUMN_1st 0x05
#define NF_CMD_CHANGE_READ_COLUMN_2nd 0xE0
#define NF_CMD_ERASE_BLOCK_1st 0x10
#define NF_CMD_ERASE_BLOCK_2nd 0xD0
#define BUSY (1 << 0)
#define ECC_EN (1 << 4)
#define CHIP_SELECTED (~(1 << 1))
#define CHIP_DESELECTED (1 << 1)
#define CONTROL_EN (1 << 0)
Nand Flash寄存器配置:
NFCONF = (0x1 << 23) | (0x3 << 12) | (0x2 << 8) | (0x1 << 4) | (0x0 << 3) | (0x0 << 2) | (0x1 << 1);
在main函数中,先读取芯片的ID,然后在一个块中写入数据,再读取出来并且打印到PC上。
实验现象
烧写程序到SD卡中,并且用SD卡启动后,可以通过SecureCRT看到:
芯片的ID信息。
在指定的地址擦除数据,然后写入2048 Byte 数据,再读出并且输出都 PC 上。
更多回帖
rotate(-90deg);
回复
相关帖子
【
OK210
试用
体验】之
裸机
程序 –
Nand
flash
3831
【
OK210
试用
体验】
裸机
篇
-- WATCHDOG
2630
【
OK210
试用
体验】3.0
裸机
驱动的编写---LED
篇
3612
【
OK210
试用
体验】
裸机
篇
-- PWM定时器
2442
【
OK210
试用
体验】
裸机
篇
-- DDR重定位
4857
【
OK210
试用
体验】
裸机
篇
-- 串口通信
2835
【
OK210
试用
体验】3.1
裸机
驱动的编写---UART
篇
3600
【
OK210
试用
体验】3.2
裸机
驱动的编写---PWM
篇
3044
【
OK210
试用
体验】
裸机
篇
-- 系统时钟配置
3678
【
OK210
试用
体验】
裸机
篇
-- 点亮LED增强版
2612
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
英国威廉希尔公司网站
william hill官网 版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分