打印

S3C2440的NAND_FLASH读写问题

[复制链接]
3778|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sxh924|  楼主 | 2008-11-25 16:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的项目应用要求将实时数据保存到NAND FLASH,原先项目在单片机上做的,外接的NAND FLASH,现在我用S3C2440实现这部分,板子从NAND FLASH启动,现在数据要存到我的NAND FLASH上(从后面的一些块开始保存),但遇到一个很怪的问题,我在定时器里设了一个标志位,当有实时数据要保存FLASH时,标志置位,开始写FLASH,但写完后,我的程序进不入定时器中断了.我想知道,我现在的程序是处于调试状态,最终要写到FLASH上,那么同时又在FLASH上写数据,会不会对我本身的程序有影响?

相关帖子

沙发
阿南| | 2008-11-25 17:48 | 只看该作者

re:不会有影响,因为代码是以普通的数据保存在NAND中的,

也是需要先读到SDRAM后才运行的。所以不是楼主理解的那样在NAND中直接运行

使用特权

评论回复
板凳
sxh924|  楼主 | 2008-11-26 09:09 | 只看该作者

我的RO段要在NAND中运行

我的RO段准备在NADN中运行,RW在SDRAM中运行.同时把实时数据保存到NAND中时会不会有影响?我用EEPROM试着把原先需要的数据保存了一下,没有问题.但用NAND保存时,出现了上面的问题.

使用特权

评论回复
地板
dld2| | 2008-11-26 09:15 | 只看该作者

NAND不能运行代码

使用特权

评论回复
5
awey| | 2008-11-26 09:28 | 只看该作者

NAND相当于硬盘,不能直接运行程序

使用特权

评论回复
6
PowerAnts| | 2008-11-26 09:39 | 只看该作者

Nand与读硬盘是一回事

都是逻辑寻址方式,而处理器的寻址是线性物理寻址

使用特权

评论回复
7
sxh924|  楼主 | 2008-11-26 11:13 | 只看该作者

有点不懂了.

NAND也是ROM,代码段RO放在ROM中运行有何不可呢?我看了资料,说是从NANDFLASH起动时,NADN的前4K会被自动载入内部SRAM,这4K代码需要将NADN程序拷贝到SDRAM,在执行完引导后跳到SDRAM执行.按这么说我用NAND起动时,代码必须要在SDRAM里吗?

使用特权

评论回复
8
sxh924|  楼主 | 2008-11-26 11:26 | 只看该作者

补充

如果按照各位的解释,那NADN相当于硬盘,就存了点程序,运行时都是调到SDRAM中,那么程序需要的NAND容量应该比较小,不过,现在开发板做的NADN都比较大.
那么RO_BASE应该设为SDRAM的地址了吗?我看到别的程序里RO_BASE设为0,就是说RO段的运行域为0,当然启动时从NADN运行前4K的确是在0处开始的.

使用特权

评论回复
9
biehoff| | 2008-11-26 11:42 | 只看该作者

RE

我是菜鸟  浅显的理解  
请问你 系统里有NORFLASH吗? NORFLASH可以运行程序的 NANDFLASH不可以
你说的RO_BASE 是0  
地址0x00000000处是什么FLASH啊  
要想运行NANDFLASH的程序是应该先COPY到 RAM里面去  COPY完再来句跳转嘛
本菜鸟认为 执行COPY 和 跳转 的代码都应该再NORFLASH里面完成

说说而已哈  你还是等高人指点····  别听我瞎掰

使用特权

评论回复
10
biehoff| | 2008-11-26 11:46 | 只看该作者

RE

你说的  
   NADN的前4K会被自动载入内部SRAM   
不需要任何程序干预  上电自动复制吗···?
怎么感觉有点寒··! 跟病毒似的

使用特权

评论回复
11
dld2| | 2008-11-26 11:48 | 只看该作者

楼上同学

他说的是S3C2410的一个功能。

使用特权

评论回复
12
sxh924|  楼主 | 2008-11-26 14:22 | 只看该作者

补充

我现在的理解是这样的:从NAND起动时,会自动将NAND的前4K加载到内部地址为0的SRAM运行,一般我们的程序都大于4K,那么从NAND起动就必须
将程序拷贝到SDRAM运行,把NAND里程序的RO+RO全拷贝到SDRAM的起始地址,初始ZI段,再跳转到SDRAM里运行。但我不明白的是通过什么指令跳转的?
不过,我有一点疑问,为什么别人的程序里是一次把RO+RW全拷贝到SDRAM?然后又再把RW段拷贝到SDRAM的另一个地址运行?为什么不先把RO段拷贝到SDRAM的起始地址,然后再把RW段拷到SDRAM的另一个地址运行?

使用特权

评论回复
13
biehoff| | 2008-11-26 14:31 | 只看该作者

晕了  不在瞎搅和了····

使用特权

评论回复
14
l0p0c| | 2008-11-26 17:41 | 只看该作者

我觉得要在网上多查写资料!

使用特权

评论回复
15
ancent| | 2008-12-1 15:17 | 只看该作者

学习中

学习中

使用特权

评论回复
16
lovecool| | 2008-12-1 20:11 | 只看该作者

re

看2440datasheet,nand启动说的很清楚,我COPY给你吧:

In recent times, NOR flash memory gets high in price while an SDRAM and a NAND flash memory is comparatively
economical , motivating some users to execute the boot code on a NAND flash and execute the main code on an
SDRAM.
S3C2440A boot code can be executed on an external NAND flash memory. In order to support NAND flash boot
loader, the S3C2440A is equipped with an internal SRAM buffer called ‘Steppingstone’. When booting, the first 4
KBytes of the NAND flash memory will be loaded into Steppingstone and the boot code loaded into Steppingstone
will be executed.
Generally, the boot code will copy NAND flash content to SDRAM. Using hardware ECC, the NAND flash data
validity will be checked. Upon the completion of the copy, the main program will be executed on the SDRAM.
STEPPINGSTONE (4K-BYTE SRAM)
The NAND Flash controller uses Steppingstone as the buffer on booting and also you can use this area for another
purpose.


。。。nand寻址是按块来的 而且是八根地址线。。。不能随机读取,所以不能运行代码。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

21

主题

59

帖子

0

粉丝