S3C2440-裸机篇-09 | 使用S3C2440操作Nor Flash
2021/7/16 23:40:03
本文主要是介绍S3C2440-裸机篇-09 | 使用S3C2440操作Nor Flash,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1. Nor Flash与Nand Flash
Nor | Nand | |
---|---|---|
接口 | 引脚多,类似于RAM | 引脚较少 |
容量 | 小(1-32MB) | 大(128-512MB) |
读操作 | 简单,和RAM相同 | 简单,和RAM相同 |
写操作 | 发出特定命令才能写入 | 发出特定命令才能写入 |
价格 | 贵 | 便宜 |
比较 | 无坏块 | 有坏块 |
XIP | 可以 | 不可以 |
应用场合 | 存储关键性代码(比如uboot,kernel) | 存储海量数据(允许错误) |
2. JZ2440开发板上的Nor Flash
JZ2440开发板上板载了一个Nor Flash,型号为MX29LV160DBTI-70G
,连接在S3C2440内存控制器上的BANK0,原理图如下:
3. 使用uboot命令直接读写内存操作Nor Flash
实验前提:烧录uboot.bin到Nor Flash,并且板子设置为Nor Flash启动方式。
知识准备:uboot | uboot内存操作指令mw和md详解。
3.1. 读取Nor Flash ID(Manifacture ID)
查看Nor FLash芯片数据手册:
从数据手册中可知,读取Manifacture ID的流程如下:
- ① 向Nor Flash的
0x555
地址处写入数据0xAA
; - ② 向Nor Flash的
0x2aa
地址处写入数据0x55
; - ③ 向Nor Flash的
0x555
地址处写入数据0x90
(进入读ID模式); - ④ 从Nor Flash的
0x00
地址处读取数据,读取出的值就是Manifacture ID,为0xC2; - ⑤ 退出读ID模式:向任意地址写0xF0;
因为S3C2440的A1接在Nor Flash的A0上,所以CPU发出的地址应该是左移一位之后的地址,所以uboot中应该使用如下几条命令进行测试:
mw.w aaa aa mw.w 554 55 mw.w aaa 90 md.w 0 1
3.2. 读取Nor Flash ID( Device ID)
查看Nor FLash芯片数据手册:
从数据手册中可知,读取Device ID的流程如下:
- ① 向Nor Flash的
0x555
地址处写入数据0xAA
; - ② 向Nor Flash的
0x2aa
地址处写入数据0x55
; - ③ 向Nor Flash的
0x555
地址处写入数据0x90
(进入读ID模式); - ④ 从Nor Flash的
0x02
地址处读取数据,读取出的值就是Device ID,为实际ID; - ⑤ 退出读ID模式:向任意地址写0xF0;
因为S3C2440的A1接在Nor Flash的A0上,所以CPU发出的地址应该是左移一位之后的地址,所以uboot中应该使用如下几条命令进行测试:
mw.w aaa aa mw.w 554 55 mw.w aaa 90 md.w 2 1
本实验中读取的Device ID是0x2249
,和数据手册中的一致:
3.3. 读取CFI信息
CFI 即 Common Flash Interface,公共Flash接口。Flash存储器接口标准有CFI和JEDEC(比较老的规范),CFI用于帮助程序从Flash芯片中获取操作方式信息,而不用在程序中硬编码Flash的ID。
① 进入CFI模式
查看Nor FLash数据手册中的命令列表,找到进入CFI模式的命令:
因为S3C2440的A1接在Nor Flash的A0上,所以CPU发出的地址应该是左移一位之后的地址,所以uboot中应该使用如下命令进行测试:
mw.w aa 98
② 进入CFI模式后,任意读取需要的CFI信息
首先读取一下CFI信息的前三个字符QRY
进行测试:
因为S3C2440的A1接在Nor Flash的A0上,所以CPU发出的地址应该是左移一位之后的地址,所以uboot中应该使用如下命令进行测试:
md.w 20 3
再读取Flash容量信息测试一下:
因为S3C2440的A1接在Nor Flash的A0上,所以CPU发出的地址应该是左移一位之后的地址,所以uboot中应该使用如下命令进行测试:
md.w 4e 1
测试结果和数据手册一致,Flash容量应该为
2
的
21
次
方
=
2
M
B
2的21次方=2MB
2的21次方=2MB。
③ 读取CFI信息完毕,退出读CFI模式:向任意地址写0xF0(复位)。
mw.w 00 f0
3.4. 擦除和写入数据
Nor Flash不能直接写入,这样设计也是非常合理,如果Flash的内容像SDRAM那样被轻易修改,那还叫什么Flash呢?
① 擦除
Flash的特性就是写入时数据只能由1变为0,而不能由0变为1,所以向Flash写入数据时,需要先进行擦除操作,将数据变为0xFF,之后才能写入待写数据。
擦除Flash的命令如下:
因为S3C2440的A1接在Nor Flash的A0上,所以CPU发出的地址应该是左移一位之后的地址,所以uboot中应该使用如下命令进行测试:
mw.w aaa aa mw.w 554 55 mw.w aaa 80 mw.w aaa aa mw.w 554 55 mw.w 100000 30
② 写入
首先确保一下要写入的地址处是否是0xFF:
md.w 100000 1
接下来可以写入数据,查看芯片手册获取写入命令:
因为S3C2440的A1接在Nor Flash的A0上,所以CPU发出的地址应该是左移一位之后的地址,所以uboot中应该使用如下命令进行测试:
mw.w aaa aa mw.w 554 55 mw.w aaa a0 mw.w 100000 1234
这篇关于S3C2440-裸机篇-09 | 使用S3C2440操作Nor Flash的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-11国产医疗级心电ECG采集处理模块
- 2025-01-10Rakuten 乐天积分系统从 Cassandra 到 TiDB 的选型与实战
- 2025-01-09CMS内容管理系统是什么?如何选择适合你的平台?
- 2025-01-08CCPM如何缩短项目周期并降低风险?
- 2025-01-08Omnivore 替代品 Readeck 安装与使用教程
- 2025-01-07Cursor 收费太贵?3分钟教你接入超低价 DeepSeek-V3,代码质量逼近 Claude 3.5
- 2025-01-06PingCAP 连续两年入选 Gartner 云数据库管理系统魔力象限“荣誉提及”
- 2025-01-05Easysearch 可搜索快照功能,看这篇就够了
- 2025-01-04BOT+EPC模式在基础设施项目中的应用与优势
- 2025-01-03用LangChain构建会检索和搜索的智能聊天机器人指南