野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 18766|回复: 4

sd卡容量读取问题

[复制链接]
发表于 2016-12-12 19:25:46 | 显示全部楼层 |阅读模式
1火花
用指南者开发版烧录SDIO-FATFS移植与读写测试,把FLASH中的读取容量的代码移植过来,读取SD卡容量,发现读取的数据是错的,128m的卡,读出来978m,不知道什么情况?请各位大神帮忙解答,谢谢了

回复

使用道具 举报

发表于 2016-12-12 19:30:03 | 显示全部楼层
直接用例程读取的是什么结果
回复

使用道具 举报

 楼主| 发表于 2016-12-13 08:32:54 | 显示全部楼层
例程,没有读取SD卡容量的啊,只有读取flash的
回复

使用道具 举报

 楼主| 发表于 2016-12-13 09:47:07 | 显示全部楼层
flyleaf 发表于 2016-12-12 19:30
直接用例程读取的是什么结果

11.png 22.png
读取4GTF卡容量以及读取128MTF卡容量得到的结果 SDIO—FatFs移植与读写测试.rar (5.52 MB, 下载次数: 19)
回复

使用道具 举报

发表于 2016-12-13 11:59:23 | 显示全部楼层
子夜听雨 发表于 2016-12-13 09:47
读取4GTF卡容量以及读取128MTF卡容量得到的结果

参考diskio.c文件里的ioctl函数:GET_SECTOR_COUNT*512就是卡的容量:
  1. #if _USE_IOCTL
  2. DRESULT disk_ioctl (
  3.         BYTE pdrv,                /* 物理编号 */
  4.         BYTE cmd,                  /* 控制指令 */
  5.         void *buff                /* 写入或者读取数据地址指针 */
  6. )
  7. {
  8.         DRESULT status = RES_PARERR;
  9.         switch (pdrv) {
  10.                 case ATA:        /* SD CARD */
  11.                         switch (cmd)
  12.                         {
  13.                                 // Get R/W sector size (WORD)
  14.                                 case GET_SECTOR_SIZE :   
  15.                                         *(WORD * )buff = SD_BLOCKSIZE;
  16.                                 break;
  17.                                 // Get erase block size in unit of sector (DWORD)
  18.                                 case GET_BLOCK_SIZE :      
  19.                                         *(DWORD * )buff = 1;
  20.                                 break;

  21.                                 case GET_SECTOR_COUNT:
  22.                                         *(DWORD * )buff = SDCardInfo.CardCapacity/SDCardInfo.CardBlockSize;
  23.                                         break;
  24.                                 case CTRL_SYNC :
  25.                                 break;
  26.                         }
  27.                         status = RES_OK;
  28.                         break;
  29.    
  30.                 case SPI_FLASH:                     
  31.                 break;
  32.    
  33.                 default:
  34.                         status = RES_PARERR;
  35.         }
  36.         return status;
  37. }
  38. #endif
复制代码


回复

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-18 05:41 , Processed in 0.050401 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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