CH32V307 EMMC例程出现问题

使用最新官网例程?

版本:2.4 上传时间: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);
}


在主函数中,

eMMC_Change_Tran_Mode();

之前的步骤均可以正常运行,并且可以拿到卡的CID、CSD等卡参数,读到卡容量和扇区大小。但是调用

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

等函数就会失败,直接返回fail。

请问应该如何解决?这个问题是否跟分区有关?需要切换到EMMC的UAR区才能进行读写?但是我看ST的参考EMMC例程似乎也没有进行切换,就可以顺利读写了?

附带调试串口信息:

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



您好,你可以将主频设置为144MHz,然后在eMMC_Init初始化函数当中将分频系数修改一下试一下,如下图。后续若有问题,可通过邮箱(lzs@wch.cn)沟通。

image.png



好的 问题已解决, 建议更新例程中的代码


只有登录才能回复,可以选择微信账号登录