S3C2440统一编址包含了GPIO,串口、I2C、SDRAM等设备类型,但是这个芯片Nandflash不是在统一编址范围内,Nandflash控制器是在统一编址中的。其中Nandflash的地址线也是和芯片地址线连接在一起的,其数地址数据线是否有效是需要通过统一编址控制Nandflash控制器中的片选型号中转使能这块芯片,进而保证对应的地址总线和Nandflash总线链接的线上数据是有效的。
对于S3C2440芯片,芯片片选型号模块大小是128M = 2^27,也就是共有27条地址总线在实际工作中生效。那么CPU实际发出的32位地址总线到达内存控制器以后,内存控制器确认了地址为某个模块,使能对应模块的片选型号,然后发出27为地址总线到对应模块连接的外部芯片。当然实际返回的或者写入的数据类型也是由内存控制器来完成。比方说写入字节,这个时候CPU发送的都是四字节数字读写,1字节的操作是在内存控制器完成,屏蔽掉了CPU复杂的工作内容,内存接口将CPU的读写复杂性降低到了最低。
1. 不同外宽外设
在实际硬件连接的过程中内存控制器外接设备硬件位宽可能有8bit,16bit或者32bit集中类型,实际线路连接的过程如下:
不同的地址线路连接主要是由位宽特性决定,比方说mov r0, #3; ldrb r1, [r0]读取地址3位置的一个字节这两个组合命令,不同位宽的硬件设备读写过程详细如下:
也就是说内存控制器根据连接的硬件读取对应的数值,在根据没有连接的另外几条线获取精确的直接位置。比方说8bit类型外设,连接精确到了第三个字节位置,直接取回数据,没有连接的硬件线路是0,也就是对数据不需要任何处理既可以返回对应想获取的数据。
同样的多种位宽的硬件设备,另外一个实例是去地址4读取四个数据,mov r0, #4; ldr r1, [r0]
1.2. 怎么确认外设地址情况
首先查看芯片片选链接位置确定基址,然后根据芯片链接线确定芯片范围。
Norflash | Net网卡 | SDRAM | |
基址 | 0(片选) | 0x20000000 | 0x30000000 |
地址线 | A20-A0,21条线 | A2和A0,2条线 | 实际中行17条地址线,列复用地址线,使用中先发出行地址,然后发出列地址 |
范围 | base + 0 ~ 0x1fffff | base + 0(000) ~ 5(101) | base + 0 ~ 64M |
1.3. 内存实际读写时序分析
SOC手册中给出了内存类接口的一个统一的读写时序接口,实际开发过程核心是配置外部存储对应的控制器读写时序结构。 具体配置过程中的参数值,需要查阅芯片给定的读写时间图,不同类型或者不同厂家时序和性能都是不同的,这种情况下参数也是不一样的,所以具体设置完全决定于实际芯片。
2. SDRAM
内存类接口设计的硬件很多,其中一类是重要的存储器。实际存储器类型也是千差万别,不同类型外部存储器性能也是不一样的,其中SDRAM内存是可以直接进行数据读写,支持LDR,SDR指令。因此,在实际中往往是用作程序的实行单元,完成程序代码的存储或者程序运行过程数据的保存位置,掉电以后内部数据就会直接消失。
2.1. SDRAM物理结构
关于内存类设备接口说明在1中给出,针对内存类SDRAM具体的物理实现是非常关心的。由此我们可以提炼出这种类型接口与协议相对应的时间参数配置和一个这种物理芯片特定的属性接口配置。
2.2. 读写
根据实际的内存物理结构,确定CPU通过内存控制器发出的数据读写命令实际过程。首先根据地质完成片选型号,然后根据内存类型拆分BAND地址、行和列地址,最后完成数据的度或者写操作。
2.3. S3C2440内存寄存器配置
(1)
(2)
(3)
(4)
(5)
其中CL对应内存芯片中ModeReister,配置以后就会发送给对应实际内存芯片。
读写效率问题后续讨论
3. 汇编内存驱动