久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2230|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

w25q64數(shù)據(jù)讀取全是ff,應(yīng)該是沒寫入不進(jìn)去,單片機(jī)程序在下面各位看下

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
大佬們來看一下,
單片機(jī)源程序如下:
#include "w25q128.h"


/************************************************************************/
void SPI_init(void)
{
    SPI_CE_High();
    CLK_FLASH = 0;    // set clock to low initial state
    DI_FLASH = 1;
}


/************************************************************************/
void SPI_WriteByte(u8 out)
{
    u8 i;
    i = 8;
    do{
        out <<= 1;
        DI_FLASH  = CY;
        CLK_FLASH = 1;
        CLK_FLASH = 0;
    }while(--i);
    DI_FLASH = 1;
}

/************************************************************************/
u8 SPI_ReadByte(void)
{
    u8 i, in;
    i = 8;
    do{
        in <<= 1;
        if (DO_FLASH) in++;
        CLK_FLASH = 1;
        CLK_FLASH = 0;
    }while(--i);
    return in;
}


/************************************************
檢測(cè)Flash是否準(zhǔn)備就緒
入口參數(shù): 無
出口參數(shù):
    0 : 沒有檢測(cè)到正確的Flash
    1 : Flash準(zhǔn)備就緒
************************************************/
void FlashCheckID(void)
{
        u16 ID,ID1,ID2;
    SPI_CE_Low();
    SPI_WriteByte(SFC_RDID);        //發(fā)送讀取ID命令
    SPI_WriteByte(0x00);            //空讀3個(gè)字節(jié)
    SPI_WriteByte(0x00);
    SPI_WriteByte(0x00);
    ID = SPI_ReadByte();         //讀取制造商ID1
    ID1  = SPI_ReadByte();         //讀取設(shè)備ID
    ID2 = SPI_ReadByte();         //讀取制造商ID2
    SPI_CE_High();
        printf("ID:%x,ID1:%x,ID2:%x\r\n",ID,ID1,ID2);
}


/************************************************
檢測(cè)Flash的忙狀態(tài)
入口參數(shù): 無
出口參數(shù):
    0 : Flash處于空閑狀態(tài)
    1 : Flash處于忙狀態(tài)
************************************************/
u8  CheckFlashBusy(void)
{
    u8  dat;

    SPI_CE_Low();
    SPI_WriteByte(SFC_RDSR);        //發(fā)送讀取狀態(tài)命令
    dat = SPI_ReadByte();           //讀取狀態(tài)
    SPI_CE_High();

    return (dat);                   //狀態(tài)值的Bit0即為忙標(biāo)志
}

/************************************************
使能Flash寫命令
入口參數(shù): 無
出口參數(shù): 無
************************************************/
void FlashWriteEnable(void)
{
    while(CheckFlashBusy() > 0);    //Flash忙檢測(cè)
    SPI_CE_Low();
    SPI_WriteByte(SFC_WREN);        //發(fā)送寫使能命令
    SPI_CE_High();
}

/************************************************
禁止Flash寫使能命令
入口參數(shù): 無
出口參數(shù): 無
************************************************/

void FlashWriteDisable(void)
{
    while(CheckFlashBusy() > 0);    //Flash忙檢測(cè)
    SPI_CE_Low();
    SPI_WriteByte(SFC_WRDI);        //發(fā)送寫使能命令
    SPI_CE_High();
}


/************************************************
擦除扇區(qū), 一個(gè)扇區(qū)4KB
入口參數(shù): 無
出口參數(shù): 無
************************************************/
void FlashSectorErase(u32 addr)
{
        FlashWriteEnable();             //使能Flash寫命令
        SPI_CE_Low();
        SPI_WriteByte(SFC_SECTORER2);    //發(fā)送扇區(qū)擦除命令
        SPI_WriteByte(((u8 *)&addr)[1]);           //設(shè)置起始地址
        SPI_WriteByte(((u8 *)&addr)[2]);
        SPI_WriteByte(((u8 *)&addr)[3]);
        SPI_CE_High();
                while(CheckFlashBusy() > 0);
                FlashWriteDisable();
}

/************************************************
從Flash中讀取數(shù)據(jù)
入口參數(shù):
    addr   : 地址參數(shù)
    buffer : 緩沖從Flash中讀取的數(shù)據(jù)
    len   : 數(shù)據(jù)塊大小
出口參數(shù):
    無
************************************************/
void SPI_Read_Nbytes(u32 addr, u8 *buffer, u16 len)
{
        u16 i;
    while(CheckFlashBusy() > 0);        //Flash忙檢測(cè)
    SPI_CE_Low();                       //enable device
    SPI_WriteByte(SFC_READ);            //read command

        SPI_WriteByte((addr & 0xFF0000) >> 16);
    SPI_WriteByte((addr & 0xFF00) >> 8);
    SPI_WriteByte(addr & 0xFF);
        for (i = 0; i < len; i++)
        {
                buffer[ i]= SPI_ReadByte();
        }
    SPI_CE_High();                      //disable device
}

