OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 12312|回复: 10

W25N01

[复制链接]

17

主题

465

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2142
金钱
2142
注册时间
2013-1-11
在线时间
504 小时
发表于 2018-5-23 21:47:01 | 显示全部楼层 |阅读模式
10金钱
请教一下 W25N01(1G Mbit  128M) 共有 2048 block, 官网的文档是只支持 128K 擦除,读写。 我改的原子哥的 F1的SPI 例程,可以按照 4K 来写吗?一直没有成功过,只是读到了ID  0XEFAA
希望有心人指点一下!

知识是你最好的财富
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2018-5-24 01:18:29 | 显示全部楼层
可以,但是擦除必须是128K单位。
回复

使用道具 举报

17

主题

465

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2142
金钱
2142
注册时间
2013-1-11
在线时间
504 小时
 楼主| 发表于 2018-5-24 15:31:33 | 显示全部楼层
//WriteAddr:开始写入的地址(24bit)                                               
//NumByteToWrite:要写入的字节数(最大65535)   
u8 W25QXX_BUFFER[4096];                 
void W25QXX_Write(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite)   
{
        u32 secpos;  //定义要擦除的删区
        u32 secoff;
        u32 secremain;          
        u32 i;   
        u8 * W25QXX_BUF;          
           W25QXX_BUF=W25QXX_BUFFER;             
        secpos=WriteAddr/4096*16*2;//扇区地址  
        secoff=WriteAddr%4096*16*2;//在扇区内的偏移
        secremain=4096*16*2-secoff;//扇区剩余空间大小   
        printf("ad:%X,nb:%X\r\n",WriteAddr,NumByteToWrite);//测试用
        if(NumByteToWrite<=secremain)secremain=NumByteToWrite;//不大于4096个字节
        while(1)
        {       
                W25QXX_Read(W25QXX_BUF,secpos*4096*16*2,4096*16*2);//读出整个扇区的内容
                for(i=0;i<secremain;i++)//校验数据
                {
                        if(W25QXX_BUF[secoff+i]!=0XFF)break;//需要擦除            
                }
                if(i<secremain)//需要擦除
                {
                        W25QXX_Erase_Sector(secpos);                //擦除这个扇区
                        for(i=0;i<secremain;i++)                           //复制
                        {
                                W25QXX_BUF[i+secoff]=pBuffer[i];          
                        }
                        W25QXX_Write_NoCheck(W25QXX_BUF,secpos*4096*16*2,4096*16*2);//写入整个扇区  

                }else W25QXX_Write_NoCheck(pBuffer,WriteAddr,secremain);//写已经擦除了的,直接写入扇区剩余区间.                                   
                if(NumByteToWrite==secremain)break;//写入结束了
                else//写入未结束
                {
                        secpos++;//扇区地址增1
                        secoff=0;//偏移位置为0          

                           pBuffer+=secremain;                                  //指针偏移
                        WriteAddr+=secremain;                                //写地址偏移          
                           NumByteToWrite-=secremain;                        //字节数递减
                        if(NumByteToWrite>4096*16*2)secremain=4096*16*2;//下一个扇区还是写不完
                        else secremain=NumByteToWrite;                //下一个扇区可以写完了
                }         
        };         
}

w25n01gv revl 050918 unsecured.pdf

1.14 MB, 下载次数: 128

知识是你最好的财富
回复

使用道具 举报

17

主题

465

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2142
金钱
2142
注册时间
2013-1-11
在线时间
504 小时
 楼主| 发表于 2018-5-24 15:33:12 | 显示全部楼层
正点原子 发表于 2018-5-24 01:18
可以,但是擦除必须是128K单位。

原子哥,下面是我改的,停留在一直写入,帮忙看看对吗,附件为芯片资料。麻烦你指导一下啊!
知识是你最好的财富
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2018-5-25 01:36:36 | 显示全部楼层
默默莱 发表于 2018-5-24 15:33
原子哥,下面是我改的,停留在一直写入,帮忙看看对吗,附件为芯片资料。麻烦你指导一下啊!

自己努力下吧,我暂时没时间
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

17

主题

465

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2142
金钱
2142
注册时间
2013-1-11
在线时间
504 小时
 楼主| 发表于 2018-5-25 14:00:09 | 显示全部楼层
正点原子 发表于 2018-5-25 01:36
自己努力下吧,我暂时没时间

好的,谢谢了,等你有空再看看
知识是你最好的财富
回复

使用道具 举报

7

主题

50

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
221
金钱
221
注册时间
2011-8-8
在线时间
50 小时
发表于 2018-10-30 16:14:42 | 显示全部楼层
正点原子 发表于 2018-5-24 01:18
可以,但是擦除必须是128K单位。

原子哥,我现在读写w25n01 没问题。但是我想嵌入到fat32 ,遇到一个问题。
每次擦除必须128k 一个块。一般同一个块写入数据,都是先把整个块数据全读出,更改要写的数据,再擦除,整块写入。这样的话128k 单片机没有那么大的ram。

如何解决?帮忙给个思路
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2018-10-31 01:41:33 | 显示全部楼层
snail_dongbin 发表于 2018-10-30 16:14
原子哥,我现在读写w25n01 没问题。但是我想嵌入到fat32 ,遇到一个问题。
每次擦除必须128k 一个块。一 ...

可以使用块拷贝功能
看有没有这个功能吧
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2019-2-18
在线时间
0 小时
发表于 2019-2-18 22:10:43 | 显示全部楼层
最近在学这个,楼主能分享个例程吗?感谢!!985186106@qq.com
回复

使用道具 举报

21

主题

63

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2469
金钱
2469
注册时间
2014-4-26
在线时间
172 小时
发表于 2019-3-5 10:02:09 | 显示全部楼层
snail_dongbin 发表于 2018-10-30 16:14
原子哥,我现在读写w25n01 没问题。但是我想嵌入到fat32 ,遇到一个问题。
每次擦除必须128k 一个块。一 ...

你好,请教一下是读写单独的页么?可以分享一下驱动么?谢谢
回复

使用道具 举报

7

主题

188

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
385
金钱
385
注册时间
2018-7-19
在线时间
126 小时
发表于 2021-7-28 14:55:34 | 显示全部楼层
为什么我擦除指令传过去后感觉只擦除一页啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 16:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表