【韦东山旧1期学习笔记】10.S3C2440 Nor Flash实验(一)

访问Nor Flash还需要初始化时序吗

        我之前问过一些人这个问题,他们都是一副吃惊的表情,表示并没有这么一回事。实际上呢?还真的需要初始化。我们知道,当将拨码开关置SoC的OM[1:0]管脚为0b01时,S3C2440就不再将BANK0映射到片内SRAM了,而是正常访问BAKN0对应的片外设备。此时对于JZ2440来说,我们将nGCS0片选引脚接到了Nor Flash芯片上,所以此时CPU从0地址开始取指,nGCS0输出低电平,Nor Flash芯片被选中,读取的就是Nor Flash上的数据,也就是通常所说的从Nor Flash启动。
        那么问题来了,我们每次从Nor Flash启动时,并没有初始化内存控制器BWSCON和BANKCON0,那为什么还能正常访问Nor Flash芯片呢?不是说之前需要先进行初始化操作吗?
        如果是想要听最直接的答案,那肯定是SoC的默认上电时序就能兼容此款Flash芯片。如果想要知道详细的原因,以及怎样才能使得Nor Flash的访问达到正常的效率,那就要看一下下面的内容了。

MX29LV160DB芯片

我的开发板使用的Nor Flash芯片为MX29LV160DBTI-70G。其主要的性能参数如下所示:
在这里插入图片描述
通过上图 该款芯片的数据手册的首页我们可以得知,这是一款16位的Nor Flash芯片,容量为2MB。其最快访问周期为70ns,最小扇区擦除速度为0.7s,最小整块芯片擦除速度为15s,最大擦除写入次数为10万次。

MX29LV160DB的时序

交流特性

通过其数据手册,我们可以得到其交流特性数据表,如下图所示:
在这里插入图片描述

读时序图和写时序

在这里插入图片描述
在这里插入图片描述
上图时序的信号发出的先后顺序为:

  1. 先发送地址信号A
  2. 发送片选CE
  3. 发送读使能OE或写使能WE
  4. 数据总线上出现有效数据
  5. 释放信号

