zzfei90 发表于 2012-11-29 12:13:57

关于s3c2440从nand flash的疑惑

我知道2440从nand flash启动的时候会先由硬件把前4K的代码搬到片内的sram中去,然后从片内的sram开始运行,再把nand flash中的程序搬到外部sdram里面去,然后程序由内部sram跳到外部sdram去执行,这里我就有个疑惑,把程序从nand flash搬到外部sdram的时候,已经搬到内部sram的那4K还要搬吗?
还有一个问题,也是我最想问的问题,程序从nand flash搬到外部sdram后,中断向量表应该有两份吧,一份在片内sram(地址0x00000000)的起始地址处,一份在片外的sdram中(地址0x30000000),当发生中断的时候,PC会跳到地址0处,如果已经初始化了MMU的话,程序会跳到映射后的地址,也就是0x30000000处,这样的话,中断程序理所当然可以正常执行。但是,如果没有开MMU的话,程序跳到物理地址的0x00000000处,这里也有一份中断向量表啊,应该也能够正常的跳到中断函数去执行啊,可是为什么事实不行呢?手册上有说这4K的sram在启动后可以用作其他用途,但是我没有用啊,那内容应该还是原来的内容,那为什么不能正常跳到中断函数里去呢?问题在哪里?小弟用的是天嵌的开发板,前几天刚到手的。

cloudxxcloud 发表于 2012-11-29 12:21:57

帮顶,我也不懂

afengjiuling 发表于 2012-11-29 16:33:24

    {:dizzy:}

wuyongwang2345 发表于 2012-11-30 15:23:37

帮顶,我也想深刻理解一下nor flash和nand flash启动的区别,是、想深刻理解一下,求高手解答

willX 发表于 2012-12-1 01:05:11

我晕,楼主没有好好看2440的手册啊,bank0的位置是要按不同的启动方式区别的。

zzfei90 发表于 2012-12-1 09:06:45

willX 发表于 2012-12-1 01:05 static/image/common/back.gif
我晕,楼主没有好好看2440的手册啊,bank0的位置是要按不同的启动方式区别的。 ...

这个我知道啊,可是bootloader把程序搬到nand flash之后,sram的内容还在吗?

lgnativs 发表于 2012-12-1 09:20:07

同问,4K引导代码一般不知道后面加载的程序中处理中断的地址吧.

sunhaojie 发表于 2012-12-1 09:21:44

和楼主一样,我10月份买的天嵌的开发板,但是天嵌的教程实在不敢恭维,简单试验了一下开发板自带的ADS教程,那函数写的叫一个乱啊!我按照网上的方法移植到了MDK里面,初步可以,但是也有很多困惑。比如MDK,自带有启动代码,Nand flash的前4K可以自动拷进sram,自带启动代码可以将4K以后的拷进SDRAM吗?在Target 设置选项关于存储的地址,SDRAM需要特别留一片空间给可能拷进的nand flash的内容吗?疑惑太多了,所以最近一直啃ARM汇编,想着自己可以完全理解启动代码再继续往下走

zchong 发表于 2012-12-1 16:37:01

看代码不就知道了

willX 发表于 2012-12-1 19:14:54

zzfei90 发表于 2012-12-1 09:06 static/image/common/back.gif
这个我知道啊,可是bootloader把程序搬到nand flash之后,sram的内容还在吗?

作为bank0保持了。

zzfei90 发表于 2012-12-1 19:25:18

willX 发表于 2012-12-1 19:14 static/image/common/back.gif
作为bank0保持了。

嗯,那它的地址还是0x0吧,中断的时候会跳到这儿来吗?

error_dan 发表于 2012-12-1 19:25:27

那个4K的SRAM的用途是在启动的时候完全不知道外界环境的情况下先依靠CPU自身的SRAM把初始化外界环境的一段代码运行起来,最主要的作用就是初始化内存并且为bootloader后续工作驱动必要的硬件,运行完成之后外界环境已经是确定的了,这个时候它就没用了。

zzfei90 发表于 2012-12-3 15:43:10

问题已经解决一大半了,我看了看init.s里面的代码,也小小的学习了一个2440的汇编指令,目前已经知道要复制的代码是nand flash中的全部都复制到外部sdram中去,另外,启动代码是在ldr        pc, =copy_proc_beg这句之后从内部sram跳转到外部sdram去执行的,还不明白的是,
当发生中断的时候,如果已经初始化了mmu,那么pc指针会指向经映射后的0x18,那么如果没有初始化mmu,pc又会指向何处呢?照说是物理地址的0x18,也就是片内的4k sram,可是我在启动代码中的0x18处放了指令ldr pc, =HandlerIRQ,照说这句可以从内部ram跳到外部的sdram的HandlerIRQ去执行,可为什么不打开mmu的话还是不能进中断呢?

zzfei90 发表于 2012-12-3 15:43:26

问题已经解决一大半了,我看了看init.s里面的代码,也小小的学习了一个2440的汇编指令,目前已经知道要复制的代码是nand flash中的全部都复制到外部sdram中去,另外,启动代码是在ldr        pc, =copy_proc_beg这句之后从内部sram跳转到外部sdram去执行的,还不明白的是,
当发生中断的时候,如果已经初始化了mmu,那么pc指针会指向经映射后的0x18,那么如果没有初始化mmu,pc又会指向何处呢?照说是物理地址的0x18,也就是片内的4k sram,可是我在启动代码中的0x18处放了指令ldr pc, =HandlerIRQ,照说这句可以从内部ram跳到外部的sdram的HandlerIRQ去执行,可为什么不打开mmu的话还是不能进中断呢?

zzfei90 发表于 2012-12-3 15:43:41

问题已经解决一大半了,我看了看init.s里面的代码,也小小的学习了一个2440的汇编指令,目前已经知道要复制的代码是nand flash中的全部都复制到外部sdram中去,另外,启动代码是在ldr        pc, =copy_proc_beg这句之后从内部sram跳转到外部sdram去执行的,还不明白的是,
当发生中断的时候,如果已经初始化了mmu,那么pc指针会指向经映射后的0x18,那么如果没有初始化mmu,pc又会指向何处呢?照说是物理地址的0x18,也就是片内的4k sram,可是我在启动代码中的0x18处放了指令ldr pc, =HandlerIRQ,照说这句可以从内部ram跳到外部的sdram的HandlerIRQ去执行,可为什么不打开mmu的话还是不能进中断呢?
页: [1]
查看完整版本: 关于s3c2440从nand flash的疑惑