OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5191|回复: 0

SD卡实验的一些疑问。

[复制链接]

87

主题

331

帖子

0

精华

高级会员

Rank: 4

积分
906
金钱
906
注册时间
2016-3-26
在线时间
116 小时
发表于 2017-5-12 21:54:56 | 显示全部楼层 |阅读模式
1金钱
SD_PowerON函数部分:
         /*初始化时的时钟不能大于400KHz*/
  SDIO_InitStructure.SDIO_ClockDiv = SDIO_INIT_CLK_DIV;        /* HCLK = 72MHz(HCLK不是等于168MHZ吗), SDIOCLK = 72MHz, SDIO_CK = HCLK/(178 + 2) = 400 KHz */
  SDIO_InitStructure.SDIO_ClockEdge = SDIO_ClockEdge_Rising;
  SDIO_InitStructure.SDIO_ClockBypass = SDIO_ClockBypass_Disable;  //不使用bypass模式,直接用HCLK进行分频得到SDIO_CK(这个不是使用SDIOCLK分频吗?见下图)
vvv.png
  SDIO_InitStructure.SDIO_ClockPowerSave = SDIO_ClockPowerSave_Disable;        // 空闲时不关闭时钟电源
  SDIO_InitStructure.SDIO_BusWide = SDIO_BusWide_1b;                                         //1位数据线(为什么这个是一位,后面变成四位了?)
  SDIO_InitStructure.SDIO_HardwareFlowControl = SDIO_HardwareFlowControl_Disable;//硬件流
  SDIO_Init(&SDIO_InitStructure);




        errorstatus=SD_PowerON();                        //SD卡上电
        if(errorstatus==SD_OK)errorstatus=SD_InitializeCards();                        //初始化SD卡                                                                                                                  
          if(errorstatus==SD_OK)errorstatus=SD_GetCardInfo(&SDCardInfo);        //获取卡信息
        if(errorstatus==SD_OK)errorstatus=SD_SelectDeselect((u32)(SDCardInfo.RCA<<16));//选中SD卡   
           if(errorstatus==SD_OK)errorstatus=SD_EnableWideBusOperation(SDIO_BusWide_4b);        //4位宽度,如果是MMC卡,则不能用4位模式 (之前是一位)
          if((errorstatus==SD_OK)||(SDIO_MULTIMEDIA_CARD==CardType))
        {                      
                if(SDCardInfo.CardType==SDIO_STD_CAPACITY_SD_CARD_V1_1||SDCardInfo.CardType==SDIO_STD_CAPACITY_SD_CARD_V2_0)
                {
                        clkdiv=SDIO_TRANSFER_CLK_DIV+2;        //V1.1/V2.0卡,设置最高48/4=12Mhz
                }else clkdiv=SDIO_TRANSFER_CLK_DIV;        //SDHC等其他卡,设置最高48/2=24Mhz
                SDIO_Clock_Set(clkdiv);        //设置时钟频率,SDIO时钟计算公式:SDIO_CK时钟=SDIOCLK/[clkdiv+2];其中,SDIOCLK固定为48Mhz (为什么上面设置时钟,这里又要设置时钟)
                //errorstatus=SD_SetDeviceMode(SD_DMA_MODE);        //设置为DMA模式
                errorstatus=SD_SetDeviceMode(SD_POLLING_MODE);//设置为查询模式
        }

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-17 03:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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