【S3C2440】第16课、Nandflash之学习笔记

说明:以下所有结论均经过在JZ2440(S3C2440A芯片)开发板验证,并一致通过。

1、Nandflash是如何被控制工作的?它是由2440的Nandflash控制器控制的;
它的内部寄存器组合是如何协调工作的?
答:根据Nandflash具体操作(读内存/编程内存/擦除)的时序图,辅助以指令集。
2.当开发板从Norflash启动时,可以读取Nandflash?反之?
答:当开发板从Norflash启动时,可以实现对Nandflash存储器的全部操作,包括读ID,读内存,擦除和写入均成功!!!!
但当开发板从Nandflash启动时,可以实现对Norflash存储器的全部操作,包括读ID,读内存,擦除和写入,但是擦除和写入操作均无效!!!!
3、Norflash和Nandflash核心操作方法的区别:
答:Norflash是以指令集合表为参照,而Nandflash是以具体操作时序图为主,辅以指令集合表。
4、头文件的具体外部要声明的函数,是全部声明,还是只需要声明外部程序要调用的函数?
答:未解决
5、程序在中断课程烧写到Nandflash没有问题,刚进入Norflash课程,再烧写到Nandflash就会不停地打印乱码,打印如下:
(补充:Nandflash控制器已经设置完毕)
600000db Undefined instruction exception! 600000d3swi exception!
00000123 200000db Undefined instruction exception! 000000d3swi exception!
00676e69000000db Undefined instruction exception! 00000050swi exception!
000000b060000050 Undefined instruction exception!
在Norflash课程之前程序都小于4K,可以直接在SRAM运行; 超过4K的程序就会崩溃,为什么?
答:代码超过4K,超过部分不能在SRAM运行,如要执行,需要重定位到SRAM;
但当恰好重定位代码的程序在4K之外时,程序就不能重定位,执行之外的程序时就会崩溃…
6、Norflash与Nandflash的读/写操作对比
1)nor
读出/写入以字节为单位,擦除以扇区(block/sector)为单位;
写入之前
可以从任意地址开始读出任意字节长度的数据并打印;
可以从任意地址开始写入任意字节长度的数据并打印;
从任意地址执行擦除操作都会自动完成对该地址所在的扇区的擦除;
不擦除直接写,虽然可以改写存储空间,但写入的都是乱码;
读内存:Norflash只需要CPU发出读命令和地址,等待Nor准备好数据,直接读需要的地址上的数据即可(刚上电或者重启Nor处于read存储单元状态);
问:片选的操作?是内存控制器自动帮助Nor的片选置位? 答:未知;
2)nand
读出/写入以字节为单位, 擦除以块(block)为单位;
可以从任意地址开始读出任意字节长度的数据并打印;
可以从任意地址开始写入任意字节长度的数据并打印;
不擦除直接写,虽然可以改写存储空间,但写入的都是乱码;
//从任意地址执行擦除操作都会自动完成对该地址所在的扇区的擦除;–未经验证;
读内存步骤:
读操作时选中片选,发出5个地址(2纵3行),等就绪然后读出,读结束时关闭片选;需要手动完成对片选CE的操作;
3)SDRAM
问:片选的操作?是内存控制器自动帮助SDRAM的片选置位? 答:未知;
7、对Nandflash读内存操作时,对于地址addr:
unsigned int addr; //长度是否足够?
int page = addr/2048; //0~2^11: page;
int col = addr & (2048 - 1); //2^11~2^21: col;
但是列地址有2个,行地址有3个; 数据位宽8bit?
答:unsigned int寻址长度4G,足够;
8、对Nand_init.c的功能增加
a) 可以打印所有读到的数据 按照:地址,长度?
b) 实现NAND测试菜单中的 [r] Read nand flash
c) 读OOB检测坏块, 改进nand_read实现碰到坏块就跳过 // lib_nand
答:坏块检测暂时未实现;
9、NOR,NAND,SDRAM的区别
1)flash闪存是非易失存储器, sdram是易失存储器
2)Nor擦除和写都是以block(扇区)为单位,先擦除后写,读写操作是以字节为单位的任意地址任意长度字节;
擦除地址:(必须?)扇区地址,整块擦除,无需擦除长度;
Nand擦除是以block(块)为单位,读写操作是以字节为单位的任意地址任意长度字节;
擦除地址:(必须?)扇区地址,擦除长度为1block长度整数倍,也是整块擦除;
3)Norflash能存程序也能执行程序; Nandflash能存程序但不能执行程序; SDRAM和SRAM都不能存程序,但能执行程序;
4)Norflash无需任何命令可以直接读(可用指针对地址循环加,读连续空间,然后打印);
Nandflash需要发两次命令和地址才能读(读连续空间,不可用指针循环加读,需先读出转存,然后打印);
5)nandflash擦除之后才可以写入,不然无效; 连续写入虽然可以改写,但是打印是乱码!
6)Nandflash擦除之后:I/O 0 =0 Successful Erase;
I/O 0 =1 Error in Erase;

注意:
当擦除Norflash代码区(特别是重定位及其之前的引导程序)时,主函数执行全局变量写操作的flash测试时死机(为什么?),并且复位之后也死机!
当擦除Nandflash代码区(特别是重定位及其之前的引导程序)时,复位之后死机!
具体还有别的现象的产生,可根据擦除破坏的内存地址和该地址所存储的代码具体分析。

猜你喜欢

转载自blog.csdn.net/weixin_39420903/article/details/81024935
今日推荐