|

楼主 |
发表于 2015-4-16 12:16:14
|
显示全部楼层
回 eric2013 的帖子
我是从spi的芯片里面读取数据再写入到nor flash里面,从spi里面读出的数据是对的
void W25Qxx_FastReadBytes_WriteToNorFlash(void)
{
// 16*16的汉字库,带符号,16*16/8*8178
u32 ReadAddr = 2 * 4096uL; // 2 表示在spi flash 里面的起始扇区
uint32_t uiAddress;
u8 spidat[64] = {0}; //读出64 Byte 数据
u8 _spidat[64] = {0};
u16 i;
u16 databyte0;
for(i=126; i<=127; i++)
{
NOR_EraseSector(i * NOR_SECTOR_SIZE); //擦除扇区,每扇区128KByte
printf("\\r\\nNOR Flash Erase Sector = %d", i);
}
databyte0 = ((16*16/8*8178)/64); //计算for 循环次数
printf("\\r\\n开始向NOR Flash 写入数据,请等待... ...");
bsp_DelayMS(1000);
// 每次读取64字节后再写入到NOR Flash里面,
for(i=0;i<databyte0;i++)
{
W25Q128_FastReadBytes(SPI1, ReadAddr+(i*64), spidat, 64); //从spi的flash里面读取64字节
uiAddress = (126 * NOR_SECTOR_SIZE) + (64 * i); //126 是需要写入 nor flash 的扇区号,最大0-127,每扇区128KByte
NOR_WriteBuffer(spidat, uiAddress, 64); //此函数不能够跨页写,一次最大只能写入64字节
}
bsp_DelayMS(1000);
//======================================================================================================
//读取数据对比,前32字节正确,后32字节全部为0
i --;
uiAddress = (126 * NOR_SECTOR_SIZE) + (64 * i);
NOR_ReadBuffer(_spidat, uiAddress, 64);
for(i=0;i<64;i++)
{
printf("%02x", _spidat); //发送给pc机显示
}
} |
|