打印

崩溃!STM32+K9F1208U0C搞不定,高分求助!发现灵异现象!

[复制链接]
7611|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
z_no1|  楼主 | 2011-10-18 15:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 z_no1 于 2011-10-25 19:23 编辑

按万利开发板做了个板子,STM32F103ZE+K9F1208U0C,发现大量的坏块,用标准擦除程序,4096个块估计有300个有页擦不掉,而且是随机的,这次测是这些块,下次测是那些块。
擦除和写都有一个问题,操作完成了,去读回数据,有的扇区就不对,多读几次,就对了,但下次上电后经过校验的有的扇区又不对了,
这个片子工厂里其他同事也在用,配STC11L08,还算能用。所以应该不是质量问题。板子的延时加到了极点,如下,还是不行。
  p.FSMC_SetupTime =0x09;//0x1;
  p.FSMC_WaitSetupTime = 27;//0x3;
  p.FSMC_HoldSetupTime = 48;//0x10;
  p.FSMC_HiZSetupTime =    9;//0x1;
它和一片IS61LV5128AL共一个总线,
那个SRAM读写还正常。怀疑干扰,把速度也降了,没用。
p.FSMC_AddressSetupTime =    1;
  p.FSMC_AddressHoldTime = 1;
  p.FSMC_DataSetupTime = 2;
  p.FSMC_BusTurnAroundDuration = 1;
  p.FSMC_CLKDivision = 1;
  p.FSMC_DataLatency = 1;
  p.FSMC_AccessMode    = FSMC_AccessMode_A;
有大侠说要在读主和读付里加延时,也加了,还是一样。
    /*!< Calculate the size    */
    size = NAND_PAGE_SIZE +    (NAND_PAGE_SIZE    * numpageread);
    for(i=0;i<2000;i++);        //下完命令要有延时
    while(GPIO_ReadInputDataBit(GPIOG, GPIO_Pin_6)==0);
    /*!< Get Data into Buffer */   
    for(; index    < size;    index++)
    {
      pBuffer[index]= *(__IO uint8_t *)(Bank_NAND_ADDR | DATA_AREA);
    }
搞了一周了,实在是没辙了,求助!!!!!
沙发
z_no1|  楼主 | 2011-10-18 15:14 | 只看该作者
有什么标准可以确定是片子的问题么?
给个可用的程序?

使用特权

评论回复
板凳
yybj| | 2011-10-18 15:18 | 只看该作者
估计都去参加研讨会了:lol

使用特权

评论回复
地板
IJK| | 2011-10-18 15:24 | 只看该作者
用示波器来看波形,如果有逻辑分析仪就更好。可以用排除法看是不是硬件的问题,多拿几块板子进行检查

使用特权

评论回复
5
z_no1|  楼主 | 2011-10-18 15:26 | 只看该作者
现在在现场,除了催促和一台电脑外,啥都无啊!急啊!

使用特权

评论回复
6
airwill| | 2011-10-19 08:32 | 只看该作者
这类大容量的 NAND FLASH 都有这样的问题。
通常因为容量太大,不可能保证所有单元都是好的(太容易出现瑕疵了)。
所以在应用中应该进行测试(知道u盘为什么要量产了吧),然后把性能不好的或者坏的做标志,以后不再使用。

使用特权

评论回复
7
yinyangdianzi| | 2011-10-19 09:04 | 只看该作者
这是小容量的NAND吧。。。。
看LZ的片子是SLC的
如果质量上没问题。此片子肯定比MLC片子好!
然而STC+此芯片又能用。。这怎么解释?

使用特权

评论回复
8
IJK| | 2011-10-19 09:25 | 只看该作者
这是小容量的NAND吧。。。。
看LZ的片子是SLC的
如果质量上没问题。此片子肯定比MLC片子好!
然而STC+此芯片又能用。。这怎么解释?
yinyangdianzi 发表于 2011-10-19 09:04


确实是小容量、小页的NAND,看了一下它的datasheet,是SLC。一般来说这种SLC很少有坏块(常常某些block里面1个坏块也没有),当然前提是它必须是新的正品。

使用特权

评论回复
9
z_no1|  楼主 | 2011-10-19 17:31 | 只看该作者
也许,只是也许,同事用的没校验,我是对写入的单个文件再做CRC32校验的。
也许,只是也许,片子给我做测试写坏了,毕竟写了几天了,
有几个片子,22秒的超时时间都好多块老认为超时,如果认出是坏块也就算了,问题是写进去了也单个页校验通过了,过一阵子再读,就不对了。绝对不是一个位的错误,ECC算法加了,也测试过,算法是可以纠正单个位的错误的。
现在的临时解决办法是以空间换可靠性。 同时写4个备份,读的时候一个不行读第二个,第二个不行就第三个,就这样还有块读失败,就报废板子,先交了工再说,好在基本上文件都是只读的,只要不错,以后都不会错了。回公司再仔细研究吧,

很怀疑 “前提是它必须是新的正品。

使用特权

评论回复
10
IJK| | 2011-10-20 09:49 | 只看该作者
“片子给我做测试写坏了,毕竟写了几天了”

如果是新的正品,几天应该不会坏

使用特权

评论回复
11
byeyear| | 2011-10-20 11:00 | 只看该作者
怀疑上下电过程中的时序问题
在NE脚上加个10k上拉到电源

使用特权

评论回复
12
z_no1|  楼主 | 2011-10-20 16:55 | 只看该作者
回去慢慢研究吧!先结贴了。

使用特权

评论回复
13
z_no1|  楼主 | 2011-10-25 19:11 | 只看该作者
有些眉目了,发现只要页写入的第1个字节是0xff(有的板子bf,cf,df,ef也有此现象,写0xff就一定有),就会发生后面的一个字节被吞掉的现象。即写入 ff,01,02,03,04,05.....读出来就是ff,02.03,04,05.......。这个故障是可以重现的。可以通过软件绕过去,但有人知道为什么吗?

使用特权

评论回复
14
yinyangdianzi| | 2011-10-26 09:54 | 只看该作者
LZ,,我这边有原装进口的
需要的话,送你几片

使用特权

评论回复
15
zsz89757| | 2011-10-26 13:11 | 只看该作者
p.FSMC_SetupTime = 0x1;
  p.FSMC_WaitSetupTime = 0x3;
  p.FSMC_HoldSetupTime = 0x2;
  p.FSMC_HiZSetupTime = 0x1;

使用特权

评论回复
16
z_no1|  楼主 | 2011-10-26 18:32 | 只看该作者
回去拿示波器看。

使用特权

评论回复
17
hzj8300| | 2011-10-26 21:35 | 只看该作者
或许此总线先不要接其他的FLASH试是看看,同一总线用多片FLASH控制时序可能会打架

使用特权

评论回复
18
z_no1|  楼主 | 2011-10-26 22:38 | 只看该作者
这个总线上接了K9F1208和61LV1024

使用特权

评论回复
19
z_no1|  楼主 | 2012-1-31 15:52 | 只看该作者
把61LV5128拆了后,情况更严重了,发现是信号完整性问题,把
GPIO_InitStructure.GPIO_Speed        = GPIO_Speed_50MHz;
改成
GPIO_InitStructure.GPIO_Speed        = GPIO_Speed_10MHz;就可以了。

使用特权

评论回复
20
z_no1|  楼主 | 2012-1-31 15:55 | 只看该作者
是上下沿速度的问题,不是延时问题。所以改等待时间没啥用。

使用特权

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

本版积分规则

223

主题

2644

帖子

10

粉丝