搜索
bottom↓
回复: 14

关于s3c2440从nand flash的疑惑

[复制链接]

出0入0汤圆

发表于 2012-11-29 12:13:57 | 显示全部楼层 |阅读模式
我知道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在启动后可以用作其他用途,但是我没有用啊,那内容应该还是原来的内容,那为什么不能正常跳到中断函数里去呢?问题在哪里?小弟用的是天嵌的开发板,前几天刚到手的。

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入114汤圆

发表于 2012-11-29 12:21:57 | 显示全部楼层
帮顶,我也不懂

出0入0汤圆

发表于 2012-11-29 16:33:24 | 显示全部楼层
   

出0入0汤圆

发表于 2012-11-30 15:23:37 | 显示全部楼层
帮顶,我也想深刻理解一下nor flash和nand flash启动的区别,是、想深刻理解一下,求高手解答

出0入0汤圆

发表于 2012-12-1 01:05:11 来自手机 | 显示全部楼层
我晕,楼主没有好好看2440的手册啊,bank0的位置是要按不同的启动方式区别的。

出0入0汤圆

 楼主| 发表于 2012-12-1 09:06:45 | 显示全部楼层
willX 发表于 2012-12-1 01:05
我晕,楼主没有好好看2440的手册啊,bank0的位置是要按不同的启动方式区别的。 ...

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

出0入0汤圆

发表于 2012-12-1 09:20:07 | 显示全部楼层
同问,4K引导代码一般不知道后面加载的程序中处理中断的地址吧.

出0入0汤圆

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

出0入31汤圆

发表于 2012-12-1 16:37:01 来自手机 | 显示全部楼层
看代码不就知道了

出0入0汤圆

发表于 2012-12-1 19:14:54 | 显示全部楼层
zzfei90 发表于 2012-12-1 09:06
这个我知道啊,可是bootloader把程序搬到nand flash之后,sram的内容还在吗?

作为bank0保持了。

出0入0汤圆

 楼主| 发表于 2012-12-1 19:25:18 | 显示全部楼层
willX 发表于 2012-12-1 19:14
作为bank0保持了。

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

出0入0汤圆

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

出0入0汤圆

 楼主| 发表于 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的话还是不能进中断呢?

出0入0汤圆

 楼主| 发表于 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的话还是不能进中断呢?

出0入0汤圆

 楼主| 发表于 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的话还是不能进中断呢?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 15:28

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表