转载:初识内存与SDRAM
文章目录
- 1.分析读写NOR FLASH的读写时序
- 1.1为什么需要通过编程来控制读写时序呢?
- 1.2 S3C2440如何能读写NOR FALSH的数据?
- 1.2.1NOR FLASH 读时序
- 1.2.2 设计一个程序去读NOR FLASH
- 1.2.3 程序具体配置
- 1.2.4 代码(在UART程序上添加)
1.分析读写NOR FLASH的读写时序
看一下S3C2440的数据手册中内存控制器这部分:
读时序:
写时序:
1.1为什么需要通过编程来控制读写时序呢?
因为2440可以接很多种不同型号的内存芯片,这些芯片的性能有差别,有些性能很强,只要我发出读信号,立马就可以读取内存数据,这样就可以把等待时间减少,加快内存读取速度,假如性能比较弱的话就需要去调整时间了,所以说根据外接不同的芯片需要设置不同的时序时间,而这个时间需要CPU和外接内存时序匹配才可以,所以还需要看外接内存NOR FLASH 的读取时序图。
1.2 S3C2440如何能读写NOR FALSH的数据?
答:使2440发出的读写时序,满足NOR FLASH 的读写时序。
在这里使用NOR FALSH的芯片型号是:MX29LV160DBTI,查看他的数据手册。
先来看几个名词,时序图的交流特性:
1.2.1NOR FLASH 读时序
1.2.2 设计一个程序去读NOR FLASH
我们的目的是需要2440的读时序能满足NOR FALSH的读时序、
为了方便,我们让2440同时发出片选信号,读信号,和地址信号。保持至少70ns的时间,也就是设置下图的Tacc大于70ns,
其他的都可以默认设置为0,即可满足nor flash的读取要求.
1.2.3 程序具体配置
第一步,设置BANKCON0寄存器(NOR FLASH 接在片选0)
第二步,位宽寄存器:采用默认设置
因为bank0为只读,通过OM[1:0]引脚硬件配置
1.2.4 代码(在UART程序上添加)
main.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | /* main.c */ #include "my_printf.h" #include "uart.h" #include "SetTacc.h" int main() { char c; Uart0Init(); puts("Enter the value of tacc:"); while (1) { c = getchar(); if(c == '\n') putchar('\r'); if(c == '\r') putchar('\n'); putchar(c); /* 回显输入语句 */ if (c >= '0' && c <= '7') SetTacc(c - '0'); /* 根据输入设置Tacc的值,当输入0-4时Tacc<8clock,程序无法工作 ;c-'0'是是类型转换*/ else printf("Error val,tacc should betwen 0-7"); } return 0; } /* SetTacc.c */ #include "s3c2440_soc.h" void SetTacc(int val) { BANKCON0 = val << 8; } |
SetTacc.h
1 2 3 4 5 6 | #ifndef _SETTACC_H #define _SETTACC_H void SetTacc(int val); #endif |