OpenEdv-开源电子网

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

SPI例程W25Q128读写函数中要写入的字节数为什么最大为65535

[复制链接]

1

主题

5

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2016-10-13
在线时间
4 小时
发表于 2016-10-13 19:49:55 | 显示全部楼层 |阅读模式
2金钱
小弟新手,想要请教在以下两个函数中要读取和要写入的字节数为什么是65535个,65536个字节刚好是一个block,W25Q128是不是不能跨块读写数据?还是有其他原因?求解。



//读取SPI FLASH
//在指定地址开始读取指定长度的数据
//pBuffer:数据存储区
//ReadAddr:开始读取的地址(24bit)
//NumByteToRead:要读取的字节数(最大65535)
void W25QXX_Read(u8* pBuffer,u32 ReadAddr,u16 NumByteToRead)   //读取flash
{
        u16 i;
        W25QXX_CS=0;
        SPI2_ReadWriteByte(W25X_ReadData);     //发送读取命令
        SPI2_ReadWriteByte((u8)((ReadAddr)>>16));  //发送24位地址
        SPI2_ReadWriteByte((u8)((ReadAddr)>>8));
        SPI2_ReadWriteByte(ReadAddr);
       
        for(i=0;i<NumByteToRead;i++)
        {
                pBuffer[i]=SPI2_ReadWriteByte(0xFF);
        }
        W25QXX_CS=1;
}

*********************************************************
//无检验写SPI FLASH
//必须确保所写的地址范围内的数据全部为OXFF,否则在非0xFF处写入的数据将失败
//具有自动换页功能
//在指定地址开始写入指定长度的数据,但是要确保地址不越界
//pBuffer:数据存储区
//WriteAddr:开始写入的地址(24bit)
//NunByteToWrite:要写入的字节数(最大65535)
//CHECK OK
void W25QXX_Write_NoCheck(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite)
{
        u16 pageremain;
        pageremain=256-WriteAddr%256;
        if(NumByteToWrite<=pageremain)pageremain=NumByteToWrite;
       
        while(1)
        {
                W25QXX_Write_Page(pBuffer,WriteAddr,pageremain);
                if(NumByteToWrite==pageremain)break;
                else   
                {
                        pBuffer+=pageremain;
                        WriteAddr+=pageremain;
                        NumByteToWrite-=pageremain;
                       
                        if(NumByteToWrite>256)pageremain=256;
                        else pageremain=NumByteToWrite;
                }
        }
}

最佳答案

查看完整内容[请看2#楼]

因为是u16类型。你想更大,去定义成u32即可
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165225
金钱
165225
注册时间
2010-12-1
在线时间
2107 小时
发表于 2016-10-13 19:49:56 | 显示全部楼层
因为是u16类型。你想更大,去定义成u32即可
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2016-10-13
在线时间
4 小时
 楼主| 发表于 2016-10-15 11:29:36 | 显示全部楼层
正点原子 发表于 2016-10-13 19:49
因为是u16类型。你想更大,去定义成u32即可

是我把问题想复杂了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-1 08:10

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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