初级会员 
  
	- 积分
 - 179
 
        - 金钱
 - 179 
 
       - 注册时间
 - 2018-8-12
 
      - 在线时间
 - 100 小时
 
 
 
 | 
 
10金钱 
 本帖最后由 JUSTDY 于 2022-4-14 10:11 编辑  
 
使用W25Q64的时候显示是正常的,但使用的是W25Q128,调试的时候读取存储类型也是对的,但是文件系统读出来是下面的- //得到磁盘剩余容量
 
 - //drv:磁盘编号("0:"/"1:")
 
 - //total:总容量         (单位KB)
 
 - //free:剩余容量         (单位KB)
 
 - //返回值:0,正常.其他,错误代码
 
 - u8 exf_getfree(u8 *drv,u32 *total,u32 *free)
 
  复制代码 
total:8172 KB  free: 8164 KB  odd 99.902105:创建目录:1:/DATA-16 
下面是定义 
 
- #define SD_CARD         0  //SD卡,卷标为0
 
 - #define EX_FLASH 1        //外部flash,卷标为1
 
  
- #define FLASH_SECTOR_SIZE         512                
 
 - #define FLASH_TOTAL_SIZE         16   //M                
 
 - //对于W25Q64 
 
 - //前4.8M字节给fatfs用,4.8M字节后~4.8M+100K给用户用,4.9M以后,用于存放字库,字库占用3.09M.                                             
 
 - u16            FLASH_SECTOR_COUNT= 2048*FLASH_TOTAL_SIZE;        //4.8M字节,默认为W25Q64
 
 - #define FLASH_BLOCK_SIZE           8             //每个BLOCK有8个扇区
 
  
- //初始化磁盘
 
 - DSTATUS disk_initialize (
 
 -         BYTE pdrv                                /* Physical drive nmuber (0..) */
 
 - )
 
 - {
 
 -         u8 res=0;            
 
 -         switch(pdrv)
 
 -         {
 
 -                 case SD_CARD://SD卡
 
 -                         res = SD_Initialize();//SD_Initialize() 
 
 -                          if(res)//STM32 SPI的bug,在sd卡操作失败的时候如果不执行下面的语句,可能导致SPI读写异常
 
 -                         {
 
 -                                 SD_SPI_SpeedLow();
 
 -                                 SD_SPI_ReadWriteByte(0xff);//提供额外的8个时钟
 
 -                                 SD_SPI_SpeedHigh();
 
 -                         }
 
 -                           break;
 
 -                 case EX_FLASH://外部flash
 
 -                         W25QXX_Init();
 
 -                         FLASH_SECTOR_COUNT=2048*FLASH_TOTAL_SIZE;//W25Q1218,前12M字节给FATFS占用 
 
 -                          break;
 
 -                 default:
 
 -                         res=1; 
 
 -         }                 
 
 -         if(res)return  STA_NOINIT;
 
 -         else return 0; //初始化成功
 
 - }  
 
  
- //获得磁盘状态
 
 - DSTATUS disk_status (
 
 -         BYTE pdrv                /* Physical drive nmuber (0..) */
 
 - )
 
 - { 
 
 -         return 0;
 
 - } 
 
  
- //读扇区
 
 - //drv:磁盘编号0~9
 
 - //*buff:数据接收缓冲首地址
 
 - //sector:扇区地址
 
 - //count:需要读取的扇区数
 
 - DRESULT disk_read (
 
 -         BYTE pdrv,                /* Physical drive nmuber (0..) */
 
 -         BYTE *buff,                /* Data buffer to store read data */
 
 -         DWORD sector,        /* Sector address (LBA) */
 
 -         UINT count                /* Number of sectors to read (1..128) */
 
 - )
 
 - {
 
 -         u8 res=0; 
 
 -     if (!count)return RES_PARERR;//count不能等于0,否则返回参数错误                          
 
 -         switch(pdrv)
 
 -         {
 
 -                 case SD_CARD://SD卡
 
 -                         res=SD_ReadDisk(buff,sector,count);         
 
 -                          if(res)//STM32 SPI的bug,在sd卡操作失败的时候如果不执行下面的语句,可能导致SPI读写异常
 
 -                         {
 
 -                                 SD_SPI_SpeedLow();
 
 -                                 SD_SPI_ReadWriteByte(0xff);//提供额外的8个时钟
 
 -                                 SD_SPI_SpeedHigh();
 
 -                         }
 
 -                         break;
 
 -                 case EX_FLASH://外部flash
 
 -                         for(;count>0;count--)
 
 -                         {
 
 -                                 W25QXX_Read(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;           
 
 - }
 
  复制代码 
 
 |   
 
 
 
 
 
 |