初级会员

- 积分
- 178
- 金钱
- 178
- 注册时间
- 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;
- }
复制代码
|
|