/************************************************************************
讀出n個(gè)字節(jié),跟指定的數(shù)據(jù)進(jìn)行比較, 錯(cuò)誤返回1,正確返回0
************************************************************************/
u8  SPI_Read_Compare(u32 addr, u8 *buffer, u16 len)
{
    u8  j;
    if(len == 0)   return 2;
    while(CheckFlashBusy() > 0);            //Flash忙檢測(cè)

    j = 0;
    SPI_CE_Low();                           //enable device
    SPI_WriteByte(SFC_READ);                //read command
    SPI_WriteByte(((u8 *)&addr)[1]);        //設(shè)置起始地址
    SPI_WriteByte(((u8 *)&addr)[2]);
    SPI_WriteByte(((u8 *)&addr)[3]);
    do
    {
        if(*buffer != SPI_ReadByte())       //receive byte and store at buffer
        {
            j = 1;
            break;
        }
        buffer++;
    }while(--len);         //read until no_bytes is reached
    SPI_CE_High();          //disable device
    return j;
}


/************************************************
寫數(shù)據(jù)到Flash中
入口參數(shù):
    addr   : 地址參數(shù)
    buffer : 緩沖需要寫入Flash的數(shù)據(jù)
    len   : 數(shù)據(jù)塊大小
出口參數(shù): 無
************************************************/
void SPI_Write_Nbytes(u32 addr, u8 *buffer, u8 len)
{
        u16 i;
    while(CheckFlashBusy() > 0);        //Flash忙檢測(cè)
    FlashWriteEnable();                 //使能Flash寫命令
    SPI_CE_Low();                       // enable device
    SPI_WriteByte(SFC_PAGEPROG);        // 發(fā)送頁編程命令
        SPI_WriteByte((addr & 0xFF0000) >> 16);
    SPI_WriteByte((addr & 0xFF00) >> 8);
    SPI_WriteByte(addr & 0xFF);
        for (i = 0; i < len; i++)
        {
                SPI_WriteByte(buffer[ i]);
        }        
    SPI_CE_High();                      // disable device
        while(CheckFlashBusy() > 0);
        FlashWriteDisable();
}

//////////////////////////////////主函數(shù)//////////////


code const unsigned char arr[200] = {
        0X00,        0X00,        0X00,        0X00,        0X00,        0X00,        0X00,        0X00,        0X00,        0X00,
        0X00,        0X04,        0X00,        0X00,        0X00,        0X04,        0X00,        0X70,        0X00,        0X40,
        0X04,        0X00,        0X04,        0X00,        0X04,        0X00,        0X07,        0X00,        0X00,        0X00,
        0X00,        0X04,        0X00,        0X00,        0X70,        0X00,        0X07,        0X00,        0X00,        0X00,
        0X00,        0X00,        0X00,        0X07,        0X70,        0X00,        0X77,        0X00,        0X00,        0X00,
        0X00,        0X00,        0X70,        0X07,        0X77,        0X77,        0X77,        0X77,        0X00,        0X00,
        0X00,        0X00,        0X07,        0X77,        0X77,        0X77,        0X77,        0X70,        0X70,        0X00,
        0X00,        0X77,        0X77,        0X00,        0X00,        0X77,        0X77,        0X00,        0X00,        0X00,
        0X00,        0X00,        0X70,        0X70,        0X00,        0X77,        0X77,        0X00,        0X00,        0X00,
        0X00,        0X07,        0X70,        0X70,        0X00,        0X07,        0X77,        0X00,        0X07,        0X00,
        0X07,        0X77,        0X00,        0X00,        0X00,        0X07,        0X77,        0X70,        0X70,        0X00,
        0X00,        0X70,        0X00,        0X40,        0X00,        0X07,        0X77,        0X77,        0X00,        0X00,
        0X00,        0X00,        0X00,        0X00,        0X40,        0X07,        0X77,        0X77,        0X00,        0X00,
        0X00,        0X40,        0X00,        0X00,        0X00,        0X07,        0X77,        0X77,        0X00,        0X00,
        0X00,        0X00,        0X00,        0X00,        0X00,        0X07,        0X70,        0X77,        0X70,        0X00,
        0X00,        0X00,        0X00,        0X40,        0X00,        0X07,        0X00,        0X00,        0X07,        0X00,
        0X00,        0X00,        0X00,        0X00,        0X00,        0X00,        0X00,        0X00,        0X00,        0X00,
        0X00,        0X00,        0X40,        0X00,        0X40,        0X00,        0X00,        0X00,        0X00,        0X00,
        0X00,        0X00,        0X00,        0X00,        0X00,        0X00,        0X00,        0X40,        0X00,        0X00,
        0X00,        0X00,        0X00,        0X00,        0X00,        0X00,        0X00,        0X00,        0X00,        0X00,

};

