OpenEdv-开源电子网

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

W25Q32写数据问题

[复制链接]

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2013-8-22
在线时间
0 小时
发表于 2013-8-22 10:34:40 | 显示全部楼层 |阅读模式
 我想往FLASH里写1K的数据下面这段程序有什么问题
下一页怎么写???
应该分成4页


void IO_Write_Byte(uint32 Dst_Addr, uchar byte)
{
 uchar i,j, byte1; 
 _cs = 0;     /* enable device */
 IO_Write_Enable();    /* set WEL */
 IO_Wait_Busy();
 
 _cs = 0; 
 IO_Send_Byte(W25P_PageProgram);   /* send Byte rogram command */
 IO_Send_Byte(((Dst_Addr & 0xFFFFFF) >> 16)); /* send 3 address bytes */
 IO_Send_Byte(((Dst_Addr & 0xFFFF) >> 8));
 IO_Send_Byte(Dst_Addr & 0xFF);
 for(j=0;j<8;j++)
 {
   
 for (i = 0; i < byte; i++)
 {
  byte1 = upper_1_128;
  IO_Send_Byte(byte1);  /* send byte to be programmed */
 }
 if(j%2==1)
 {
  _cs = 1;
delay(16); 
_cs = 0;     /* enable device */
 IO_Write_Enable();    /* set WEL */
 IO_Wait_Busy();
 
 _cs = 0;
 Dst_Addr+=256; 
 IO_Send_Byte(W25P_PageProgram);   /* send Byte rogram command */
 IO_Send_Byte(((Dst_Addr & 0xFFFFFF) >> 16)); /* send 3 address bytes */
 IO_Send_Byte(((Dst_Addr & 0xFFFF) >> 8));
 IO_Send_Byte(Dst_Addr & 0xFF);
 }
 } 
 //IO_Send_Byte(byte);   /* send byte to be programmed */
 _cs = 1;    /* disable device */
}

求大神指教、
心,狼在吼!(762095668)  10:18:02
用的是W25Q32 
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-8-22 10:50:54 | 显示全部楼层
请参考我们的W25Q16、W25Q64的例程。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2013-8-22
在线时间
0 小时
 楼主| 发表于 2013-8-22 11:25:05 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
回复【2楼】正点原子:
---------------------------------我是新手,不知道在哪找,能给个地址吗
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-8-22 11:26:39 | 显示全部楼层
新手要学会论坛搜索。
以后自己搜索,今天我帮你找出来:
http://www.openedv.com/posts/list/13103.htm
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2013-8-22
在线时间
0 小时
 楼主| 发表于 2013-8-22 12:11:41 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
谢谢老大哥!
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2013-8-22
在线时间
0 小时
 楼主| 发表于 2013-8-22 13:10:53 | 显示全部楼层
回复【5楼】TOM:
---------------------------------
现在还有点疑惑,换也是不是给地址加256就可以了(首地址是000000H)?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-8-22 13:46:12 | 显示全部楼层
回复【6楼】TOM:
--------------------------
你拿25Q16的代码,可以直接用。
如果用25Q64的,那就地址范围注意不超过你的Q32地址范围即可。
给地址加256,不知道什么意思...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2013-8-22
在线时间
0 小时
 楼主| 发表于 2013-8-22 16:49:39 | 显示全部楼层
