SPI接口FLASH操作

[复制链接]
 楼主| kdurant 发表于 2012-10-30 09:58 | 显示全部楼层 |阅读模式
本帖最后由 kdurant 于 2012-10-30 10:00 编辑

用的是W25Q16DV,但貌似所有SPI接口FLASH操作都差不多,所以希望大家指点下
我现在发送的命令序列是
06  //写允许
02  //页编程指令
00  //地址
00
01
55  //写入的数据
aa
03  //读数据命令
00  //地址
00
01  

现在发送的数据肯定满足SPI时序
但操作后,没有读出任何数据

写数据后要留时间让他写完吗?还是少了什么命令?
大家指点下啊

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
amwrdfe 发表于 2012-10-30 12:37 | 显示全部楼层
写操作要等待flash写入完成。
amwrdfe 发表于 2012-10-30 12:39 | 显示全部楼层
void Read_Flash_Data(u8 *dat, u32 addr, u16 length)
{
        static u16 leng_标志寄存器;
       
        leng_标志寄存器 = length;
        SPI_FLASH_SET;
        (void)SPI_Send_Data(0x000B);
        (void)SPI_Send_Data(addr>>16);
        (void)SPI_Send_Data(addr>>8);
        (void)SPI_Send_Data(addr);
        (void)SPI_Send_Data(EMPTY_INST);
        while(leng_标志寄存器--) {
                *(dat++) = SPI_Send_Data(EMPTY_INST);
                }
        SPI_FLASH_CLR;
}

/*Page Program*/
void Page_Program(u8 *dat, u32 addr)
{
        u16 tmp_length;
       
        tmp_length = PAGE_SIZE;
        Write_Enabled();
               
        SPI_FLASH_SET;
        (void)SPI_Send_Data(0x0002);
        (void)SPI_Send_Data(addr>>16);
        (void)SPI_Send_Data(addr>>8);
        (void)SPI_Send_Data(addr);
       
        while(tmp_length--)
                (void)SPI_Send_Data(*dat++);
               
        SPI_FLASH_CLR;
       
        Wait_State_Busy();
        Write_Disable();
}
/* End SPI_Flash*/
上段代码更清楚。
lzyyoumuren 发表于 2014-11-27 17:39 | 显示全部楼层
amwrdfe 发表于 2012-10-30 12:39
void Read_Flash_Data(u8 *dat, u32 addr, u16 length)
{
        static u16 leng_标志寄存器;

请问这个驱动也适合W25Q128吧
燕清扬 发表于 2015-4-15 20:29 | 显示全部楼层
你好,最近在调试W25Q16DV,能给发送个例程么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

25

主题

279

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部