【S3C2440】第15课、Norflash之学习笔记

Norflash的测试:
1、读数据:

md.b 0

2、识别Norflash(Read silicon ID命令)

		mw.w aaa aa
		mw.w 554 55
		mw.w aaa 90
读取ID:读0地址得到厂家ID —— C2H
		读1地址得到设备ID —— 22DAH 或 225BH
		RESET —— 给任意地址写 F0H

3、擦除Norflash上的某个扇区(Sector Erase命令)

	mw.w aaa aa
	mw.w 554 55
	mw.w aaa 80
	mw.w aaa aa
	mw.w 554 55
	mw.w 扇区 30

4、对某个地址进行操作(CFI命令读取器件的各种参数)
进入CFI命令:

		mw.w aa 98

	读参数:
		md.w xxxx  1

	写操作(先擦出再烧写):
		mw.w aaa aa
		mw.w 554 55
		mw.w aaa a0
		mw.w addr data

1、对于Norflash的读参数函数nor_data()为什么输出结果不一样?

unsigned int  nor_read_word(unsigned int base, unsigned int offset)
{
	volatile unsigned short *p = (volatile unsigned short *)(base + (offset<<1));
	return *p;
}
引用情景:
I.  blocks = (1 + nor_data(region_info_addr) + nor_data(region_info_addr + 1)<<8);		//输出:256, 521, 256, 7936;
II. blocks = 1 + nor_data(region_info_addr) + (nor_data(region_info_addr+1)<<8);		//输出: 1, 2, 1, 31

a. block_size = 256*(((nor_data(region_info_addr + 3))<<8) + nor_data(region_info_addr + 2));
b. block_size = 256 * (nor_data(region_info_addr+2) + (nor_data(region_info_addr+3)<<8));

原因:算数运算符±的优先级大于位运算符<<和>>

2、问题:Sector Erase操作时,擦除的是多大的flash空间呢?整个Sector/扇区block? 还是4个字节?每次擦除操作的擦除单元是多大?
答:应该是整个扇区(16k, 8k, 32k, 64K),验证就是整个扇区。但经过实际jz2440,mini2440开发板上机验证,证明擦除单元是block,可能是norflash的性能提升了。
3、CFI数据结构(数据库)的地址和含义表
地址:10H —— 39H;
4、对Norflash进行写入命令/命令序列(包括编程数据到设备和擦除内存扇区),系统必须将WE#和CE#驱动到VIL(逻辑低-低电平),
并将OE#驱动到VIH(逻辑高-高电平)
但是,为什么视频程序中对flash的芯片的操控没有涉及这些引脚的配置呢?
MINI2440开发板:
NOr:S29AL016J70TF102
Nand:
答:不知道,可能是BANKCON0中已经设置了。
5、条件判断的依据是什么?以前的知识是讲0是假非0就是真,其底层逻辑呢?
if(a[i]) {}
if(i) {}
是判断a[i] ?= 0 还是判断a[i] ?= '\0’呢?
是判断i ?= 0 还是判断 i ?= '\0’呢?
a[i] = 0;即a[i] = ‘\0’;

6、烧写异常!
Enter the string to write: wakakakawalalala //在输入第一个字符’k’时错输入为’l’,修改了一次!
Enter the address to read: 0x00004000
Data:
00004000h: 77 61 6c 08 6b 61 6b 61 6b 61 77 61 6c 61 6c 61 ;wal.kakakawalala
这是string_utils.c文件的bug, 以后注意!

7、进行Norflash和Nandflash读写擦除操作时,应屏蔽定时器中断!

猜你喜欢

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