OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4241|回复: 1

W25Q28 从扇区0 挂载文件系统失败,但是偏移扇区(比如偏移1M)则可以挂载成功,大家有遇到过吗?

[复制链接]

5

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2021-6-25
在线时间
50 小时
发表于 2022-7-22 10:05:32 | 显示全部楼层 |阅读模式
使用的是FatFs文件系统,diskio.c 几个重要函数如下:
搞不懂为什么从0扇区挂载不了,但是偏移扇区挂载可以挂载成功?

/*-----------------------------------------------------------------------*/
/* 读扇区:读取扇区内容到指定存储区                                              */
/*-----------------------------------------------------------------------*/
DRESULT disk_read (
        BYTE pdrv,                /* 设备物理编号(0..) */
        BYTE *buff,                /* 数据缓存区 */
        DWORD sector,        /* 扇区首地址 */
        UINT count                /* 扇区个数(1..128) */
)
{
        DRESULT status = RES_PARERR;
        switch (pdrv) {
                case ATA:        /* SD CARD */
                        break;

                case SPI_FLASH:
                        /* 扇区偏移0.5MB,外部Flash文件系统空间放在SPI Flash后面15.5MB空间 */   
                        sector += 128;      //改为sector++; 偏移0扇区会挂载失败
                        W25QXX_Read(buff, sector <<12, count<<12);
                        status = RES_OK;
                        break;

                default:
                        status = RES_PARERR;
                        break;
        }
        return status;
}


/*-----------------------------------------------------------------------*/
/* 写扇区:见数据写入指定扇区空间上                                      */
/*-----------------------------------------------------------------------*/
DRESULT disk_write (
        BYTE pdrv,                          /* 设备物理编号(0..) */
        const BYTE *buff,        /* 欲写入数据的缓存区 */
        DWORD sector,                  /* 扇区首地址 */
        UINT count                          /* 扇区个数(1..128) */
)
{
  uint32_t write_addr;
        DRESULT status = RES_PARERR;
        if (!count) {
                return RES_PARERR;                /* Check parameter */
        }

        switch (pdrv) {
                case ATA:        /* SD CARD */      
                         break;

                case SPI_FLASH:
               /* 扇区偏移0.5MB,外部Flash文件系统空间放在SPI Flash后面15.5MB空间 */
                        sector += 128;
                        write_addr = sector<<12;   
                        W25QXX_Erase_Sector(write_addr);
                        W25QXX_Write((u8 *)buff,write_addr,count<<12);
                        status = RES_OK;
                       break;

                default:
                       status = RES_PARERR;
                       break;
        }
        return status;
}



DRESULT disk_ioctl (
        BYTE pdrv,                /* 物理编号 */
        BYTE cmd,                  /* 控制指令 */
        void *buff                /* 写入或者读取数据地址指针 */
)
{
        DRESULT status = RES_PARERR;
        switch (pdrv) {
                case ATA:        /* SD CARD */
                        break;

                case SPI_FLASH:
                        switch (cmd) {
                        /* 扇区数量:3968*4096/1024/1024=15.5(MB) */
                               case GET_SECTOR_COUNT:
                                          *(DWORD * )buff = 3968;               
                                          break;
                          /* 扇区大小  */
                              case GET_SECTOR_SIZE :
                                         *(WORD * )buff = 4096;
                                         break;
                           /* 同时擦除扇区个数 */
                             case GET_BLOCK_SIZE :
                                        *(DWORD * )buff = 1;
                                        break;        
                           }
                           status = RES_OK;
                           break;

                default:
                        status = RES_PARERR;
                        break;
        }
        return status;
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

643

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2432
金钱
2432
注册时间
2019-12-28
在线时间
527 小时
发表于 2022-7-22 11:11:25 | 显示全部楼层
没有怎么了解过fatfs,帮顶
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-25 12:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表