找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5595|回复: 4
收起左侧

W25Q128用STM32驱动程序,写数据总不成功,求解

[复制链接]
ID:247125 发表于 2020-5-23 19:45 | 显示全部楼层 |阅读模式
W25Q128JVSQ

可以读读取到ID,读出0地址的16个字节全是0xFF。

然后写0~16地址.写完读出来还是0xFF。用的原子的驱动程序和板子

以下是串口输出:
Flash ID:0XEF17
JEDEC ID:0XEF4018
Status all:0X600200
SPI_FLASH data addr=0~16
//代码如下
//SPI FLASH
SPI_Flash_Init();
print_hex("Flash ID:",SPI_Flash_ReadID());
print_hex("JEDEC ID:",flash_read_jedec_id());
print_hex("Status all:",flash_read_state_all());
for(temp=0;temp<16;temp++)
{
  send.buf[temp]= temp;
}
flash_page_write(send.buf,0x0,0x0,16);
//flash驱动代码
void flash_page_write(uint8 *pBuffer,uint16 page,uint8 addr,uint8 NumByteToWrite)
{
u8 i;
SPI_FLASH_Write_Enable();                  //SET WEL
SPI_FLASH_CS=0;                            //使能器件   
    SPI1_ReadWriteByte(W25X_PageProgram);      //发送写页命令   
    SPI1_ReadWriteByte(page>>8); //发送24bit地址   
    SPI1_ReadWriteByte(page);   
    SPI1_ReadWriteByte(addr);   
   for(i=0;i<NumByteToWrite;i++)SPI1_ReadWriteByte(pBuffer[ i]);//循环写数  
SPI_FLASH_CS=1;                            //取消片选
SPI1_ReadWriteByte(0xff); //延时8个时钟
SPI_Flash_Wait_Busy();        //等待写入结束
}
网上搜索代码大多是这样。特意在每个CS拉高后延时8个CLK。还是没有效果。
92653e1527e2925577d0184182d76bd.png
回复

使用道具 举报

ID:247125 发表于 2020-5-23 19:52 | 显示全部楼层
写使能已经调试过,SPI_FLASH_Write_Enable(); 执行后status 变成0x02.应该是写使能打开了,写完16字节后立即读状态就是0x0.也没有读到busy
回复

使用道具 举报

ID:592807 发表于 2020-5-25 10:56 | 显示全部楼层
用这个我试过没问题,还是读不出来就可能是你其他地方没做好

25-SPI—读写串行FLASH(W25Q64).rar

668.35 KB, 下载次数: 196

回复

使用道具 举报

ID:247125 发表于 2020-5-25 18:50 | 显示全部楼层
感谢各位关注,问题已解决,换了一篇flash就好 了。
Flash ID:0XEF17
JEDEC ID:0XEF4018
Status all:0X600200
erase_sector=26
SPI_FLASH data addr=0~16:\0       

回复

使用道具 举报

ID:555216 发表于 2020-5-26 21:13 | 显示全部楼层
谢谢 同样的问题
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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