初级会员

- 积分
- 108
- 金钱
- 108
- 注册时间
- 2014-12-18
- 在线时间
- 6 小时
|
发表于 2014-12-30 11:20:25
|
显示全部楼层
//页分组,对一组写数据
uint32_t Flash_Write_r(uint8_t* pBuffer,uint32_t num, uint16_t NumByteToWrite_r)
{
uint32_t num_buf=num;
uint16_t i;
uint16_t paddr,offaddr;
paddr = num_buf/(SPI_FLASH_PageSize/NUMByte) + page_f;
offaddr = (num_buf%(SPI_FLASH_PageSize/NUMByte))*NUMByte;
if(paddr>=SPI_FLASH_PageNum)return 0;
if(NumByteToWrite_r <= NUMByte)
{
F_CS_DISABLE();
DF_mm_to_buf(1,paddr);
if(DF_wait_busy()==0)return 0;
F_CS_ENABLE();
SPI1_ReadWriteByte(BUFFER_1_WRITE);
SPI1_ReadWriteByte(0x00);
SPI1_ReadWriteByte((uint8_t)(offaddr>>8));
SPI1_ReadWriteByte((uint8_t)offaddr);
for (i=0;i<NumByteToWrite_r;)
{
SPI1_ReadWriteByte(*pBuffer);
pBuffer++;
i++;
}
}
F_CS_DISABLE();
DF_buf_to_mm(1,paddr);
num_buf = num_buf + 1;
return num_buf;//统计写次数,这样可以算出来页地址和偏移地址
}
这程序不可以对当前页的首地址写数据吗?为什么读不来额?
//读取一组数据
void Flash_Read_r(uint8_t* pBuffer, uint32_t num_start,uint16_t NumByteToRead_r)
{
uint16_t offaddr,paddr;
uint32_t i;
paddr = (num_start/(SPI_FLASH_PageSize/NUMByte)) + page_f;
offaddr = (num_start%(SPI_FLASH_PageSize/NUMByte))*NUMByte;
if(NumByteToRead_r > NUMByte) return;
DF_mm_to_buf(1,paddr);
if(DF_wait_busy()==0)return;
F_CS_ENABLE();
SPI1_ReadWriteByte(BUFFER_1_READ);
SPI1_ReadWriteByte(0x00);
SPI1_ReadWriteByte((uint8_t)(offaddr>>8));
SPI1_ReadWriteByte((uint8_t)offaddr);
SPI1_ReadWriteByte(0x00);
for (i=0;i<NumByteToRead_r;)
{
*pBuffer=SPI1_ReadWriteByte(0xff);
pBuffer++;
i++;
}
F_CS_DISABLE();
}
我用FOR语句写75组数据,然后再用FOR语句读取75条数据,发现每一页的首地址丢失,但是我调用读函数,只读当前页的首地址有时可以显示的有时不可以显示,原子哥,这是为什么?谢谢
|
|