打印
[技术相关]

写块设备编程范式

[复制链接]
305|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2023-8-24 14:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在对SPI Flash,EEPROM等设备进行写入数据时,通常此类设备内部具有Page Buffer,写数据长度不能超过Page Buffer的长度,否则会出现问题。在对此类设备进行写入,提出相应的编程范式。

本文以SPI Flash为例,其他诸如EEPROM设备也可参考。

#define SPI_FLASH_PAGE_SIZE        (0x100)

uint32_t SPIFlash_WriteBuffer(uint32_t Address, uint8_t *pBuffer, uint32_t nLength)
{       
        uint32_t curLength = 0;
        uint32_t curAddress = 0;
        uint32_t nRemain = 0;
    uint32_t nPageRemain = 0;

    if ((pBuffer == NULL) || (nLength == 0))
    {
        return 0;
    }

    curAddress = Address;

    while (curLength < nLength)
    {
        nPageRemain = SPI_FLASH_PAGE_SIZE - (curAddress & (SPI_FLASH_PAGE_SIZE - 1));   /* adjust max possible size to page boundary. */
        nRemain = nLength - curLength;
        if (nRemain < nPageRemain)
        {
            nPageRemain = nRemain;
        }

                SPIFlash_WritePage(curAddress, pBuffer + curLength, nPageRemain);

        curAddress += nPageRemain;
        curLength += nPageRemain;
    }

    SPIFlash_WriteDisable();

    return nLength;
}


void SPIFlash_WritePage(uint32_t Address, uint8_t *pBuffer, uint32_t nLength)
{

}

其中,Write Page函数可根据实际情况进行编写。
————————————————
版权声明:本文为CSDN博主「propor」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/propor/article/details/131221925

使用特权

评论回复

相关帖子

沙发
bqyj| | 2023-8-24 20:48 | 只看该作者
收藏了,不错

使用特权

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

本版积分规则

2028

主题

15903

帖子

14

粉丝