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

標題: W25Q128驅動程序 [打印本頁]

作者: jizhongbiao    時間: 2021-10-28 16:26
標題: W25Q128驅動程序
#define W25Q128_NUM       0xEF4018 /* FALSH型號 */
#define W25CMD_JEDEC_ID      0x9F
#define W25CMD_WERITE_ENABLE 0x06
#define W25CMD_READ_STATUS   0x05 /* 讀狀態寄存器 用來判斷busy */
#define W25CMD_SECTOR_ERASE  0x20
#define W25CMD_PAGE_PROGRAM  0x02

#define W25_PAGE_SIZE        256

static void W25Q128WriteEnable(void);
static u8 WaitW25Idle(void);
static void AlignmentWrite (u8 *buff, u32 addr, u16 len);

/* 讀取芯片ID */
u32 W25Q128ReadId(void)
{
    u8 tempH, tempM, tempL;
    SPI2_CSN_SELECT();
    (void)Spi2WriteByte(W25CMD_JEDEC_ID);
    (void)Spi2ReadByte(&tempH);
    (void)Spi2ReadByte(&tempM);
    (void)Spi2ReadByte(&tempL);
    SPI2_CSN_RELASE();
    return (U32)((tempH << 16) | (tempM << 8) | tempL);
}

/* 扇區擦除 */
void W25EraseSector(u32 addr)
{
    W25Q128WriteEnable();
    (void)WaitW25Idle();
    SPI2_CSN_SELECT();
    (void)Spi2WriteByte(W25CMD_SECTOR_ERASE);
    (void)Spi2WriteByte((u8)(addr >> 16));
    (void)Spi2WriteByte((u8)(addr >> 8));
    (void)Spi2WriteByte((u8)addr);
    SPI2_CSN_RELASE();
    (void)WaitW25Idle();
}

/* 按頁寫入 */
void W25PageWrite( u8 *buff, u32 addr, u16 len)
{
    W25Q128WriteEnable();
    (void)WaitW25Idle();
    SPI2_CSN_SELECT();
    (void)Spi2WriteByte(W25CMD_PAGE_PROGRAM);
    (void)Spi2WriteByte((u8)(addr >> 16));
    (void)Spi2WriteByte((u8)(addr >> 8));
    (void)Spi2WriteByte((u8)addr);
    while(len--)
    {
        (void)Spi2WriteByte(*buff);
        buff++;
    }
    SPI2_CSN_RELASE();
    (void)WaitW25Idle();
}

/* 對齊寫入一定長度的數據 */
static void AlignmentWrite (u8 *buff, u32 addr, u16 len)
{
    u8 numOfPage   = len / W25_PAGE_SIZE;
    u8 numOfLeave  = len % W25_PAGE_SIZE;
    if (numOfPage == 0) /* 數據長度不滿1頁 */
    {
        W25PageWrite(buff, addr, W25_PAGE_SIZE);
        return ;
    }
    while(numOfPage--)
    {
        W25PageWrite(buff, addr, W25_PAGE_SIZE);
        buff += W25_PAGE_SIZE;
        addr += W25_PAGE_SIZE;
    }
    if (numOfLeave == 0)
    {
        return;
    }
    W25PageWrite(buff, addr, numOfLeave);
}

/* 非對齊寫入一定長度的數據 */
static void UnAlignmentWrite (u8 *buff, u32 addr, u16 len)
{
    u8 numOfPage   = len / W25_PAGE_SIZE;
    u8 numOfLeave  = len % W25_PAGE_SIZE;
    u8 unAlignmentLen = W25_PAGE_SIZE - (addr % W25_PAGE_SIZE); /* 寫完這個長度的數據之后就可以對齊寫入了*/

    if (numOfPage == 0)
    {
        if (numOfLeave > unAlignmentLen)
        {
            W25PageWrite(buff, addr, unAlignmentLen);
            buff += unAlignmentLen;
            addr += unAlignmentLen;
            W25PageWrite(buff, addr, numOfLeave - unAlignmentLen);
        }
        else
        {
            W25PageWrite(buff, addr, len);
        }
        return ;
    }
    W25PageWrite(buff, addr, unAlignmentLen); /* 寫入不對齊的部分 */
    len -= unAlignmentLen;
    buff += unAlignmentLen;
    addr += unAlignmentLen;
    AlignmentWrite(buff, addr, len);
}

/* 寫使能 */
static void W25Q128WriteEnable(void)
{
    SPI2_CSN_SELECT();
    (void)Spi2WriteByte(W25CMD_WERITE_ENABLE);
    SPI2_CSN_RELASE();
}

/*
等待芯片空閑
return : 0失敗 1成功
*/
static u8 WaitW25Idle(void)
{
    u8 temp;
    u8 retryCnt = 0;
    SPI2_CSN_SELECT();
    do {
        (void)Spi2WriteByte(W25CMD_READ_STATUS);
        (void)Spi2ReadByte(&temp);
        if (++retryCnt == 250)
        {
            return 0;
        }
    }while(temp & 0x01);
    SPI2_CSN_RELASE();
    return 1;
}



作者: feixiang_07    時間: 2023-3-15 10:39
剛好用到,先謝了!




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 黄色片在线网站 | 国产一伦一伦一伦 | 久久久久久久一区 | 日本久久久久久久久 | 7777在线视频免费播放 | 国产97人人超碰caoprom | 涩色视频在线观看 | 观看av | 国产婷婷综合 | 久久久蜜臀国产一区二区 | 天天综合日日夜夜 | 黄色一级毛片 | 国产精品视频综合 | 日韩一区二区三区在线观看 | 奇米超碰 | av中文字幕在线播放 | 久久久精品一区 | 在线观看 亚洲 | 999精品在线观看 | 国产一区二区免费 | 日本免费一区二区三区四区 | 亚洲欧美综合 | 亚洲成人av一区二区 | 精品国产18久久久久久二百 | 亚洲www | 日日爱夜夜操 | 污书屋 | 91影片| 国产精品1区2区3区 男女啪啪高潮无遮挡免费动态 | 久久com | 国产激情一区二区三区 | 午夜天堂| 国产一区二区精品在线 | 国产欧美一区二区三区日本久久久 | 国产福利91精品 | 亚洲精品一区二区三区在线 | 天堂免费看片 | 欧美精品一级 | 日韩精品一区二区三区中文在线 | 亚洲精品自在在线观看 | 久久亚洲国产精品日日av夜夜 |