打印

SPI接口FLASH操作

[复制链接]
2810|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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吧

使用特权

评论回复
5
燕清扬| | 2015-4-15 20:29 | 只看该作者
你好,最近在调试W25Q16DV,能给发送个例程么?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

25

主题

279

帖子

0

粉丝