网上有一篇文档:移植FATFS的NANDFLASH驱动,里边的实现是:
/* FSMC NAND memory HY27UF081G2A-TPCB parameters */
#define NAND_PAGE_SIZE ((uint16_t)0x0800) /* 2048 bytes per page w/o Spare Area */
#define NAND_BLOCK_SIZE ((uint16_t)0x0040) /* 64x2048 bytes pages per block */
#define NAND_ZONE_SIZE ((uint16_t)0x0200) /* 512 Block per zone */
#define NAND_SPARE_AREA_SIZE ((uint16_t)0x0040) /* last 64 bytes as spare area */
#define NAND_MAX_ZONE ((uint16_t)0x0002) /* 2 zones of 1024 block */
DRESULT disk_ioctl (BYTE drv,BYTE ctrl, void *buff)
{
DRESULT res = RES_OK;
uint32_t result;
if (drv){ return RES_PARERR;}
switch(ctrl)
{
case CTRL_SYNC:
break;
case GET_BLOCK_SIZE:
*(DWORD*)buff = NAND_BLOCK_SIZE;
break;
case GET_SECTOR_COUNT:
*(DWORD*)buff = (((NAND_MAX_ZONE/2) * NAND_ZONE_SIZE) * NAND_BLOCK_SIZE);
break;
case GET_SECTOR_SIZE:
*(WORD*)buff = NAND_PAGE_SIZE;
break;
default:
res = RES_PARERR;
break;
}
return res;
}
这里有几个问题:
1.GET_BLOCK_SIZE不是获取块的大小吗?这里返回是NAND_BLOCK_SIZE,其实就是64,即一块的页数,怎么解释?
2.GET_SECTOR_COUNT不是获取扇区个数吗?这里返回的是(((NAND_MAX_ZONE/2) * NAND_ZONE_SIZE) * NAND_BLOCK_SIZE);也就是整个flash所有的页数
3.GET_SECTOR_SIZE不是获取扇区大小吗?这里返回的是NAND_PAGE_SIZE,也就是一页的大小.
这些好像跟字面意思都不对应?请解释下
另外我要移植到nor flash上,我的型号是am29lv160db,只有一个快,没有page,总共2M字节,那么这些地方应该如何返回? |