请问,FATFS实验中,
一、为什么要设置#define FLASH_SECTOR_SIZE 512
能不能设置成4096吗?因为SPI FLASH的扇区大小是4KB,方便减少擦除次数
二、如果只能设置成512的话,
以下红色部分的外部FLASH写操作,能不能直接改成 SPI_Flash_Write((u8*)buff,sector*FLASH_SECTOR_SIZE,FLASH_SECTOR_SIZE* count );
DRESULT disk_write (
BYTE drv, /* Physical drive nmuber (0..) */
const BYTE *buff, /* Data to be written */
DWORD sector, /* Sector address (LBA) */
BYTE count /* Number of sectors to write (1..255) */
)
{
u8 res=0;
if (!count)return RES_PARERR;//count不能等于0,否则返回参数错误
switch(drv)
{
case SD_CARD://SD卡
res=SD_WriteDisk((u8*)buff,sector,count);
break;
case EX_FLASH://外部flash
for(;count>0;count--)
{
SPI_Flash_Write((u8*)buff,sector*FLASH_SECTOR_SIZE,FLASH_SECTOR_SIZE);
sector++;
buff+=FLASH_SECTOR_SIZE;
}
res=0;
break;
default:
res=1;
}
//处理返回值,将SPI_SD_driver.c的返回值转成ff.c的返回值
if(res == 0x00)return RES_OK;
else return RES_ERROR;
}
三、为加快写速度,是不是应该对 count 进行判断,以下方式是否可行吗
case EX_FLASH://外部flash
secremain=8-sector%8;//要写入扇区的剩余可写入的sector数
while(1)
{
if(count<=secremain)//在一个FLASH扇区可以写完
{
SPI_Flash_Write((u8*)buff,sector*FLASH_SECTOR_SIZE,FLASH_SECTOR_SIZE*count);
break;
}else
{
SPI_Flash_Write((u8*)buff,sector*FLASH_SECTOR_SIZE,FLASH_SECTOR_SIZE*secremain);
count -= secremain;//
sector += secremain;//写地址偏移
buff += FLASH_SECTOR_SIZE*secremain;
if(count>8) secremain = 8; //下一个FLASH扇区还是写不完
else secremain =count; //写一个FLASH扇区可以写完啦
}
}
res=0;
break;
|