关于nor flash的写操作问题

skylkj 2008-05-22 12:57:29
原帖地址http://topic.csdn.net/u/20080521/16/8dd26e1c-2e9b-4277-877b-5f888125bc35.html?seed=2142211368


我们目前的系统是使用的三星44b0的平台,一块8M的sram,一块8M的nor flash,无操作系统

我现在要做的是为原本的这套系统添加一个"程序串口升级"的功能,因为用户不可能使用写片器或者jtag.

目前我能想到的办法有两种:
1. 在0地址放上我的一个boot程序,这个程序启动时候往串口发出请求,并等待一段时间.如果收到返回,则开始通过串口下载新的应用程序到sram.下载完成后,将sram的内容copy到nor flash上的指定位置.
但这样有个问题,就是我听别人说,nor flash如果有程序在运行,则不能做写操作,而我的boot是放在nor flash上运行的...

2. 使用uboot. 我现在有一个uboot,可以下载到机器上也能正常运行了. 我使用loadb的方法将程序(bin文件)下载到sram,再copy到0x30000地址上.但在通过uboot的bootm 30000运行时出现bad magic num的错误,导致应用程序无法运行.
我目前正在看uboot的资料,但不得要领. bootm的解释是运行压缩过的linux内核,但我们现在的系统并没有上操作系统.我使用go 30000运行,提示是在运行了,但机器并没有反映.同样的应用程序,如果我直接用jtag下载到0地址,开机是可以正常运行的.

还有,我现在用的这个uboot是以前一个项目的,当时用的norflash还是SST39VF1601(2MB)的.我不知道该如何该成适应s29gl064的.前面遇到的程序无法运行的问题也可能和此有关.


一下说的有点多.大致上的情况就是,之前我一直从事应用程序开发以及上位机程序开发.由于人事变动,现在赶鸭子上架,临时接手了这个工作.之前我并没有arm开发经验,也没写过nor flash的驱动.目前我正在查阅相关资料,也希望得到大家的帮助,因为时间还是有点紧迫的.
我的邮箱是yinlei@fujitsu-nfcp.com
...全文
532 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
skylkj 2008-05-22
  • 打赏
  • 举报
回复
多谢

我先去试试,有问题再来问哈
shuiyan 2008-05-22
  • 打赏
  • 举报
回复
你需要的功能在一般的设计中是ISP功能。步骤如下:

1) 将NOR划分成两个部分,第一部分存放ISP程序,第二部分存放客户应用程序,第二部分是允许客户更新的。比如按Block分,第一个或者前几个(比如4个)Block作为ISP程序放置并运行的空间,这个大小按照你的ISP程序大小决定。一旦你确定好之后,第二部分的地址就确定了。

2) ISP也是个正常的应用程序,也有汇编部分的初始化,直至C里面的main()函数,都是一样的。在ISP的main()里面,向串口发送命令并等待。

3) 如果得不到正确响应,就跳转到客户应用程序地址(也就是1中划分的第二部分的地址),以执行客户应用程序。

4) 若得到正确响应,就开始下载程序,并保存到RAM中指定位置,这个位置也是在ISP中定义好的,一旦确定就不会变了,除非你改动ISP。

5) 下载完成后,将客户应用程序占用的flash全部擦除(NOR必须先擦后写),然后将4中保存在RAM中的数据全部写到NOR中。

6) 5写完后,仍然像3一样,跳转到客户应用程序开始执行客户应用程序。

步骤很简单,你一步一步来做就行。先自己写一个ISP,能通过串口下载(任何)数据到RAM中,然后能将RAM中一个指定位置的任何数据写到NOR中。做好这些,就可以实现升级功能了,因为在ISP看来,程序其实也是一段数据而已。

All, Good luck!

21,597

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