打印
[应用相关]

SD卡可以一次写入一个小于512字节的块吗?

[复制链接]
5370|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
DeanSinaean|  楼主 | 2010-10-10 16:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我现在可以写512的块,写小的就不行,比如我试写16字节就不行,但读16字节是没有问题的啊

SD卡的手册上说,SD卡是可以设定读写块的大小的吧?里面好像是说,可以把一个块设成0~512字节.我现在可以一次读一个16字节的块,但是不能写16字节的块.
沙发
huangqi412| | 2010-10-10 18:44 | 只看该作者
描叙不清楚。。。
贴相关代码并注释是最好的。。。

使用特权

评论回复
板凳
DeanSinaean|  楼主 | 2010-10-10 19:59 | 只看该作者
                Status = SD_Init();
          if (Status == SD_OK)
          {
            /*----------------- Read CSD/CID MSD registers ------------------*/
                        printf("If SD card initialized, get card info.\n");
            Status = SD_GetCardInfo(&SDCardInfo);
          }

          if (Status == SD_OK)
          {
            /*----------------- Select Card --------------------------------*/
                        //printf("CSD:0x%x ,CID:0x%x, Capacity:%d,Blocksize:%d,RCA:0x%x,CardType:%d\n",SDCardInfo->SD_csd,SDCardInfo->SD_cid,SDCardInfo->CardCapacity,SDCardInfo->CardBlockSize,SDCardInfo->RCA,SDCardInfo->CardType);
                        SD_ShowCID(&SDCardInfo);
                        SD_ShowCSD(&SDCardInfo);
            Status = SD_SelectDeselect((u32) (SDCardInfo.RCA << 16));
          }

//                if (Status == SD_OK)
//          {
//            Status = SD_EnableWideBusOperation(SDIO_BusWide_1b);
//          }

                if (Status == SD_OK)
          {  
            Status = SD_SetDeviceMode(SD_DMA_MODE);
                        printf("In DMA mode.\n\r");
          }
                if (Status == SD_OK)
                {
                        SD_SetBlockLen(256);
                        if( Status== SD_OK)
                                printf("Block Length set to 16 bytes.\n\r");
                }       
        //        Status = SD_Erase(0x00, 10240);
                //Status = SD_WriteBlock(0x00, Buffer_Block_Tx, BlockSize);
                Status = SD_WriteBlock(0x00, (u32 *)writeBuffer, 512);
                if (Status==SD_OK)
                {
                  printf("Read from 0x00~0x1f:\n\r");
                        //Status=SD_WriteBlock(0<<9, (u32 *)writeBuffer, 32);
                        Status=SD_ReadBlock(0x00, (u32 *)readBuffer, 32);
                }
                if(Status==SD_OK)
                {
                        pt=(u8 *)readBuffer;
                        for(i=0;i<32;i++)
                         printf("\t %d \t",*pt++);
                }
                printf("\n\r");
                if (Status==SD_OK)
                {
                  printf("Read from 0x20~0x3f:\n\r");
                        //Status=SD_WriteBlock(0<<9, (u32 *)writeBuffer, 32);
                        Status=SD_ReadBlock(0x20, (u32 *)readBuffer, 32);
                }
                if(Status==SD_OK)
                {
                        pt=(u8 *)readBuffer;
                        for(i=0;i<32;i++)
                         printf("\t %d \t",*pt++);
                }

使用特权

评论回复
地板
DeanSinaean|  楼主 | 2010-10-10 20:01 | 只看该作者
Status = SD_WriteBlock(0x00, (u32 *)writeBuffer, 512);这里512改成128或其它数就不行了.uk就是写块只能写512的块,而根据代码和数据手册,是可以块0-512之间任意大小块的.

使用特权

评论回复
5
jinfa86| | 2010-10-19 19:23 | 只看该作者
我看了很多论坛上都说,读可以比512小,写一般的新卡只支持512的整数倍。我看技术手册理解也是这样的。
但我想问下,如果在SD卡上加上文件系统,写多个少于512个字节的文件是怎么实现的,是开辟多个扇区吗?

使用特权

评论回复
6
IJK| | 2010-10-20 09:57 | 只看该作者
印象里,SD卡是否可以一次写入一个小于512字节的块,取决于具体的SD卡,一般的SD卡不支持这个特性

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:欢迎光临讨论:http://www.usr.cc

0

主题

20

帖子

1

粉丝