cpu访问0x30000000地址上的数据时,只需要以下汇编指令:
MOV R1,#0x30000000
LDR R0 ,R1
LDR这条指令硬件上操作包括这写内容:
- 发出片选信号
- 发出bank选择信号
- 发出列地址,行地址信号
这些操作都是由2440中的存储管理器完成的
##########################################################################################################
问题:想访问一个芯片,需要哪些事情?
- 地址线(通过原理图)
- 数据线 8/16/32 数据宽度 (通过原理图)
- 时钟/频率(通过手册)
- 芯片相关的一些特性(比如 sdram:行地址(位数)、列地址(位数),bank(位数)) (通过手册)
在2440与内存连线时,根据内存位数的不同,连线也是不同的,因为如果内存是32的,那么一个地址就存在4个byte的数据,所以即使2440的 A0、A1与内存相连接,2440在进行访问时,每次读取了32位的数据
如下图:
而不能精确到一个字节或两个字节的访问,一次只能读4字节(每次读这么多也这么烦恼啊 呵呵刚开始好难理解)
所以A0、A1地址线是不需要连接的,同理
内存为16位时,A0地址线是不需要连接的
。具体如下图
内存 如果是32位的
16位
8位:
#####################################################################################################
访问使用SDRAM步骤:
配置寄存器:
- 位款
- 列地址、行地址
- 刷新周期
(2440可以接内存类似的外设数量:8个,因为2440有8条对外片选信号(8 个BANK))
BANK0-BANK5 BANCK6、BANCK7 比较特别,因为他们可以接sdram
sram | sdram | 网卡,norflash(RAMlike) |
速度快,贵,不需要刷新 | 便宜,操作复杂,刷新信号 用bank6-7对sdram有特殊的设置 包括:列地址的长度,刷新, | bank0-1-2-3-4-5上面都可以 |
#####################################################################################################
#####################################################################################################
2440的启动方式:
- norflash启动
- nandflash启动
norflash启动:从norflash的0地址开始
nandflash启动:从片内的sram启动,需要注意的是 sram的内容是nandflash中前4k的内容(硬件完成的)
- 上电,nandflash的前4k
- 关看门狗,初始化管理存储器
- 把nandflash的代码拷贝到sdram,继续执行
#####################################################################################################
#####################################################################################################
链接地址:
运行时,程序“应该”位于的地方。
nandflash的地址和sram的地址不是一回事。
#####################################################################################################