之前的工作不是我做的,我只是现在接手,以前从来没有做过
使用的flash是s29gl,我接手的时候读flash是正常的,但没有写的功能.
我看了data sheet,对于flash的写操作不是很明白.读的话是直接读地址就可以的了,但写好像不行,还要有一系列的命令.....
data sheet上一个command definitions的表里列出了一系列的命令.我觉得应该是用"write to buffer"这个.
write to buffer有6个步骤:
1. 555 AA (往地址555写0xAA ?)
2. 2AA 55
3. SA 25
4. SA WC
5. PA PD
6. WBL PD
下面是注释
X = Don’t care
RA = Read Address of memory location to be read.
RD = Read Data read from location RA during read operation.
PA = Program Address. Addresses latch on falling edge of WE# or CE# pulse,
whichever happens later.
PD = Program Data for location PA. Data latches on rising edge of WE# or CE#
pulse, whichever happens first.
SA = Sector Address of sector to be verified (in autoselect mode) or erased.
Address bits A21–A15 uniquely select any sector.
WBL = Write Buffer Location. Address must be within same write buffer page as
PA.
WC = Word Count. Number of write buffer locations to load minus 1.
这里的SA,WC,PA,PD,WBL分别是什么?该如何计算?
比如SA,data sheet里面有好多张sector addresses的表,分别对应很多的 model Rx,我该用哪张?
我需要的功能很简单,就是往一个指定的地址写数据.因为以前从来没做过硬件驱动开发,最好有式例程序可以参考下,谢谢
分不够可以再加....
关注进展...sector一般64Kbyte,buffer一般32byte,你是用什么开发环境?
多谢关注
用的keil
平台是三星的44b0,无操作系统.
flash的操作需要一定的命令,一般来说写操作有两种:byte write和buffer write。按你的buffer write的步骤:
1. 555 AA --->这个是往flash片内0x555处写0xaa
2. 2AA 55 --->同理
3. SA 25 --->flash分为很多sector,檫除必须按扇区擦除或整块flash擦除,这步就是向你要操作的扇区内任意 地址写0x25
4. SA WC --->向要操作的扇区内任意地址写要写入的word count
5. PA PD
6. WBL PD
具体最好看下flash操作的介绍,另外上面的0x555,0x2aa等地址和0xaa,0x55等数据不是一定的,flash地址线,数据线和是否多flash并联都会有影响
1. 555 AA
2. 2AA 55
怎么看怎么像Spansion/SST之类的NOR的操作时序,而不是NAND。
而且lz说:“读的话是直接读地址就可以的了”,这也明显不是NAND的操作。
所以,我猜测,lz的44b0板子上,有一块NOR,进行boot的,而不是NAND。
如果是,请查找型号,正好Intel, Spansion, SST的NOR我都用过,写过程序,或许可以帮上忙。
的确是norflash,是我弄错了
之前我们有一块norflash和一块nand flash,后来新项目把nand flash去掉了,剩下的是norflash
spansion的s29gl064,8MB
我现在要做的是为原本的这套系统添加一个"程序串口升级"的功能,因为用户不可能使用写片器或者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的.前面遇到的程序无法运行的问题也可能和此有关.
感谢几位的回复,我的邮箱是yinlei@fujitsu-nfcp.com