6975|17

8

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

大于4KB程序如何运行? [复制链接]

大于4KB的程序烧写到NAND FLASH中,要运行的话,必须把超过4KB的代码复制到SDRAM中运行?请问一下,这个要如何复制?-%-294478-%-

最新回复

LZ用的什么片子啊。我怎么没有听说过不能大于4K啊。只知道8位机一般有64K的麻烦,因为只有16位的地址总线。32位机有4G的麻烦。  详情 回复 发表于 2010-4-3 10:07
点赞 关注

回复
举报

1672

帖子

0

TA的资源

裸片初长成(初级)

沙发
 
原帖由 shaoh.12 于 2010-1-14 17:37 发表
大于4KB的程序烧写到NAND FLASH中,要运行的话,必须把超过4KB的代码复制到SDRAM中运行?请问一下,这个要如何复制?

知道sdram的地址和nand flash的地址吧?从nand读出来,写到sdram的地址里面,就复制好了。
 
 

回复

2

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
一个单片机系统(51或者arm原来都是一样的) 有多个存储器,一般包括nor flash(可以片内执行),这个存储的一般是启动程序,或者叫做startup程序,对应于PC机的BIOS,单片机上电后,第一条指令就是从 nor flash 执行的,如果单片机本身的应用程序比较小,可以直接把应用程序写入norflash,如果单片机程序比较大,超过了norflash的大小,就出现了楼主的问题,这种情况下就是把应用程序写入nandflash(不能片内执行),此时,startup程序就起到一个boot and load的作用的作用,具体说来除了在第一种情况下的配置PLL,配置cache,配置sram或者sdram,配置外围器件之外,还有一个功能就是把nandflash中的数据拷贝到内存去运行,这个就是按照nandflash的寻址方式选址,然后读取数据,放入SDRAM或者sram即可,然后跳转到sram执行。当然,为了提高运行速度,应用程序比较小的情况下,也可以采用后一种情况的做法,此时只是把norflash中的程序拷贝到内存中运行而已。

赞赏

1

查看全部赞赏

 
 
 

回复

2130

帖子

0

TA的资源

五彩晶圆(中级)

4
 
原帖由 xuwangzhiye 于 2010-1-14 18:49 发表
一个单片机系统(51或者arm原来都是一样的) 有多个存储器,一般包括nor flash(可以片内执行),这个存储的一般是启动程序,或者叫做startup程序,对应于PC机的BIOS,单片机上电后,第一条指令就是从 nor flash 执行 ...

51有这种功能么,以前真没注意过,记得有内存分页,代码分页。不过吧代码从一个存储器调入另一个存储器的做法还真没用过,这样的话如何进行映射,51有这个模块么?
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(初级)

5
 

回复 沙发 richiefang 的帖子

假设程序10K来说,那么下载到NANDFLASH 0x0开始处,然后在程序中用代码把后面6K的程序复制到SDRAM是吗?哪必须要用到NAND FLASH来读取是吗??
谢谢指教
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(初级)

6
 
我用ADS开发工具,用ADS工具设置下载到0x0处的NANDFLASH,那么大于4KB时候,也可以用ADS设置下载到0x0处的NANDFLASH吗?然然后再通过运行前面4KB的程序,把4KB后面的程序搬到SDRAM,是这么吗?谢谢!
 
 
 

回复

1672

帖子

0

TA的资源

裸片初长成(初级)

7
 
原帖由 shaoh.12 于 2010-1-14 23:52 发表
假设程序10K来说,那么下载到NANDFLASH 0x0开始处,然后在程序中用代码把后面6K的程序复制到SDRAM是吗?哪必须要用到NAND FLASH来读取是吗??
谢谢指教

如果处理器不支持NAND Flash直接启动,则必须有一个可以直接启动的Boot loader搬移程序。
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(初级)

8
 
谢谢版主,请问boot loader是哪里来的?需要自己写吗?素我愚昧,我还不明白boot loader是怎么一回事?
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(初级)

9
 
就是说可以有2种方法?
 
 
 

回复

2130

帖子

0

TA的资源

五彩晶圆(中级)

10
 