void SPI_Flash_Write_NoCheck(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite)   
{  
u16 pageremain;   
pageremain=256-WriteAddr%256; //单页剩余的字节数    
if(NumByteToWrite<=pageremain)pageremain=NumByteToWrite;//不大于256个字节
while(1)
{   
SPI_Flash_Write_Page(pBuffer,WriteAddr,pageremain);
if(NumByteToWrite==pageremain)break;//写入结束了
else //NumByteToWrite>pageremain
{
pBuffer+=pageremain;
WriteAddr+=pageremain;

NumByteToWrite-=pageremain;  //减去已经写入了的字节数
if(NumByteToWrite>256)pageremain=256; //一次可以写入256个字节
else pageremain=NumByteToWrite;  //不够256个字节了
}
};
一页256个BYTE,用页编辑写下一页是不是就给address加上256就行了?
    
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2013-8-22
在线时间
0 小时
 楼主| 发表于 2013-8-22 16:58:54 | 显示全部楼层
我用四个页编辑
        IO_Write_Byte(0x00000000, 128);
//delay(10);
IO_Write_Byte(0x00000100, 128);
//delay(10);
IO_Write_Byte(0x00000200, 128);
IO_Write_Byte(0x00000300, 128);

函数如下
void IO_Write_Byte(uint32 Dst_Addr, uchar byte)
{
 uchar i,j, byte1; 
 _cs = 0;     /* enable device */
 IO_Write_Enable();    /* set WEL */
 IO_Wait_Busy();
 
 _cs = 0; 
 IO_Send_Byte(W25P_PageProgram);   /* send Byte Program command */
 IO_Send_Byte(((Dst_Addr & 0xFFFFFF) >> 16)); /* send 3 address bytes */
 IO_Send_Byte(((Dst_Addr & 0xFFFF) >> 8));
 IO_Send_Byte(Dst_Addr & 0xFF);
for(j=0;j<2;j++)  
 for (i = 0; i < byte; i++)
 {
  byte1 = upper_1_128;
  IO_Send_Byte(byte1);  /* send byte to be programmed */
 }
独处的数据却是
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF

FF F3 18 C4 00 04 A8 3D EC 01 4C 00 01 9D BD D7 AF 5F 61 00 00 C0 39 6F 16 39 1D 3B 42 33 3E 3A F8 DE 6F 58 FF F3 18 C4 04 05 C8 6A A4 01 8F 28 00 91 08 3A 84 57 1F E7 7A 91 BD 63 C3 EE A0 06 93 8B FE D4 D5 9C DD DD FF F3 18 C4 03 05 C0 6A B4 01 8C 28 00 0E E2 0D 11 85 EA 0B EE 89 F2 53 71 04 70 F6 02 BF 7F D5 90 5F 53 60 FF F3 18 C4 03 05 A8 6E B4 01 C7 00 00 04 0E F5 63 42 10 C3 FF F3 18 C4 00 04 A8 3D EC 01 4C 00 01 9D BD D7 AF 5F 61 00 00 C0 39 6F 16 39 1D 3B 42 33 3E 3A F8 DE 6F 58 FF F3 18 C4 04 05 C8 6A A4 01 8F 28 00 91 08 3A 84 57 1F E7 7A 91 BD 63 C3 EE A0 06 93 8B FE D4 D5 9C DD DD FF F3 18 C4 03 05 C0 6A B4 01 8C 28 00 0E E2 0D 11 85 EA 0B EE 89 F2 53 71 04 70 F6 02 BF 7F D5 90 5F 53 60 FF F3 18 C4 03 05 A8 6E B4 01 C7 00 00 04 0E F5 63 42 10 C3

FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF

FF F3 18 C4 00 04 A8 3D EC 01 4C 00 01 9D BD D7 AF 5F 61 00 00 C0 39 6F 16 39 1D 3B 42 33 3E 3A F8 DE 6F 58 FF F3 18 C4 04 05 C8 6A A4 01 8F 28 00 91 08 3A 84 57 1F E7 7A 91 BD 63 C3 EE A0 06 93 8B FE D4 D5 9C DD DD FF F3 18 C4 03 05 C0 6A B4 01 8C 28 00 0E E2 0D 11 85 EA 0B EE 89 F2 53 71 04 70 F6 02 BF 7F D5 90 5F 53 60 FF F3 18 C4 03 05 A8 6E B4 01 C7 00 00 04 0E F5 63 42 10 C3 FF F3 18 C4 00 04 A8 3D EC 01 4C 00 01 9D BD D7 AF 5F 61 00 00 C0 39 6F 16 39 1D 3B 42 33 3E 3A F8 DE 6F 58 FF F3 18 C4 04 05 C8 6A A4 01 8F 28 00 91 08 3A 84 57 1F E7 7A 91 BD 63 C3 EE A0 06 93 8B FE D4 D5 9C DD DD FF F3 18 C4 03 05 C0 6A B4 01 8C 28 00 0E E2 0D 11 85 EA 0B EE 89 F2 53 71 04 70 F6 02 BF 7F D5 90 5F 53 60 FF F3 18 C4 03 05 A8 6E B4 01 C7 00 00 04 0E F5 63 42 10 C3
有两页没写上
但我用一个写的时候就没问题
这是怎么回事???
王大哥指教



回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 17:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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