- JZ2440 S3C2440 ARM920T
-内置
Steppingstone (4K-Byte SRAM)
无rom
-外扩
EM63A165TS-6G:32MB/片,SDRAM,共两片
soc
The S3C2440A is developed with ARM920T core, 0.13um CMOS standard cells and a memory complier.
The ARM920T implements MMU, AMBA BUS, and Harvard cache architecture with separate 16KB instruction and 16KB data caches, each with an 8-word line length.
The integrated on-chip functions that are described in this document include:
Around 1.2V internal, 1.8V/2.5V/3.3V memory, 3.3V external I/O microprocessor with 16KB I-Cache/16KB D-Cache/MMU
External memory controller (SDRAM Control and Chip Select logic)
SOC端 内存(存储)控制器
内存控制器接口及内存映射
在 soc 内存控制器看来,sram,sdram,rom,srom 对于 soc存储控制器都是一样的,统一编制
cpu进行sdram数据读写
CPU发送一个地址
cpu根据地址发出片选信号(如果地址在sdram中,则片选sdram)
内存控制器做的事
1.它需要根据你外接的SDRAM进行设置(定义了这些通信格式之后才能找到相应的地址进行存储。)
外接芯片的位宽,容量,等,
还需要分出几个逻辑块(L-BANK)以及分行(ROW)列(Colum),
2.发出时序
#define MEM_CTL_BASE 0x48000000
看样子有13个寄存器
BWSCON BANKCON0 BANKCON1 BANKCON2 BANKCON3 BANKCON4 BANKCON5 BANKCON6 BANKCON7 REFRESH BANKSIZE MRSRB6 MRSRB7
引脚
------------------------- sclk
SCLK[1:0] SDRAM clock
SCKE SDRAM clock enable
------------------------- data and addr
DQ[0-15]
A[0-12]
------------------------- bank select
与BA0与BA1 连接的线,在s3c2440中没这个概念,直接用addr线代替
------------------------- control
nGCS[7:0] (General Chip Select) are activated when the address of a memory is within the address region of each bank. The number of access cycles and the bank size can be programmed. // nSCS[1:0] SDRAM chip select
nSRAS SDRAM row address strobe
nSCAS SDRAM column address strobe
nWE nWE (Write Enable) indicates that the current bus cycle is a write cycle
DQM0[3:0] Data Input/Output Mask: Controls output buffers in read mode and masks Input data in write mode.
#### 以下没用到
nWBE[3:0] Write byte enable
时序
设备端SRAM芯片(EM63A165TS-6G)
连线
代码
初始化
// 初始化13个寄存器,寄存器都是对soc侧控制器进行初始化的,并没有涉及到SDRAM的初始化
#define MEM_CTL_BASE 0x48000000
/* 3. 初始化SDRAM */
ldr r0, =MEM_CTL_BASE // r0 开始地址
add r3, r0, #(13*4) // 结束地址
adr r1, sdram_config // 配置数据开始地址 /* sdram_config的当前地址 */
1:
ldr r2, [r1], #4 // 将 配置信息存储到 r2,r1+4
str r2, [r0], #4 // 将 r2 配置到 r0,r0+4
// 综上,是将 配置信息放置到 MEM_CTL_BASE 地址中去
cmp r0, r3 // 看 r0 (是否)等于r3,等同于看配置(是否)完成
bne 1b // 没结束,则继续配置
sdram_config:
.long 0x22011110 //BWSCON 0x48000000
.long 0x00000700 //BANKCON0 0x48000004
.long 0x00000700 //BANKCON1 0x48000008
.long 0x00000700 //BANKCON2 ...
.long 0x00000700 //BANKCON3
.long 0x00000700 //BANKCON4
.long 0x00000700 //BANKCON5
.long 0x00018005 //BANKCON6
.long 0x00018005 //BANKCON7
.long 0x008C04F4 // REFRESH
.long 0x000000B1 //BANKSIZE
.long 0x00000030 //MRSRB6
.long 0x00000030 //MRSRB7
读写sdram
// 类似于这样来读写sdram.
// dest[i] 是 sdram 中的地址.
dest[i] = src[i];
/* 4. 重定位 : 把bootloader本身的代码从flash复制到它的链接地址去 */
ldr sp, =0x34000000
bl nand_init
mov r0, #0 /*src*/
ldr r1, =_start /*dest*/
ldr r2, =__bss_start
sub r2, r2, r1 /*len*/
bl copy_code_to_sdram
bl clear_bss
void copy_code_to_sdram(unsigned char *src, unsigned char *dest, unsigned int len)
{
int i = 0;
/* 如果是NOR启动 */
if (isBootFromNorFlash())
{
while (i < len)
{
dest[i] = src[i];
i++;
}
}
else
{
//nand_init();
nand_read((unsigned int)src, dest, len);
}
}
上一篇:jz2440烧写u-boot并使用
下一篇:嵌入式linux开发 (二十三) 内存管理(5) s3c2440内存管理
推荐阅读最新更新时间:2024-11-08 10:18
设计资源 培训 开发板 精华推荐
- 使用 ROHM Semiconductor 的 BA00BC0WFP-E2 的参考设计
- 带有 DRP w/Try.SRC 和 Type-C 插座的 PTN5110 USB PD 的典型应用
- 使用 NXP Semiconductors 的 TZA3014 的参考设计
- MC34072ADR2G 二阶高通有源滤波器的典型应用
- 便携式消毒机(苏工版本)
- OP295GSZ低功耗RTD放大器的典型应用
- 使用 Diodes Incorporated 的 PT8A3516 的参考设计
- OP295GPZ直接接入排列运算放大器的典型应用
- Cube-100_CH55X手动下载器
- 【立创开发板】基于梁山派的遥控平衡小车