OpenEdv-开源电子网

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

关于STM32 MINI开发板上W25Q64的读写问题

[复制链接]

17

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
122
金钱
122
注册时间
2014-12-1
在线时间
17 小时
发表于 2014-12-1 15:09:51 | 显示全部楼层 |阅读模式
5金钱
向原子哥求解!
我用的是MINI开发板,我用这个函数向W25Q64里面写数据:

void SPI_Flash_Write(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite)
数据是一个9个字节的数组,每秒钟写一组(即写一次数组),地址+=9;

现在有一个问题,当写入大于148组后,读出来的数据就有一部分乱码,但是如果不是每秒写一组,用for循环一次性写入200组都没有问题,纠结了好久都找不到原因,在写数据之前已经擦除了前1250个扇区。数据是从0地址开始写的。

请原子哥指点指点啊!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-12-1 15:46:25 | 显示全部楼层
这个不应该啊,你是不是写数据的时候,出现问题了?
写的时候被其它操作打断了?或者打乱了?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

15

主题

143

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
243
金钱
243
注册时间
2014-10-31
在线时间
4 小时
发表于 2014-12-19 22:19:01 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥,求解啊http://www.openedv.com/posts/list/0/44047.htm#253388
总有一天,要为自由而活
回复

使用道具 举报

17

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
122
金钱
122
注册时间
2014-12-1
在线时间
17 小时
 楼主| 发表于 2014-12-31 09:44:27 | 显示全部楼层

问题还是没有解决,代码如下:

[mw_shl_code=c,true]
[mw_shl_code=c,true]void TIM3_IRQHandler(void) //TIM3中断 { if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源 { TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx的中断待处理位:TIM 中断源 Data_Buffer[0]=1; Data_Buffer[1]=2; Data_Buffer[2]=3; Data_Buffer[3]=4; Data_Buffer[4]=5; Data_Buffer[5]=6; Data_Buffer[6]=7; Data_Buffer[7]=8; Data_Buffer[8]=9; SPI_Flash_Write(Data_Buffer,FLASH_SAVE_ADDR,9); FLASH_SAVE_ADDR+=9; DATA_Quantity++; } } }[/mw_shl_code]

[/mw_shl_code]

读取代码如下:

[mw_shl_code=c,true]FLASH_SAVE_ADDR=0; for(Q=0;Q<DATA_Quantity;Q++) { SPI_Flash_Read(datatemp_D,FLASH_SAVE_ADDR,9); //从0地址处开始,读出9个字节 for(i=0;i<9;i++) { //发送数据 USART_SendData(USART1,datatemp_D); while((USART1->SR&0X40)==0); } FLASH_SAVE_ADDR+=9; }[/mw_shl_code]

这样写入和读取,读取后数据大于148组就就会有一部分乱码


但是,如果用这个函数写入:
SPI_Flash_Write_NoCheck

读取就没有乱码

但是有另一个问题,就是用SPI_Flash_Write_NoCheck写入的数据读取出来偶尔会有一组FF FF FF FF FF FF FF FF FF出现,之前说过了,我写入的数据是9个字节一组。并且每次写入后,读取出来的一组9个FF的位置都是不固定的,甚至有的一组里的FF不够9个。

这又是什么原因啊?我已经快疯了!

求原子哥耐心指教!!!!!!


回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-12-31 23:44:53 | 显示全部楼层
回复【4楼】wolfchuang:
---------------------------------
 建议别把写SPI FLASH放到中断里面!
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-27 10:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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