我的FLASH 是ST M25P64
结构是32个SECTOR 每扇区包含256 PAGES 每个页是256 字节
我看到原子的例程是用FAT读取字库 每512字节往FLASH写。
我想把两个数组的字库直接写在FLASH上该如何操做呢
见到有用串口实现的不知道还有什么好方法直接写到FLASH
难点1.好像一次最多是写65536字节,我的汉字库23940x16远超过了。不能整体写。
难点2,如何调用下面函数?编译会出错。
..\user\main.c(90): error: #167: argument of type "u8 (*)[16]" is incompatible with parameter of type "u8 *"
还有参数PBuffer 怎么就是缓冲区数据呢。我认为是要写入的数据。
/*******************************************************************************
* 函数名 : SPI_FLASH_BufferWrite
* 描述 : 块数据写入。
* 输入 : - pBuffer:缓冲区数据
- WriteAddr : 写入地址
- NumByteToWrite:需写入字节数
* 输出 : 无
* 返回 : 无
*******************************************************************************/
void SPI_FLASH_BufferWrite(u8* pBuffer, u32 WriteAddr, u16 NumByteToWrite)
{
u16 NumOfPage = 0, NumOfSingle = 0, Addr = 0, count = 0, temp = 0;
Addr = WriteAddr % SPI_FLASH_PageSize;
count = SPI_FLASH_PageSize - Addr;
NumOfPage = NumByteToWrite / SPI_FLASH_PageSize;
NumOfSingle = NumByteToWrite % SPI_FLASH_PageSize;
if(Addr == 0) /* 写地址对齐 */
{
if(NumOfPage == 0) /* 写数据字节 < SPI_FLASH页面大小 */
{
SPI_FLASH_PageWrite(pBuffer, WriteAddr, NumByteToWrite);
}
else /* 写数据字节 > SPI_FLASH_页面大小 */
{
while(NumOfPage--)
{
SPI_FLASH_PageWrite(pBuffer, WriteAddr, SPI_FLASH_PageSize);
WriteAddr += SPI_FLASH_PageSize;
pBuffer += SPI_FLASH_PageSize;
}
SPI_FLASH_PageWrite(pBuffer, WriteAddr, NumOfSingle);
}
}
else /* 写地址未对齐 */
{
if(NumOfPage== 0) /* 写数据字节 < SPI_FLASH_页面大小 */
{
if(NumOfSingle > count)
{
temp = NumOfSingle - count;
SPI_FLASH_PageWrite(pBuffer, WriteAddr, count);
WriteAddr += count;
pBuffer += count;
SPI_FLASH_PageWrite(pBuffer, WriteAddr, temp);
}
else
{
SPI_FLASH_PageWrite(pBuffer, WriteAddr, NumByteToWrite);
}
}
else /* 写数据字节 > SPI_FLASH_页面大小 */
{
NumByteToWrite -= count;
NumOfPage = NumByteToWrite / SPI_FLASH_PageSize;
NumOfSingle = NumByteToWrite % SPI_FLASH_PageSize;
SPI_FLASH_PageWrite(pBuffer, WriteAddr, count);
WriteAddr += count;
pBuffer += count;
while(NumOfPage--)
{
SPI_FLASH_PageWrite(pBuffer, WriteAddr, SPI_FLASH_PageSize);
WriteAddr += SPI_FLASH_PageSize;
pBuffer += SPI_FLASH_PageSize;
}
if(NumOfSingle != 0)
{
SPI_FLASH_PageWrite(pBuffer, WriteAddr, NumOfSingle);
}
}
}
} |