CH32V307 EMMC例程出現(xiàn)問題

使用最新官網(wǎng)例程?

版本:2.4 上傳時(shí)間:2024-03-11


下面是錯誤定位代碼:

int?main(void)
{
	u32?i;
	u32?Sector_Nums;

	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

	SystemCoreClockUpdate();
	Delay_Init();
	USART_Printf_Init(115200);
	printf("SystemClk:%d\r\n",?SystemCoreClock);
	printf("ChipID:%08x\r\n",?DBGMCU_GetCHIPID());
	while(eMMC_Init())
	{
		printf("eMMC?Card?Error!\r\n");
		delay_ms(1000);
	}
	show_eMMCcard_info();
	printf("eMMC?Card?initial?OK!\r\n");
	Sector_Nums?=?((u32)?(eMMCCardInfo.SectorNums));
	eMMC_Change_Tran_Mode();

	for?(i?=?0;?i?<?512;?i++)
	{
		buf[i]?=?i;
	}
	for?(i?=?0;?i?<?Sector_Nums;?i++)
	{
		if?(SD_WriteDisk(buf,?i,?1))
		{
			printf("Wr?%d?sector?fail\n",?i);
		}
		else
		{
			printf("Wr?%d?sector?success\n",?i);
		}
		if?(SD_ReadDisk(Readbuf,?i,?1))
		{
			printf("Rd?%d?sector?fail\n",?i);
		}
		else
		{
			printf("Rd?%d?sector?success\n",?i);
		}
		if?(memcmp(buf,?Readbuf,?512))
		{
			printf("?%d?sector?Verify?fail\n",?i);
			break;
		}
	}
	printf("end\n");
	while(1);
}


在主函數(shù)中,

eMMC_Change_Tran_Mode();

之前的步驟均可以正常運(yùn)行,并且可以拿到卡的CID、CSD等卡參數(shù),讀到卡容量和扇區(qū)大小。但是調(diào)用

SD_WriteDisk(buf,i,1)
SD_ReadDisk(Readbuf,i,1)

等函數(shù)就會失敗,直接返回fail。

請問應(yīng)該如何解決?這個(gè)問題是否跟分區(qū)有關(guān)?需要切換到EMMC的UAR區(qū)才能進(jìn)行讀寫?但是我看ST的參考EMMC例程似乎也沒有進(jìn)行切換,就可以順利讀寫了?

附帶調(diào)試串口信息:

SystemClk:96000000
ChipID:30700528
Card?Type:eMMC?Card
Card?ManufacturerID:0x15
Card?SectorNums:0x03a3e000
Card?Capacity:29696?MB
Card?BlockSize:512B
eMMC?Card?initial?OK!
Wr?0?sector?fail
Rd?0?sector?fail
?0?sector?Verify?fail
end



您好,你可以將主頻設(shè)置為144MHz,然后在eMMC_Init初始化函數(shù)當(dāng)中將分頻系數(shù)修改一下試一下,如下圖。后續(xù)若有問題,可通過郵箱(lzs@wch.cn)溝通。

image.png



好的 問題已解決, 建議更新例程中的代碼


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

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