原创 终于把FLASH搞定,写出来给大家分享一下

2007-10-11 10:51 3417 14 17 分类: FPGA/CPLD

哥们我也是第一次正儿八经搞NIOSII,很多奇怪的问题都被俺碰上了,从头到尾一共花了将近一个月,终于把NIOS给活生生跑起来了。虽然浪费了很多时间,但经验值了提高了一些。
现在把FLASH的问题写一下给大家分享,希望能对各位有点帮助。
NIOSII的手册说的很明白,只支持具有CFI接口的FLASH器件。用AMD和INTEL的肯定没有错,都可以支持的。但是还有一种FLASH大家也常用的,那就是SST的。NIOSII对SST的支持就很让人不清楚了。我查阅flash programer user guide这个手册,看到SST39VF200-400-800是明确写出来支持的,但是现在大家用的都是160-320-640了,这些是不是支持呢。
我使用的是SST39VF6401B,SST网站上红字写着与AMD兼容,因此我选了这个。谁知道问题就出现在这里了,经过调试发现,SST39VF6401B工作完全正常,我自己写的代码可以读写它,但IDE的 flash progammer就是说什么地址空间不对(不是说没有CFI接口,说明识别到了),反正不支持。晕死。
后来我不死心,经过仔细查阅altera声明支持的SST39VF800的datasheet和我使用的SST39VF6401B究竟有什么不同。一番折腾后,找到了原因。这个原因就是SST这次特别推出号称与AMD兼容的6401B这个芯片把一条块擦除指令改成与AMD一样了。但是没有改彻底,CFI信息表那里没有把块定义改过来,于是如果按照CFI定义的块大小来擦除就出问题了。
原来SST还有一款是SST39VF6401,不带B字母的,那个是沿袭它自己的指令的,虽然不跟AMD兼容,但是与以前800是一样的,我断定肯定可以在NIOSII里使用。
大家注意选型的时候可要注意了,要不带B的那种,千万不要以为跟AMD兼容更好用。
不过,我不管那么多了,我换成AMD(现在叫SPANSION)了。

文章评论3条评论)

登录后参与讨论

用户1371621 2009-11-15 17:55

你好!我也是做电子设计的,想加你为好友,可以吗? 我的QQ:282357737

用户1042794 2007-10-16 11:38

想向你请教一下!

我用的芯片是DSPIC30F6014,片外FLASH为SST39VF400A(4MBIT)

要实现单片机读写FLASH的功能。

根据FLASH的读写时序编写了读写的程序,我的考虑是先写入一组数据到FLASH中,然后读出FLASH数据,读出后做一个简单的运算(取反),然后通过UART传送到PC上显示出来,从而判断是否读写正确。

问题是读写不成功时,怎么判断是写入不成功还是读出不成功???不知道大家有没有好的建议!

unsigned int ReadFlash ( long inADDR )
{  
        unsigned int value;
     
        DIR_ADDR_16L=0X0000;
        DIR_DATA=0XFFFF;
      
      
        WE=1;
        CE=1;

       DELAYnop
        OE=1;
        ADDR_16L=inADDR&0X0FFFF;
        
      
        CE=0;
        DELAYnop
        OE=0;
        DELAYnop   
   
        value=DATA;
        DELAYnop
      
        CE=1;
        OE=1;
        
        
        return value;
}

写程序:
void WriteFlash (long inDATA,   long inADDR)   /*WE  CONTROL WRITE A WORD */
{      
      
      
        DIR_ADDR_16L=0X0000;
        DIR_DATA=0X0000;
        
        OE=1;
        CE=0;
        
        ADDR_16L=0x5555;
        DATA=0x00AA;
        WE=0;
        DELAYnop
        WE=1;
      
        ADDR_16L=0x2AAA;
        DATA=0x0055;
        WE=0;
        DELAYnop
        WE=1;
        
        ADDR_16L=0x5555;
        DATA=0x00A0;
        WE=0;
        DELAYnop
        WE=1;
        
      
        ADDR_16L=(inADDR&0X0FFFF);
        
        DATA=inDATA;
        WE=0;
        DELAYnop
        WE=1;
        delay();   
      
}

不知道是我的写时序不对还是读时序不对???

 

 

ash_riple_768180695 2007-10-12 15:26

是不是你自己写的代码用的是与AMD兼容的擦除指令,块大小也与AMD擦除指令相同;而IDE通过读取CFI信息表,获得的是SST原来指令的块大小,与AMD是不同的。

相关推荐阅读
路边侬 2014-07-02 18:27
一种微电流测量方法的研究
1 引言 随着科技发展,极限条件下的试验测量已成为进一步认识大自然的重要手段,这些试验中往往测量的都是一些非常弱的物理量,比如弱磁、弱声、弱光、弱振动等,由于这些微弱的信号一般都是通过传感器进行电量...
路边侬 2012-12-03 12:44
C8051F单片机应用质疑三札
引言 一直被网上对C8051F的火爆宣传鼓动得心痒痒,最近鄙人开始大量采用此类单片机。不料期间遇到许多莫名的问题,纠缠了很久。今日终于脱困,把心得收获发出,与各位大侠分享,欢迎不吝指正。 ...
路边侬 2012-12-03 12:43
解决了一个COldFireV1的奇怪问题
 本人已是第二次使用MCF51JM64器件,没想到非常不顺利。刚焊好的板子上电后,CodeWarrior调试器BDM怎么也连不上板子。报告SYNC错误,反复尝试无果。测量电源电压一切正常。无奈之下...
路边侬 2008-03-05 18:11
注意对NVRAM的两种理解
通常NVRAM被等同于NVM,称为非易失性存储器。通俗地说,掉电不丢失数据的存储器都可以称为NVRAM,诸如EPROM、EEPROM、FLASH、FRAM(铁电存储器)等。因此NVRAM并非指某一种存...
路边侬 2007-10-11 11:25
关于热插拔的准确理解
关于热插拔Hot-Socketing,ALTERA的诠释是这样的。...
路边侬 2007-10-11 11:13
关于latch-up的概念
使用COMS芯片时,会遇到一个闩锁(latch-up)的概念,我一直比较模糊。现在摘录ALTERA的一段描述,以供参考。<?xml:namespace prefix = v ns = "urn:...
我要评论
3
14
关闭 站长推荐上一条 /2 下一条