赞助论坛
  • 4836阅读
  • 0回复

fatfs文件系统移植的disk_ioctl实现问题 [复制链接]

楼层直达
发帖
12
精华
0
金币
-8
威望
1
贡献
0
好评
0
注册
2012-05-22
楼主    天涯奇人 发表于: 2012-08-08 19:43:48 
[size=3]这里有几个问题:
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,也就是一页的大小.
这些好像跟字面意思都不对应?请解释下

移植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字节,那么这些地方应该如何返回?