主题 : 关于系统上电后执行的第一条指令的位置 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 1491
精华: 0
发帖: 16
金钱: 160 两
威望: 16 点
综合积分: 32 分
注册时间: 2008-09-03
最后登录: 2009-07-29
楼主  发表于: 2008-09-22 00:47

 关于系统上电后执行的第一条指令的位置

板子上电后,是从0x0地址开始执行吗
如果是从0x0处开始执行,我有下面的疑惑
当启动模式设为从nand flash启动,按照手册上的存储器分配图,0x0开始的4kB空间是系统的sram,板子上电后执行的第一条指令怎么可能是

在sram中呢?毕竟sram中的内容断电后就没有了啊
我看过一些资料,说sram中0x0开始的4k里的内容是从nand flash里复制过来的,这么说,系统上电后最起码先执行了一段代码复制的命令,显

然这些命令不会在0x0处,那系统岂不是不从0x0处开始执行了吗
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
1楼  发表于: 2008-09-22 07:24
NAND Flash启动的模式下,复制数据的过程是在CPU跳转到0x0之前执行的,你可以理解为这是CPU内部固化的逻辑,但这仅限于S3C2440这种具体的实现。从这个角度上来说,可以认为CPU不是从0x0地址开始执行的。
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 1491
精华: 0
发帖: 16
金钱: 160 两
威望: 16 点
综合积分: 32 分
注册时间: 2008-09-03
最后登录: 2009-07-29
2楼  发表于: 2008-09-22 09:31
thank you

那sram里面4kB的代码是从nand flash 里复制过来的吗,如果是,这4kB代码是存储在nand flash具体哪个位置的呢
这4kB的代码是不变的吗,还是说可以通过JTAG重新烧写呢
[ 此贴被sunnydream在2008-09-22 09:38重新编辑 ]
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
3楼  发表于: 2008-09-22 09:56
NAND Flash的block 0的page 0的前4K, 这4K的数据你可以通过烧写NAND Flash改变,不需要通过Jtag
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 64
精华: 0
发帖: 41
金钱: 395 两
威望: 143 点
综合积分: 82 分
注册时间: 2008-02-02
最后登录: 2015-12-31
4楼  发表于: 2008-09-22 10:02
nand flash焊接到板子上去以后,如果要更改引导程序,可以通过软件在线更改;也应该可以通过cpu的jtag口进去更改.

引用第3楼kasim于2008-09-22 09:56发表的  :
NAND Flash的block 0的page 0的前4K, 这4K的数据你可以通过烧写NAND Flash改变,不需要通过Jtag
级别: 新手上路
UID: 1491
精华: 0
发帖: 16
金钱: 160 两
威望: 16 点
综合积分: 32 分
注册时间: 2008-09-03
最后登录: 2009-07-29
5楼  发表于: 2008-09-22 11:31
引用第3楼kasim于2008-09-22 09:56发表的  :
NAND Flash的block 0的page 0的前4K, 这4K的数据你可以通过烧写NAND Flash改变,不需要通过Jtag


你说可以不用通过jtag烧写,那应该如何烧写呢

是从norflash启动,进入supervivi后,选择其中某个命令执行吗,那是哪个命令呢

如我想写一段代码,从nand flash启动,加电后让4个led全部熄灭
编译链接该如何设置参数,最后生成的文件又该如何在线烧写到nand flash 的block 0 的page0 里面去呢(我不想通过jtag烧写,因为板子用外壳封装起来了,jtag口没有引出来,烧写很 不方便)
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
6楼  发表于: 2008-09-22 12:10
我只能告诉你最简单的方法是修改光盘里给出的viv的源代码,加入你要的东西。因为它本身已经被配置成NAND Flash启动了。你也不用担心编译链接的问题。按照原来build vivi的方法做就行了。

剩下的事情就是查手册,如何通过NOR Flash里的supervivi用你自己生成的vivi替换掉NAND Flash里的vivi镜像。但要注意这个修改了的vivi只是用作功能验证用,不要指望它可以和supervivi一样。
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."