JZ2440的启动方式有两种,一种是从NOR FLASH中启动,还有一种就是从NAND FLASH中启动。
如果从NOR FLASH启动,CPU会访问NOR FLASH的0地址,而0地址位于BANK0。
如果从NAND FLASH启动,由于NAND FLASH地址和数据共用总线,因此BANK0失效,此时0地址访问片内的SRAM,CPU会把NAND的前4K完全拷贝到片内SRAM,然后从0地址运行。
当2440上电时,NAND的前4K程序拷贝到SRAM中的0地址处,程序首先关闭看门狗,然后初始化存储管理器,最后将SRAM中的程序拷贝到SDRAM中,继续执行。如果NAND中的程序大于4K,那么SDRAM中的程序又会将NAND FLASH中的其它程序拷贝到SDRAM中。
.equ SDRAM_BASE, 0x30000000
copy_steppingstone_to_sdram:
@ 将SRAM的4K数据全部复制到SDRAM中去
@ SRAM起始地址为0x00000000,SDRAM中起始地址为0x30000000
mov r1, #0
ldr r2, =SDRAM_BASE
mov r3, #4*1024
1:
ldr r4, [r1],#4 @ 从SRAM读取4字节的数据,并让源地址加4
str r4, [r2],#4 @ 将此4字节的数据复制到SDRAM中,并让目地地址加4
cmp r1, r3 @ 判断是否完成:源地址等于SRAM的末地址
bne 1b @ 若没有复制完,继续
mov pc, lr @ 返回
关键字:JZ2440 启动方式
引用地址:
JZ2440开发笔记(7)——2440启动方式
推荐阅读最新更新时间:2024-11-13 07:33
移植u-boot-2010.09到S3C2440(六)—— SDRAM地址与容量的计算
对于 GEC2410 开发板,SDRAM 的物理起始地址是 0x30000000,结束地址是0x34000000,大小是64Mbytes。 我有个疑问?为什么SDRAM 的物理起始地址是 0x30000000,结束地址是 0x34000000,得出的大小是64Mbytes? 因为容量是用10进制显示的,故我们得把0x34000000-0x30000000=0x4000000转换成10进制。(转换方法见附) 4*16^6+0*16^5+0*16^4+0*16^3+0*16^2+0*16^1+0*16^0=67108864(Byte) 一般不要用十六进制转成二进制,二进制转成10进制方法算那个比较麻烦: 0x4000000=0
[单片机]
深入分析S3C2440启动代码中大小端问题
一、ADS1.2中关于大小端的设置以及对编译后的代码的影响 下面是一段代码在线段模式下编译,生成的二进制文件的内容 大端模式下编译,生成二进制文件的内容 根据上面的内容可以看出:它们的字节序是相反的,也就是说,ADS1.2中对大小端的设置会影响最终生成的二进制文件的字节序。 二、S3C2440启动代码中与大小管相关的代码 Option.inc中相关代码 view plain copy print ? GBLL ENDIAN_CHANGE NDIAN_CHANGE SETL {FALSE} GBLA ENTRY_BUS_WIDTH NTRY_BUS_WIDT
[单片机]
JZ2440:时钟设置
这一节的目标是对板子上的时钟有一个初步的了解,并且能通过初步设置,为我们接下来的程序做准备。 1. 板子上的基本资源: 板载晶振12M 主时钟源和 USB 时钟源都是晶振 2. 手册中的相关项(按时钟进入的方向): 2.1 时钟的整体结构: 2.2 OM : 从图中我们可以看到OM 起到可选择的作用(效果同三八译码器): 注意: 1.虽然MPLL在复位后就开始, MPLL输出 (Mpll) 并没有作为系统时钟, 直到软件写入有效值来设置MPLLCON 寄存器。 在设置此值之前, 是将外部晶振或外部时钟源提供的时钟直接作为系统时钟。 即使用户不想改变MPLLCON 寄存器的默认值,用户也应当写入与之相同的
[单片机]
s3c2440学习之路-008 uart实现printf函数
1.基本原理 因为程序目前处于裸板阶段,只能输出字符串,没有C语言的printf函数可以调用。但是在调试程序时,想像C语言一样调用printf来调试,因此只能自己来实现了。 C语言中,printf函数的原型为: int printf(const char *format, ...); 1.1 可变参数 … 参数有2个, “const char *format” 和 “…”,这个“…”就是可变参数,下面先讲解一下如何识别这个可变参数。 参数的传递会顺序的放到栈里面,而printf函数可获取的参数只有 “const char *format” 和 “…”,不过format刚好指向了第1个参数的首地址,因此可以通过form
[单片机]
s3c2440头文件之2440lib.h
//=================================================================== // File Name : 2440lib.h // Function : S3C2440 // Date : February 26, 2002 // Version : 0.0 // History // 0.0 :Feb.20.2002:SOP : Programming start // 0.01:Mar.29.2002:purnnamu: For Sleep_wake_up, the START... label is added //==================
[单片机]
jz2440裸机开发与分析:串口编程5之串口实现printf
部分重要代码: main.c #include s3c2440_soc.h #include uart.h #include my_printf.h int main(void) { unsigned char c; uart0_init(); puts( Hello, world!nr ); my_printf_test(); while(1) { c = getchar(); if (c == 'r') { putchar('n'); } if (c == 'n') { putchar('r'); }
[单片机]
基于TQ2440的linux-2.6.30.4内核移植
移植环境 CPU:S3C2440 交叉编译器:arm-linux-gcc-4.3.3 虚拟机系统:Ubuntu12.04 参考资料:《天嵌科技linux移植手册》 移植步骤 1、获取内核源码 网址:http://ftp.sjtu.edu.cn/sites/ftp.kernel.org/pub/linux/kernel/ 找到linux-2.6.30.4压缩包下载即可,然后拷贝到虚拟机中解压 2、在系统中添加对ARM的支持 进入内核源码根目录 Makefile中,修改 ARCH = arm CROSS_COMPILE = arm-linux- 3、修改平台输入时钟 修改内核源码 arch/arm/mach-s3c2440
[单片机]
ARM2440ddr.h文件解读
板子上电后就会从这里开始执行,主要完成基本初始化,还有判断是从nor还是nand启动,再实现把程序搬到SDRAM当中,在搬运成功后再跳到main函数里面执行。 我们现在开始来看看它的具体代码吧! GET和INCLUDE的功能是相同的,功能都是引进一些编译过的文件。 GET option.inc GET memcfg.inc GET 2440addr.inc 定义SDRAM工作在Reflesh模式下,SDRAM有两种刷新模式:selfreflesh,autoreflesh。后者是在其使用过程当中设置的。 BIT_SELFREFRESH EQU (1 22) 下面是对arm处理器模式寄存器对应的
[单片机]