void main(void)
{
        xdata unsigned char read_dat[256];
//        EA = 1;
        UartInit();
        io_init();
    SPI_init();
    FlashCheckID();
        FlashSectorErase(0x011000); //每次可以擦除一個(gè)扇區(qū)。4KB
        delay_ms(500);
        SPI_Write_Nbytes(0x011000,arr,200);
        delay_ms(100);
        SPI_Read_Nbytes(0x011000, read_dat,200);  
        delay_ms(100);
        UartSend(read_dat,200);
        
        P03=0;
        while(1);
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:226055 發(fā)表于 2024-4-10 09:26 | 只看該作者
    1、不知你的硬件連接是怎樣的,一定注意假如使用的是外部FLASH模塊,然后與單片機(jī)之間連接盡可能不要使用杜邦線。個(gè)人有測(cè)試過,杜邦線會(huì)導(dǎo)致讀取數(shù)據(jù)失敗。、
    2、排除硬件問題,還要考慮操作問題,那就是在寫數(shù)據(jù)之前一定要先擦除(即將存儲(chǔ)區(qū)域數(shù)據(jù)置為1),因?yàn)镕LASH的特點(diǎn)是可將存儲(chǔ)數(shù)據(jù)1變?yōu)?,但沒辦法實(shí)現(xiàn)從0變?yōu)?。
    3、要考慮軟件設(shè)計(jì)的問題,下面給出的是艾克姆W25Q128的程序(兼容W25Q64)供參考,PDF文檔寫得非常好,附件和程序一起供參考。


spi_w25q128_sw.rar

26.13 KB, 下載次數(shù): 6

實(shí)驗(yàn)2-13:SPI總線的應(yīng)用.pdf

2.56 MB, 下載次數(shù): 3

回復(fù)

使用道具 舉報(bào)

板凳
ID:1104542 發(fā)表于 2024-4-10 13:50 | 只看該作者
cocolala 發(fā)表于 2024-4-10 09:26
1、不知你的硬件連接是怎樣的,一定注意假如使用的是外部FLASH模塊,然后與單片機(jī)之間連接盡可能不要使 ...

謝謝大佬,我來根據(jù)你發(fā)的測(cè)試下
回復(fù)

使用道具 舉報(bào)

地板
ID:1104542 發(fā)表于 2024-4-10 21:37 | 只看該作者
cocolala 發(fā)表于 2024-4-10 09:26
1、不知你的硬件連接是怎樣的,一定注意假如使用的是外部FLASH模塊,然后與單片機(jī)之間連接盡可能不要使 ...

按這個(gè)例程是w25q64剛寫入可以讀取,其他地址多寫幾次之后,開始的就讀不出來了顯示的FF,換了一個(gè)也一樣,但最后一次寫入的可以讀出來
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成人国产在线观看 | 日本小视频网站 | 精品亚洲一区二区三区 | 久久人| 精品国产视频 | 精品视频国产 | 国产精品a一区二区三区网址 | 午夜a级理论片915影院 | 国产精品a一区二区三区网址 | 亚洲精品国产成人 | 成人视屏在线观看 | 欧美视频 亚洲视频 | 成人精品一区二区 | 99久久婷婷| 久久99视频免费观看 | 国产视频一区在线 | sese视频在线观看 | 成人午夜免费视频 | 精品一区二区三区在线视频 | 久久久久国色av免费观看性色 | www视频在线观看 | 欧美大片一区二区 | 国产精品久久久久一区二区 | 国产免费一二三区 | 天天综合91 | 国产精品一区二区三区在线 | 国产一级一级毛片 | 久久久久久久久久影视 | 羞羞的视频在线观看 | 欧美成年黄网站色视频 | 黄色免费看 | 亚洲 欧美 在线 一区 | 欧美精品在线免费观看 | 日韩精品一区二区三区视频播放 | 亚洲欧美国产精品一区二区 | 97日日碰人人模人人澡分享吧 | 在线观看免费福利 | 91网站在线看 | 久久久久久免费毛片精品 | 久热精品视频 | 日韩中文一区二区三区 |