色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          "); //-->

          博客專欄

          EEPW首頁 > 博客 > 詳解 STM32 之 SD 卡(3)

          詳解 STM32 之 SD 卡(3)

          發(fā)布人:魚鷹談單片機 時間:2022-12-21 來源:工程師 發(fā)布文章

          八、SD卡疑惑

          1、SD卡擦除后,其中的內(nèi)容是0,還是1 ? 

            The data at the card after an erase operation is either '0' or '1', depends on the card vendor.The SCR register bit DATA_STAT_AFTER_ERASE (bit 55) defines whether it is '0' or '1'.(摘自《SD Specifications_Part_1_Physical_Layer_Specification_Ver3.00_Final_090416.pdf》)

            也就是說這是芯片廠商生產(chǎn)工藝決定的,可以通過SCR寄存器的 DATA_STAT_AFTER_ERASE位得知。

           2、在SDIO_DCTRL中設(shè)置傳輸Block的要求

            Block大小決定了主機在發(fā)送數(shù)據(jù)時,發(fā)送到什么程度時開始發(fā)送CRC校驗碼;而在接收數(shù)據(jù)時,在接收到什么程度時開始把SD卡的數(shù)據(jù)作為CRC校驗碼并進行校驗。Block還可能影響著其他的時序。在STM32的SDIO寄存器組中,SDIO_DCTRL中的位段DBLOCKSIZE決定主機Block大小。

            在摘自《Simplified_SD_Host_Controller_Spec.pdf》的引文中,提到這樣的配置要求:主機的Block一定要與SD卡設(shè)置的Block一樣大小,這顯然是必要的。我們經(jīng)常設(shè)置SD卡的Block大小是512Bytes,所以設(shè)置DBLOCKSIZE為9(2^9 = 512)。

           3、STM32固件庫“stm32_eval_sdio_sd.c version v4.5.0”偶遇BUG

            參考網(wǎng)頁:http://www.cprogramdevelop.com/3742318/

           4、SD卡寫B(tài)lock是怎樣進行的?

            寫SD卡的單位是Block(512Bytes),再寫之前要先整塊擦除,然后才能寫。

            在多塊寫操作中,可以在發(fā)送多塊寫命令CMD25之前,有選擇性的先發(fā)送命令A(yù)CMD23設(shè)置預(yù)擦除。怎樣理解呢?

            既然是有選擇性的,也可以不發(fā)送ACMD23命令。在多塊寫的過程中,由于SD卡事先不知道你要寫入幾個塊(CMD25命令只告訴SD卡要寫入的起始地址),所以寫入的過程是:根據(jù)需要判斷要寫一個塊時,先擦除然后再寫,再判斷是否要寫入下一個塊,如果是就再擦除再寫。

            倘若發(fā)送ACMD23命令就不一樣了,ADM23命令會在寫命令CMD25生效之前,告訴SD卡準(zhǔn)備寫入的塊數(shù)N。這樣當(dāng)CMD25命令生效的時候,SD卡會一次性先將這N個塊都擦除,然后再一個塊一個塊寫。由于擦除操作比較集中,所以整個多塊寫操作更節(jié)省時間。

          九、SD卡參數(shù)測試

            使用野火開發(fā)板配套例程做測試,筆者測試用的SD卡是金士頓的2G內(nèi)存塊,打印SD卡的參數(shù)信息如下:

          圖片

          Card Type is :1
          ManufacturerID is :2

          Card device size is :3795
          Card Block Size is :1024
          Card device size multiplier is :7
          Card Capacity is :1990197248

          the maximum read date block length is :1024
          partial blocks for write allowed is :0
          the maximum write date block length is :1024
          erase single block enable is :1
          erase sector size is :127
          write protect group size is :0
          RCA is :4660 

          圖片

          Card Type:1         SDSC卡版本2.0

          Card device size:  C_SIZE(CSD),為3795

          Card Block Size:  max read data block length(READ_BL_LEN(CSD)) ,為1024 Bytes

          Card device size multiplier is:  C_SIZE_MULT(CSD),為7

          Card Capacity:  1990197248 Bytes

          計算方法(摘自《Simplified_Physical_Layer_Spec.pdf》):

          memory capacity = BLOCKNR * BLOCK_LEN
           
            BLOCKNR = (C_SIZE+1) * MULT  (C_SIZE <= 4096
            MULT = 2^(C_SIZE_MULT+2)        (C_SIZE_MULT < 8)
            BLOCK_LEN = 2^READ_BL_LEN,    (READ_BL_LEN < 12)

          注意:SDSC最大為2GB。

          the maximum read date block length:READ_BL_LEN(CSD) ,為1024 Bytes

          partial blocks for write allowed:WRITE_BL_PARTIAL(CSD),為不支持

          the maximum write date block length:WRITE_BL_LEN(CSD) ,為1024 Bytes

          erase single block enable:ERASE_BLK_EN(CSD),為1,支持單塊擦除

          erase sector size:SECTOR_SIZE(CSD),實際扇區(qū)擦除的block數(shù)為(SECTOR_SIZE+1),為128 Blocks

          write protect group size:WP_GRP_SIZE(CSD),實際保護的扇區(qū)數(shù)為(WP_GRP_SIZE+1),為1 Sector

          RCA: SD卡相對地址為4660

           

          參考資料:《Simplified_SDIO_Card_Spec.pdf》

               《Simplified_Physical_Layer_Spec.pdf》

                 《Simplified_SD_Host_Controller_Spec.pdf》

               《STM32芯片手冊》


          *博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。



          關(guān)鍵詞: 單片機

          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