【S3C2440】第12课、内存控制器与SDRAM之学习笔记

第一部分:第十二课、内存控制器学习过程中的问题
第二节、CPU和不同位宽设备的连接

1、网卡Net,只接了一个LADDR2一个地址线,但最终也会用到LADDR0来分辨读取的数据是高8位还是低8位,不关心LADDR1,为什么?
若不关心LADDR1,可寻址:0x2000 00_0 —— 0x2000 01_1,即4字节空间?
考虑寻址空间时,加上LADDR1不就可以寻址:0x2000 0000 —— 0x2000 0111,即8字节空间吗?

△此说法应该合理?假设原因:SDRAM用到的地址线:A2-A14, A24, A25共17条地址线,而且SDRAM确实是64M大小(两个32M大小的SDRAM组成)。
答:位宽指的是内存类芯片的数据总线宽度,net的数据总线宽度为16bit; 空间大小不知
补:BANK0  总线宽度——BANK0(nGCS0)的数据总线应当配置为 16 位或 32 位的宽度。因为 BANK0 是作为引导 ROM 的 bank(映射到 0x0000_0000),应当在第一个 ROM 访问前决定 BANK0 的总线宽度,其依赖于复位时 OM[1:0]的逻辑电平。
 

第三节、以Norflash为例,分析内存读写操作的时序图

1、2440芯片同时发出CE#, WE#, OE#, Address,并设置BANKCON0寄存器,为什么程序没有设置CE#, OE#, Address?

答:设置了,1)相应信号在Norflash的实物引脚(开关):内存控制器根据CPU发出的不同的地址范围,发出不同的片选引脚(Nor/Net/sdram)nGCS_x, (nand不在此列,但Nandflash的数据线接到了数据总线,为防止干扰,它也有一个片选信号(CE),当CPU访问Nandflash时Nandflash控制器才会片选Nandflash,让其接收数据总线上的数据。)相当于设置了CE#; 内存控制器根据CPU的指令的读取/写入操作设置LnOE、LnWE,相当于编程WE#, OE#。

    2)通过设置BANKCON0寄存器,设置了BANK0的访问周期Tacc≥80ns, Tacs、Tcos、Tcoh、Tcah、Tacp、PMC为0,即设置了信号CE#, WE#, OE#, Address的可编程访问周期及相互间的时序。

2、 Norflash启动时,

代码:     BANKCON0 = i<<8; 
可否替换为:BANKCON0 &= ~(7<<8);BANKCON0 |= (i<<8);   LED的流水速度会变化吗?为什么?

实验结果:串口工具调试打印界面可以➨ 

a)输入数字:0~7,现象1:LED不会流水(若初启动不会亮);且串口调试打印界面死机;(现象等同问4中0≤Tacc≤3 时的现象)

b)输入数据: 8/9,现象2:(串口工具打印界面)The Tacc val is error!
The Tacc val should between 0-7!
Enter the Tacc val▒▒
假设:BANKCON0除了设置Tacc外,还需要设置了别的参数,只不过这些参数都是0.
答:实验结果的确验证了假设,BANKCON0除了设置Tacc外,还设置了且必须设置的参数Tacs、Tcos、Tcoh、Tcah、Tacp、PMC为0。此回答,即解释了问题1,2的中的现象。因此,代码:BANKCON0 = i<<8;  替换为:BANKCON0 &= ~(7<<8);BANKCON0 |= (i<<8); 
不成立!

3、视频源码烧写到Nandflash演示情况:输入0时(即BANKCON0寄存器Tacc =0)LED灯继续闪烁啊,为什么?

答:应该把拨码开关打到Nor端,且程序下载到NORFlash; 否则,程序直接在SRAM运行;

是否证明:SRAM在CPU发出地址后即可立即提供数据给CPU?是否SRAM的性能极强?启动读/写操作提供数据的时间为0?


4、 同一个程序,使用默认数据访问周期Tacc,即不对芯片的默认数据访问周期Tacc进行操作和优化:
下载到Nandflash的LED闪烁极快,流水15次耗时3.5s左右(每次流水间隔0.23s),其结果不随BANKCON0设置的而变化; 
下载到Norflash的LEd闪烁频率极慢,约流水15次耗时12s左右(每次流水间隔0.8s)走一下;为什么?
答:维基百科资料:
● NOR的读速度比NAND稍快一些。
● NAND的写入速度比NOR快很多。
● NAND的4ms擦除速度远比NOR的5s快。
● 大多数写入操作需要先进行擦除操作。
● NAND的擦除单元更小,相应的擦除电路更少。
个人总结:流水灯程序的本质是在Norflash中不断改写并判断变量i、l的值,然后再不断改写2440芯片的寄存器GPFDAT4,5,6的值。
其中,涉及内存读写,所以Norflash比Nandflash的程序运行速度要慢些,此结论对否?

