读书人

SD 卡 format 有关问题

发布时间: 2012-04-18 15:01:59 作者: rapoo

SD 卡 format 问题。
在三菱的单片机M16cN4。进行Format SD卡 FAT16 格式。


在发送CMD9命令取得卡的块数之后。发现返回的块数,与Windows下通过用WinHex查看的块数不一样。少了很多。

目前在Windows下得到的块数为 19w之多。
在单片机里面取得的块数为16w之多。

所以Format的时候少了很多容量

以上是1G kinston SD卡。。在Windows下格式化有974M。
在单片机里面格式化只有 780M左右。

请问,有谁知道中间有什么差别吗?

谢谢了。
switch (ctrl) {
case GET_SECTORS :/* Get number of sectors on the disk (unsigned long) */
if ((send_cmd(CMD9, 0) == 0) && rcvr_datablock(csd, 16/2)) {
/* Calculate disk size */
csm = 1 < < (((csd[10] & 128) > > 7) + ((csd[9] & 3) < < 1) + 2);
csize = ((uint16)(csd[8] & 3) > > 6) + (uint16)(csd[7] < < 2) + ((uint16)(csd[6] & 3) < < 10) + 1;
*(uint32*)buff = (uint32)csize * csm;
res = RES_OK;
}
break;

case MMC_GET_CSD :/* Receive CSD as a data block (16 bytes) */
if ((send_cmd(CMD9, 0) == 0)/* READ_CSD */
&& rcvr_datablock(buff, 16/2))
res = RES_OK;
break;

case MMC_GET_CID :/* Receive CID as a data block (16 bytes) */
if ((send_cmd(CMD10, 0) == 0)/* READ_CID */
&& rcvr_datablock(buff, 16/2))
res = RES_OK;
break;

case MMC_GET_OCR :/* Receive OCR as an R3 resp (4 bytes) */
if (send_cmd(CMD58, 0) == 0) {/* READ_OCR */
for (n = 0, p = buff; n < 4; n++)
*p++ = rcvr_spi();
res = RES_OK;
}
break;

default:
res = RES_PARERR;

[解决办法]
我在Format的时候经常报错,不知道是不是这个原因

读书人网 >驱动开发

热点推荐