具体解释一下:
首先发出地址Addr后,要等待Tas(最少0ns)时间,地址数据才有效,之后才可以发出片选信号(CE#);
发出片选信号(CE#)后,要等待Tcs(最少0ns)时间,片选信号才有效,之后才可以发出读信号(OE#)或写信号(WE#);
发出读信号(OE#)或写信号(WE#)后要等待Toe(30ns)时间,数据总线上才出现有效数据;

我们通过MX29LV160DB的数据手册看到,Tas和Tcs都可以为0,那么说明地址信号、片选、读使能可以同时发出。为了简单起见,我们把地址(Addresses),片选信号(CE#),读信号(OE#)同时发出,然后让它们都等待70ns即可。

又因为Toh可以是0,所以说明地址、片选、读使能信号可以同时释放。

S3C2440 内存控制器时序

在这里插入图片描述
对于上图中出现的时间参数,解释如下:

  • Tacs: Address set-up time before nGCSn(表示地址信号A发出多久后才能发出nGCSn片选)
  • Tcos: Chip selection set-up time before nOE(表示片选信号nGCS发出多久后才能发出读使能信号)
  • Tacc: Access cycle(数据访问周期)
  • Tcoh: Chip selection hold time after nOE (nOE读使能信号释放多久后才能释放片选nGCS)
  • Tcah: Address hold time after nGCSn (片选nGCS释放多久后才能释放地址信号A)
  • Tacp: Page mode access cycle @ Page mode Page模式下的访问周期

S3C2440时序相关寄存器

通过查看S3C2440的用户手册可知,关于BANK0的时序,我们需要设置的寄存器有两个,一个是BWSCON(总线宽度&等待状态控制寄存器),另外一个是BANKCON0(BANK控制寄存器)。

BWSCON

在这里插入图片描述
通过表格内的描述我们可以看到,DW0位是只读的,它是由SoC的OM[1:0]两个管脚在系统硬件复位结束时的状态决定的。当选择Nor方式启动时,我们可以看到,OM[1:0]的管脚状态为0b01,所以其对应的数据总线为16bit,与Nor Flash芯片MX29LV160DB匹配。

BANKCON0

在这里插入图片描述
下面我们开始设置寄存器的参数:

  • Tacs: Address set-up time before nGCSn(表示地址信号A发出多久后才能发出nGCSn片选)
    该参数对应MX29LV160DB的Tas,可以设置为0ns,故此项设置为0
  • Tcos: Chip selection set-up time before nOE(表示片选信号nGCS发出多久后才能发出读使能信号)
    该参数对应MX29LV160DB的Tcs,可以设置为0ns,故此项设置为0
  • Tacc: Access cycle(数据访问周期)
    我们在数据手册首页上看到它的访问周期最快是70ns,而且读周期Trc也是70ns,所以设置Tacc>= 70ns
  • Tcoh: Chip selection hold time after nOE (nOE读使能信号释放多久后才能释放片选nGCS)
    该参数对应MX29LV160DB的Tch,可以设置为0ns,故此项设置为0
  • Tcah: Address hold time after nGCSn (片选nGCS释放多久后才能释放地址信号A)
    虽然没有直接对应的参数,但是通过MX29LV160DB的Toh(Output hold time from the earliest rising edge of address, CE#, OE#,当地址信号、读信号、片选信号撤掉后输出保持时间)为0ns,可以看出对于片选信号释放后,地址信号保持时间没有要求,故此项设置为0
  • Tacp: Page mode access cycle @ Page mode Page模式下的访问周期
    这一项不清楚是做什么用的,但是Nor Flash内只有sector、region的概念,使用不到这一项参数,按默认值0。

通过上述分析,只要保证 Tacc至少为70ns即可正常访问Nor Flash芯片。

当我们给开发板上电时,由于采用12MHz的外部晶振,所以HCLK=12MHz,时钟周期T=83.33ns,所以Tacc= T x 14 ≈1166.66ns,这个值很大,几乎可以满足所有Nor Flash芯片的要求,这也是为什么我们不做初始化操作也能正常从Nor Flash启动的原因。

当我们通过PLL配置系统时钟使得HCLK=100MHz之后,时钟周期T=10ns,所以按照默认值,Tacc = 140ns,仍然满足Nor Flash的时序要求。为提高效率,我们可以设置Tacc为8个clock即可满足时序要求。

BANKCON0 = (0x5 << 8);

Nor Flash 时序测试实验

我们可以通过设置Tacc的值,更改时序设置来观察读取Nor Flash上数据的效率高低。同时体验当不满足Nor Flash芯片时序要求时,无法读取Nor Flash上数据的现象。
通过之前的分析,当我们将Tacc设置在8个clock之下时,无法读取Nor Flash上的数据。所以实验代码如下所示:

void nor_init(unsigned char Tacc) {	
	BANKCON0 = ((Tacc & 0x7) << 8);
}
void dump_norFlash(unsigned int bytes) {
	//Nor启动方式下,0~2MB地址空间对应的都是Nor Flash
	char* ptr = (char*)0;
	int idx = 0;
	for(idx = 0; idx < bytes; idx++) {
		printf("0x%02x ", ptr[idx]);
		if(((idx+1) % 16) == 0) {
			//输出16个字节后换行
			printf("\n\r");
		}
	}
	printf("\n\r");
}

int main(void) {
	uart0_init();
	printf("%s\n\r", "Nor Flash Timing Sequence Test.");
	dump_norFlash(80);
	unsigned int Tacc = 7;
	while(Tacc < 8) {
		printf("Please input the Tacc Val(0~7): ");
		scanf("%d", &Tacc);
		printf("0x%x\n\r", Tacc);
		nor_init(Tacc & 0x7);
		dump_norFlash(80);
	}
	
	printf("Nor Flash Test is done.Bye.\n\r");
	return 0;
}

注意一定要把二进制程序文件烧写到Nor Flash上,并通过Nor方式启动,实验结果如下图所示:
在这里插入图片描述
在这里插入图片描述
我们发现,当设置的Tacc越来越小时,读Nor Flash出现了错误。即对于MX29LV160DB芯片来说,Tacc小于70ns时就无法读取Nor Flash上数据。

发布了25 篇原创文章 · 获赞 2 · 访问量 1067

猜你喜欢

转载自blog.csdn.net/BakerTheGreat/article/details/104446770