打印

我有这么水?W25X系列的Flash写status出错

[复制链接]
2378|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
warden|  楼主 | 2011-2-14 22:21 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 warden 于 2011-2-14 22:24 编辑

W25X系列的Flash写status出错,在这厚着脸皮向大家求救了,程序非常简单:(详细程序请看附件)

//write status REG
void IO_Write_StatusReg(unsigned char byte)
{
    IO_Write_Enable();//write enable
   
    while((IO_Read_StatusReg()&0x03)!=0x02)//wait WEL=1  BUSY=0
            ;
    _cs = 0;
   IO_Send_Byte(W25P_WriteStatusReg);
   IO_Send_Byte(byte);
   _cs = 1;   
   IO_Wait_Busy(1000);
}


我就搞不明白了,手册上也是明明白白的写着,写status步骤为:先写使能,等待WEL=1,然后发写status命令(0x01),接着发要写的数据,在网上找了些别人的例子也都是这样子的,而实际用却一直写不进去,郁闷了整整两天了;

麻烦大家帮我看下程序,很简单,却找不出问题所在,谢谢

源程序:(编译器:Keil uVision2)

W25X40写status出错原程序.rar

79.68 KB

相关帖子

沙发
dghidt| | 2012-5-29 15:59 | 只看该作者
还要写一个写状态寄存器的命令。过了这么久,你弄好了吗?能不能帮我一下,我现在不知道怎么去掉写保护的功能。我用的是W25Q64,它有两个状态寄存器,不知道具体的命令是多少?我的邮箱是gutao569309873@126.com

使用特权

评论回复
板凳
ayb_ice| | 2012-5-29 16:44 | 只看该作者
粗略看了下源代码,具体芯片协议也不清楚

感觉你的CS信号有问题,一般是在整个操作结束后再禁止,

使用特权

评论回复
地板
ayb_ice| | 2012-5-29 17:12 | 只看该作者
本帖最后由 ayb_ice 于 2012-5-29 17:15 编辑

以下是你的源程序
//接收一字节
unsigned char IO_Get_Byte(void)
{
    unsigned char i = 0, in = 0;
    for (i = 0; i < 8; i++)
    {
        in = (in << 1);
        if(_do)
            in |=0x01;
        _clk = 1;
        _nop_();_nop_();_nop_();_nop_();
        _clk = 0;
    }
    return in;
}


这里第一次(i=0)都没有产生时钟信号,居然就读数据了,应该有问题。
图示应该产生下降沿后,才能读数据

未命名.JPG (39.61 KB )

未命名.JPG

使用特权

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

本版积分规则

个人签名:低调 淡定

11

主题

47

帖子

1

粉丝