一 、基本概念:
1、内存控制器:接收CPU发出的地址,(设置片选信号)选择与地址(段)对应的模块,并进行数据传输。内存控制器根据不同的地址地址范围,发出不同的片选引脚,只有被片选引脚选中的芯片才能正常工作,不被选中的芯片就像不存在一样,不工作。
2、编址与片选:
①、GPIO/门电路接口、协议类接口、内存类接口都为 CPU 统一编址。
②、片选:每个片选信号可以选择的空间是 2^n。内存控制器根据地址范围,片选相应 bank,并将地址转化为n位。
③、Nand Flash 地址线没有连接到CPU,不参与统一编址。但它的数据线也接到了数据总线上。为了防止干扰,它有一个片选信号(CE)。CPU访问时,Nand Flash 控制器片选到 Nand Flash,让其接收数据总线上的数据。
3、如果内存接口使用1个8bit芯片,则地址线是一一对应的。如果16位内存芯片是由2个8位芯片组成,则CPU发出的地址线会错一位,CPU发出的地址A1接到芯片的A0.以此类推。这样能确保CPU发出的地址能正确定位到特定的位数上,具体是哪个芯片则由控制器选择。
二、连接不同位宽的设备:
1、8个bit组成一个字节,字节是计算机的最小的存储单位,因此我们读取数据肯定都是8bit的倍数。接到芯片上的引脚用来确定读取芯片上的哪一个单元的数据,把这个单元的数据返回给内存控制器,内存控制器会根据没有连接芯片的引脚,来确定返回哪一个单元的数据给CPU,这种接法是为了内存控制器能正确读取到数据。
2、8bitROM:每次读写最小单位为 8bit。0地址是第一个8bit,1地址是第二个8bit;CPU发出的命令是读取地址为3上的数据,即A0和A1都为1,8bitROM的A0和A1收到的也都是1,于是找到了ROM上地址为3的8bit数据,包含了我们需要的数据。
3、16bitROM:每次读写最小单位为 16bit。0地址是第一个16bit,里面有两个8bit数据;CPU发出的命令是读取地址为3上的数据,即A0和A1都为1,16bitROM的A0和A1分别收到的是1和0,于是找到了ROM上地址为1的16bit数据,包含了我们需要的数据,最后内存控制器再帮我们挑选出所需的8bit数据。
4、32bitROM:每次读写最小单位为 32bit。0地址是第一个32bit,里面有四个8bit数据;CPU发出的命令是读取地址为3上的数据,即A0和A1都为0,32bitROM的A0和A1收到的都是0,于是找到了ROM上地址为0的32bit数据,包含了我们需要的数据,最后内存控制器再帮我们挑选出所需的8bit数据。
转自韦东山博客5、怎样确定芯片的访问地址:①、根据片选信号确定基地址。②、根据芯片所接地址线确定范围。
三、SOC中设置内存控制器(某些寄存器根据芯片手册设置)
1、位宽和等待控制寄存器:
①、启动/禁止SDRAM的数据掩码引脚。
②、是否使用存储器的WAIT信号,通常设为0。
③、相应BANK的位宽。
2、BANK控制寄存器:
①、设置BANK外接的是ROM/SRAM还是SDRAM。
②、行地址和列地址间隔多长时间,看芯片手册。
③、SDRAM的列地址位数,看芯片手册。
3、刷新控制寄存器:
①、禁止/开启 SDRAM 刷新功能。
②、SDRAM的刷新模式,0=CBR/AutoRefresh,1=SelfRefresh(一般在系统休眠时使用),一般设置默认值。
③、根据公式设置刷新计数器。
4、BANKSIZE寄存器:
①、禁止/支持ARM核突发传输(推荐支持)。
②、是否使用SCKE信号令SDRAM进入省电模式(推荐使用)。
③、(时刻/仅在访问SDRAM期间)发出SCLK信号(推荐后者)。
④、设置 bank 大小。
四、内存SDRAM的初始化
1、SDRAM模式设置寄存器:设置CAS延迟,表示发出行、列地址后,等多久才返回收到数据。发出Bank地址、发出行地址、发出列地址,之后得到数据。
具体情况看芯片手册,和内存指南。https://blog.csdn.net/thisway_diy/article/details/79389530
网友评论