5、自制的LED程序,功能:流水灯轮流亮15次,停止循环; 
实现与现象:a)当在 0≤Tacc≤3 时,LED不会流水;且串口调试打印界面死机;??????????????
b)当在?——4≤Tacc≤7 时,LED灯流水亮;且数越大延时越大;
Tacc = 4 = 6T_hclk = 60ns时,流水灯走完15次,耗时6.9秒; 注:流水灯此时仍可以工作
Tacc = 7 = 14T_hclk = 140ns时,流水灯走完15次,耗时12.6秒;
c)当不设置BANKCON0时,流水灯走完15次,耗时11.8秒;
综述,1)本JZ2440开发板的Norflash芯片的数据访问(读/写)周期Tacc在必须大于60ns,包括CPU从Norflash读指令,否则程序将会卡死,无法执行任何读/写数据访问操作。
 2)BANKCON0 的Tacc的默认值的确是0b111,即Tacc = 14T_hclk = 140ns;且若无程序改变,Norflash的数据访问周期Tacc仍将保持140ns不变。

问题:不设置BANKCON0和设置为BANKCON0 &= ~(7<<8);BANKCON0 |= (i<<8);的区别?

******************************************************************************************************************************************************************************************************************************************************************

第二部分:复习总结

1、根据电路图,如何确定(片外)芯片的访问地址?
答:1)根据片选信号确定基地址base; 2)根据芯片所接的地址线确定范围addr;
如下:
nor: 基地址:0x0;         地址范围:0~0x1fffff; bank0 空间大小:2M byte;  (数据总线)位宽:16bit
net: 基地址:0x2000 0000; 地址范围:0x2000 0000~0x2000 0005; bank4 空间大小:6byte? 不是8? 位宽:16bit
sdram: 基地址:0x3000 0000; 地址范围:0x3000 0000~0x33FF FFFF; bank6 空间大小:64M byte         位宽:32bit


sram(nor): 基地址:0x40000000; 地址范围:0x4000 0000~0x4004 0000; 空间大小:4K byte; 位宽:不知
sram(nand): 基地址:0x0; 地址范围:0x0 ~0x2004 0000; 空间大小:4K byte; 位宽:不知

nand: 不在CPU统一编址范围内; 空间大小:64M byte; 位宽:
Norflash是静态内存;
Nandflash和SDRAM是动态内存;
SDRAM是同步动态随机存储器,同步是指其时钟频率和CPU前段总线的系统时钟频率相同,并且内部的命令的发送和数据的传输都是以它为基准; 
动态是指存储阵列需要不断的刷新来保证数据的不丢失; 随机是指数据不是线性依次存储,而是自由指定地址进行数据的读写。


2、2440片内特殊功能寄存器地址范围:0x48000000——0x5B00001C;
起始:存储器控制器——BWSCON: 0x48000000;  终结:AC’97音频CODEC接口寄存器——AC_MICDATA: 0x5B00001C
3、内存类(片外)设备和2440芯片的连接引脚有五种:addr, data, LnOE, LnWE, nGCS0;
4、内存控制器用来将CPU的指令拆解成地址、数据、读/写命令并传达给内存类外设,如:Norflash, SDRAM, DM9000;
其内部特殊功能寄存器功能如下:
BWSCON是总线宽度和等待控制寄存器;
BANKCON0寄存器用来配置Norflash的(读/写)访问周期;

5、运行程序时,程序运行期间使用了Norflash/Nandflash+SRAM,SDRAM;只有SDRAM需要进行预先配置,在使用Nandflash时当程序超过4K后Nandflash也需要进行预先配置;
难道Nor/sram/Nand的使用不需要配置吗?
答:1) 使用SDRAM需要配置BWSCON; BANKCON6; BANKCON7; REFRESH; BANKSIZE; MRSRB6; MRSRB7等七个寄存器之后才可使用;
2) 使用Norflash需要配置BANKCON0一个寄存器,设置其访问周期Tacc=80ns,若不设置将自动使用默认BANKCON0的值,Tacc=14HCLK=140ns;
3) 使用Nandflash,S3C2440A引导代码可以在外部NAND Flash存储器上执行。引导启动时,NAND Flash 存储器的开始 4K 字节将被加载到 SRAM 中并且执行加载到 SRAM 的引导代码。通常引导代码会复制 NAND Flash 的内容到 SDRAM 中。通过使用硬件 ECC,有效地检查 NAND Flash 数据。在复制完成的基础上,将在 SDRAM 中执行主程序。并且,当程序大于4K时,需要设置
6、其他
1)程序可以直接在Norflash,sram,SDRAM上运行,而不可以在Nandflash上运行。
2)Norflash可以像内存一样读,但是写需要一些特殊的指令操作解锁之后才可以写操作。但这指的是全局变量,静态变量之类存放到.data段的变量; 
这并不包括局部变量,寄存器,局部变量分配在sram中,寄存器的存储空间在2440芯片中,对存储空间的操作均不在Norflash上,对否?
3)CPU发出的地址/指令可以直接到达SDRAM、Nor、SRAM、Nandflash控制器; 但不可直接到达Nandflash。
4)对于Norflash之Read操作: 1BusCycle  RA  RD
RA=要读取的内存地址;  RD=要在RA位置读取的数据。
因此,对于Norflash可以直接在上面运行程序,但是栈区需要设置到SRAM的顶端,以便存放局部变量;


 

猜你喜欢

转载自blog.csdn.net/weixin_39420903/article/details/80635264