一个系统启动后,芯片有初始指针,这个指针指向一个地址,这个地址的命令既系统的初始指令。不同芯片的初始地址不同,有的在0X00(头),有的在0X4000(中间),有的在0xFFFF(末尾)。
这里我们不针对任何一款芯片,仅仅说系统的启动。
对于一个芯片的硬件电路,有其支持的指令运行方式,可以是使用SPI,FLASH的方式,也可以是IIC方式,甚至使用TCP/IP方式,就是说只要你硬件支持你可以让你的芯片使用任何方式启动。不过,启动方式越复杂,逻辑越复杂,成本,故障率也越高。微电子工程发展这么多年,被认为最可靠的启动方式还是使用并行总线。数据总线,地址总线,控制总线的方式启动。数据又分为指令总线和数据总线两种。包括我们常见的所有系统几乎都是这样,X86,ARM,51。
系统从初始地址执行一条指令。如果这个指令非跳转指令的话,系统就进行地址加一,继续执行下一条指令,总之系统就是忠实的吧指令从起始一条一条的执行下去,直到最后一个地址,这个时候不同的芯片又有不同的处理,有的芯片执行到这个指令则停止系统运行,有的系统则循环地址到起始位置。
也就是说只要总线上有足够的地址,足够的指令,你可以吧你的所有代码放入挂在总线上的存储器中,这个存储器可以是RAM,ROM,FLASH。
只要是能在这个总线上工作的存储器,都可以正常的吧系统运行起来。
然而现实总让人无法如愿。首先,为了加快系统启动速度,启动时总线地址可能是8位的。也即系统在初启动时只能工作在8位地址状态。其次,并不是所有的存储器都能工作在我们需要的总线状态上。我们要求并行操作,要求读写速度跟上系统运行。可是没有任何一种存储器能满足我们的需求,RAM速度快,可是在上电时其实无数据的。掉电后数据也被清空。ROM数据掉电不会被清除,可是不能写入。EEPROM能写也能读,可是写的速度没有RAM快,而且ROM和EEPROM都无法做到大空间,在我们现在动则数兆的代码面前,其几十K的容量显得那么单薄。也许您要说FLASH,可是FLASH是需要块读写的。我们不能要求总线一次读一块然后执行一条命令吧。如果这样我想您回吧手中所有的电子设备都扔入离你最近的下水道。包括我们已知的硬盘,光盘,磁带,都是如此,都不能做到完全满足我们的要求。那么怎么办。我们就不用电子设备了么。还是我们龟缩在十几K的空间内挪腾。
不是。我们无法忍受这样。那怎么办,我们如何解决这种问题。好在我们的科学家是强大的。RAM不能保存数据,好办,上电后我把数据一点点COPY进去,FLASH需要驱动。也行。我把驱动放ROM里,ROM总能启动了吧。
那么现在思路就清晰了。当芯片启动时,地址指向ROM所在的空间。这样总能启动了吧,芯片可以正常的启动,工作在ROM中,ROM中有我们完成启动需要的大部分代码。比如SPI驱动,FLASH驱动,DMA驱动等。启动代码的作用就是运行驱动然后把FLASH或者硬盘中的代码调入RAM然后吧指针调入RAM入口完成系统启动。这部分就是PC中常说的BIOS,或者ARM中所谓的BootLoader。
我们知道ROM中有常用的大部分驱动。所以为了节省代码我们常常使用ROM中的已有系统驱动。可是ROM的速度又慢于RAM,所以PC BIOS中有一项的功能就是把BOOT自身写入RAM然后在RAM中运行。
说道这里还要说内存映射的问题。应为不管是FLASH还是硬盘空间都是巨大的。而RAM是狭小的。我们常常会看到某某系统有几百K的FLASH但只有十几K的RAM,那我们只能写十几K的代码么。不是的,BOOT或者芯片中有内存映射模块。我们的代码再被执行时仅仅是执行代码中的一部分,那么把代码分块,我们仅仅吧正在执行或将要执行的代码放入内存,我们就可以正常的运行我们的代码。这其中是又是个复杂的技术。这里就不过多讲了。
对于具有安全功能的芯片来说,BOOT中的代码是权限最高的代码,可以执行任何操作。也叫夫代码或系统级代码。有些操作,比如读取代码FLASH,比如清空芯片密码。
现在你知道大于4KB的代码如何运行的吧,你的代码并不是放在ROM区而是放在外部代码区,一般是FLASH。然后通过BOOT从FLASH中掉一块代码进入RAM。然后执行,当执行完一块后,我们再掉下一块进RAM,继续执行。就好像我们吃蛋糕。我们手中的盘子小,但是蛋糕很大,那我们就没法吃了么。我们把蛋糕切成小块,然后放一块进盘子,吃完再放一块,虽然我们只有一个小盘子,却可以吃完整个蛋糕,当然,首先你得保证你的消化系统够好胃口够大,不然当心笑话不良造成系统死机哦。

赞赏

1

查看全部赞赏

 
 
 

回复

21

帖子

0

TA的资源

一粒金砂(中级)

11
 
leang521斑竹,真是太崇拜你了!
 
个人签名上帝死了,众神都堕落了!
 
 

回复

17

帖子

0

TA的资源

一粒金砂(中级)

12
 
前4k的主要作用就是初始化CPU,然后进行COPY
 
 
 

回复

2130

帖子

0

TA的资源

五彩晶圆(中级)

13
 

回复 12楼 ffeige1984 的帖子

基本上是,包括现在很多高端8位机,也有了BOOTLOADER的概念,不过很多都是固定了的,你看不到。比如STC的启动代码,你之所以能通过串口烧写程序就得益于这段启动代码。
 
 
 

回复

249

帖子

0

TA的资源

纯净的硅(中级)

14
 
nandflash和norflash是有很大区别的,而且硬件结构也不一样,在寻址上不知道nandflash是如何实现的,nandflash是不是没有像norflash那样的地址线啊?
 
 
 

回复

2130

帖子

0

TA的资源

五彩晶圆(中级)

15
 
原帖由 zengjiangyi 于 2010-3-25 14:20 发表
nandflash和norflash是有很大区别的,而且硬件结构也不一样,在寻址上不知道nandflash是如何实现的,nandflash是不是没有像norflash那样的地址线啊?

你这个问题应该单独开帖询问
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

16
 
很好,学习而来。
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

17
 

经典

原帖由 leang521 于 2010-1-15 15:40 发表
一个系统启动后,芯片有初始指针,这个指针指向一个地址,这个地址的命令既系统的初始指令。不同芯片的初始地址不同,有的在0X00(头),有的在0X4000(中间),有的在0xFFFF(末尾)。
这里我们不针对任何一款芯片,仅 ...
好贴,收了
 
 
 

回复

18

帖子

0

TA的资源

一粒金砂(中级)

18
 
LZ用的什么片子啊。我怎么没有听说过不能大于4K啊。只知道8位机一般有64K的麻烦,因为只有16位的地址总线。32位机有4G的麻烦。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表