CH32V307V SD卡 死在FindSCR 函數(shù)

使用官方的 示例代碼中的 SDIO_SD工程。

自己做的評(píng)估板,想同時(shí)使用 10M ETH PHY, 和 SD卡。 看到datasheet中可以將PB14,PB15作為 SDIO_D1和 SDIO_DO 使用。

1729241418128290.png

1729241419135835.png

SD_Error?SD_Init(?void?)
{
????NVIC_InitTypeDef?NVIC_InitStructure;
????GPIO_InitTypeDef??GPIO_InitStructure;

????u8?clkdiv?=?0;
????SD_Error?errorstatus?=?SD_OK;

????RCC_APB2PeriphClockCmd(?RCC_APB2Periph_GPIOC?|RCC_APB2Periph_GPIOB?|?RCC_APB2Periph_GPIOD,?ENABLE?);
????RCC_AHBPeriphClockCmd(?RCC_AHBPeriph_SDIO?|?RCC_AHBPeriph_DMA2,?ENABLE?);

????GPIO_InitStructure.GPIO_Pin?=??GPIO_Pin_10?|?GPIO_Pin_11?|?GPIO_Pin_12;
????GPIO_InitStructure.GPIO_Mode?=?GPIO_Mode_AF_PP;
????GPIO_InitStructure.GPIO_Speed?=?GPIO_Speed_50MHz;
????GPIO_Init(?GPIOC,?&GPIO_InitStructure?);


????GPIO_InitStructure.GPIO_Pin?=?GPIO_Pin_14?|?GPIO_Pin_15;
????GPIO_InitStructure.GPIO_Mode?=?GPIO_Mode_AF_PP;
????GPIO_InitStructure.GPIO_Speed?=?GPIO_Speed_50MHz;
????GPIO_Init(?GPIOB,?&GPIO_InitStructure?);


????GPIO_InitStructure.GPIO_Pin?=?GPIO_Pin_2;
????GPIO_InitStructure.GPIO_Mode?=?GPIO_Mode_AF_PP;
????GPIO_InitStructure.GPIO_Speed?=?GPIO_Speed_50MHz;
????GPIO_Init(?GPIOD,?&GPIO_InitStructure?);

????GPIO_InitStructure.GPIO_Pin?=?GPIO_Pin_4;
????GPIO_InitStructure.GPIO_Mode?=?GPIO_Mode_Out_PP;
????GPIO_Init(?GPIOD,?&GPIO_InitStructure?);
????GPIO_ResetBits(GPIOD,?GPIO_Pin_4);
????SDIO_DeInit();

????NVIC_InitStructure.NVIC_IRQChannel?=?SDIO_IRQn;
????NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority?=?0;
????NVIC_InitStructure.NVIC_IRQChannelSubPriority?=?0;
????NVIC_InitStructure.NVIC_IRQChannelCmd?=?ENABLE;
????NVIC_Init(?&NVIC_InitStructure?);

????errorstatus?=?SD_PowerON();

????if(?errorstatus?==?SD_OK?)
????{
????????errorstatus?=?SD_InitializeCards();
????}

????if(?errorstatus?==?SD_OK?)
????{
????????errorstatus?=?SD_GetCardInfo(?&SDCardInfo?);
????}

????if(?errorstatus?==?SD_OK?)
????{
????????errorstatus?=?SD_SelectDeselect(?(?u32?)(?SDCardInfo.RCA?<<?16?)?);
????}

????if(?errorstatus?==?SD_OK?)
????{
????????errorstatus?=?SD_EnableWideBusOperation(?1?);
????}

????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?+?6;
????????}
????????else
????????{
????????????clkdiv?=?SDIO_TRANSFER_CLK_DIV?+?1;
????????}
????????SDIO_Clock_Set(?clkdiv?);

????????errorstatus?=?SD_SetDeviceMode(?SD_POLLING_MODE?);
????}
????return?errorstatus;
}



------------------------

不知道為什么 會(huì)卡在 FindSCR 函數(shù)中


微信截圖_20241018165505.png


另外 一塊 同樣的電路板,直接CmdResp1Error,現(xiàn)象還不一樣


----------------------------------

能給點(diǎn)提示嗎? 同時(shí)使用 10M Eth 和sd卡 ,可以嗎?使用PB14,PB15作為 SDIO_D1,SDIO_D0, 有什么特殊要求嗎?

檢查了一遍電路,沒(méi)有問(wèn)題。? SDIO的布線有 等長(zhǎng)要求嗎?


您好,如下圖,對(duì)于使用PB14和PB15作為SDIO D0和D1是有要求的,具體可看數(shù)據(jù)手冊(cè)注7,此外注7描述的那幾個(gè)寄存器對(duì)應(yīng)位要進(jìn)行使能和配置。

image.png


批號(hào) 31102FD12 , 倒數(shù) 第五位 是2, 也就是滿足使用 PB14 PB15作為 SDIO引腳的條件。

只是 使用PB14 PB15 作為SDIO 引腳 時(shí), 需要 ETHMACEN =1 ,才行。

?我測(cè)試一下


果然,在使能時(shí)鐘時(shí),增加RCC_AHBPeriph_ETH_MAC 就可以了。 多謝啦

RCC_AHBPeriphClockCmd(?RCC_AHBPeriph_SDIO?|RCC_AHBPeriph_ETH_MAC|?RCC_AHBPeriph_DMA2,?ENABLE?);




只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频