stm32 sd

SD初始化-> SD擦除数据->SD写数据->SD读数据-> SD读写数据比较。

1. sd初始化  BSP_SD_Init();

    1.1 BSP_SD_MspInit

            CLK,引脚,DMA初始化

   1.2 HAL_SD_Init

         1.2.1 SDIO_Init

                  SD功能初始化,CLK, 位宽, 流控等初始化

         1.2.2 SD_PowerON

                  > send CMD0 ,NO RESP

                  > send CMD8 ,RESP7

                  >  send ACMD41 with Argument 0x80100000, first send CMD55 ; 知道卡的容量大小类型。

        1.2.3 SD_InitCard

                 > send CMD2,get CID info from RESP1/2/3/4, CID[4];

                 > send CMD3, get SD卡的RCA值

                 > send CMD9, 读取CSD寄存器获取卡的相关信息

                     。get Card CLASS and CSD parameters,其中CLASS可以知道卡支持的命令。

                 > send CMD7, sel and desel cmd.

                 > SDIO_Init ; 为什么还需要初始化。。-> 配置高速时钟,准备数据传输。

       /*

         以下内容摘抄与别处,未在stm32 库中发现:

             > 发送CMD55+ACMD51读取SCR寄存器,SD卡可以通过该值获得位宽,如果是MMC卡则需要使用主线测试来确定卡的位宽。

             > SD卡发送CMD55+ACMD6配置为4bit数据传输模式(根据SCR读出来的值确定),MMC卡发送CMD6来设置位宽

            > 发送CMD7,使能SD卡,使其进入传输状态),接着发送CMD16设置块大小(根据前面读取的CSD信息确定)。

            > 把命令参数设置为0,再次发送CMD7,取消选中所有卡。

     */

 

 2. SD擦除  BSP_SD_Erase(BLOCK_START_ADDR,  NUM_OF_BLOCKS);

                 > send CMD32, ERASE_GROUP_START

                 > send CMD33, erase_group_end

                 > send CMD38 erase select data area

3. SD 写数据 BSP_SD_WriteBlocks

                > send CMD16 ,set block size

                > if (block_num > 1) send CMD25,write multi block ; else send CMD24, write single block

                > config SD DPSM for data transfer,write SDIOx->DCTRL register

                > write block in polling mode

                       。SDIO_WriteFIFO,write data to SDIO Tx FIFO

                > send CMD12 to stop block data transfer

 4. SD 读数据 

                /*

                 以下内容摘抄与别处,未在stm32 库中发现

                 > 发送CMD7,以卡的相对地址为参数,选中该卡,并使其进入Tran状态

                */

                > send CMD16 ,set block size

                > if (block_num > 1) send CMD18,read multi block ; else send CMD17, read single block

                > read data from read FIFO in polling mode

                > send CMD12,stop data transfer

                > empty fifo and clear all static flags

                /*

                 以下内容摘抄与别处,未在stm32 库中发现

                 > 发送CMD7,以0作为命令参数,取消所有选中

                */

 

                

 

                  

你可能感兴趣的:(协议)