打印

【急问】作程序存储器的Flash可否运行中对空闲扇区进行写操

[复制链接]
2637|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Quiza|  楼主 | 2007-6-27 22:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
手头上有个项目,原本Flash仅是作为程序存储器的,但后来用户要求加入一些参数保存功能,而且要得很急!目前板上没有任何ROM,只能把参数保存到Flash,但是改了程序后调试,总是在写操作时跑飞,百度一下搜索到如下结果:“不能同时在一片flash中执行,关键问题不是说他和CPU之间只有一条总线的问题,我们其实是可以在RAM的一个区域运行程序更改RAM的另外区域的。之所以Flash不能这样做是因为Flash在擦除和写入过程中有一段时间读出的数据并不是对应单元的数据,而是状态数据。而且通常是很长的一片(64K),甚至整个芯片地址范围都是。因此当CPU执行擦除或者写入后,读取Flash中的下一条指令时,读出的是Flash状态,而不是正确的指令,当然就飞了!”
请问高手,这段话对不对啊,现在的我应当怎么做才能既能执行指令又能写入参数呢?项目7月初就要交货,目前非常焦急,肯请大家帮忙!!!

相关帖子

沙发
平常人| | 2007-6-27 22:33 | 只看该作者

那段话正确。你需要把擦除和写入Flash的子程序放到RAM中执行

先把擦除和写入的子程序拷贝到RAM中,再调用RAM中的这段程序。

使用特权

评论回复
板凳
wangkj| | 2007-6-27 23:09 | 只看该作者

办法总是有的。

使用特权

评论回复
地板
Quiza|  楼主 | 2007-6-28 07:28 | 只看该作者

请问平常人兄

先把擦除和写入的子程序拷贝到RAM中,再调用RAM中的这段程序。
=============
小弟还是个新手,刚接手项目,请问这个具体应该如何做呢,能说说吗,十分感谢!!!CPU是44B0X

使用特权

评论回复
5
wangkj| | 2007-6-28 07:43 | 只看该作者

利用44b0x中的sram,把写flash的代码定位到这里

使用特权

评论回复
6
平常人| | 2007-6-28 07:59 | 只看该作者

44B0X没用过,但wangj说得对

你们老板有问题,让一个新手做一个这么重要、这么急的项目,都快交货了居然功能还没有完全实现,哪有时间进行各种测试试验?如何保证产品质量?

建议大家都不要买你们的产品。

使用特权

评论回复
7
wangkj| | 2007-6-28 08:05 | 只看该作者

估计老板也是一菜鸟,技术啥都不懂

可能是凭关系接的项目,这种项目卖出去,有问题也问题不太大。
这年头,这种项目多了。

使用特权

评论回复
8
Quiza|  楼主 | 2007-6-28 08:27 | 只看该作者

谢谢两位!

主要是原本做项目的突然走了,现在的确情况很急,我是个菜鸟,基础很差,但非常想做好,正在努力学习中,现有几个浅薄的问题如下,请大侠们指点一二:
1.44b0x中的sram和外接sram是否都可适用?
2.如何把Flash写操作的代码定位到RAM中的某个位置?
3.执行写操作时PC指针需要从Flash调转到RAM地址上去,这个过程怎么实现,是汇编吗?C能不能实现?
4.关于这方面的知识,看哪些书比较好?
望热心人不吝赐教,小弟感激不尽!

使用特权

评论回复
9
wangkj| | 2007-6-28 08:57 | 只看该作者

如果有外界sram最简单了

看看u-boot的代码,是从flash中把代码搬运到sram中执行,条件是你的sram要比flash大。这是最简单的解决问题的方法。
如果外部sram没那么大,那么你的写flash的代码部分必须在sram中执行。44b0/s4510有一个sram地址映射寄存器,可以利用这个寄存器。
这个问题比较难,需要很好的汇编技术或者编译器的了解。同时对硬件地址机制要比较清楚才好。

作项目的突然走了,这说明你们公司有问题。

使用特权

评论回复
10
high| | 2007-6-29 01:29 | 只看该作者

还可以这么考虑

使用分散加载方法,把读写flash功能的代码加载到sram上。

使用特权

评论回复
11
high| | 2007-6-29 01:31 | 只看该作者

相应的 要修改启动代码部分,把那段代码加载到sram上。

使用特权

评论回复
12
guang309| | 2010-4-7 16:59 | 只看该作者
高手指点下;小弟看了后有个疑惑!把ROM考到RAM里,然后那?也就是怎么样让程序在RAM里执行?需要加什么命令吗?这些命令在什么寄存器?拿51的说下!谢谢!

使用特权

评论回复
13
liuwei0908| | 2010-4-8 00:41 | 只看该作者
对于S3C44B0X,在CPU初始SDRAM后,把所有代码copy到SDRAM指定地址运行.
烧写Flash时,可以不关闭Cache, 但一定要保证PC值不能在Flash的地址范围内

使用特权

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

本版积分规则

48

主题

102

帖子

1

粉丝