这几天在调试eMMC时遇到了点问题:
使用的是usdhc2,eMMC为闪迪的SDINBDG4-32G
配置如下:
初始化时停留在 mmccard_init -> MMC_SelectBusTiming -> MMC_SwitchToHighSpeed -> MMC_SetMaxDataBusWidth -> MMC_TestDataBusWidth -> MMC_SendTestPattern ->
SDMMCHOST_TransferFunction ->
SDMMC_OSAEventWait(&(host->hostEvent), SDMMCHOST_TRANSFER_DATA_EVENT,
SDMMCHOST_TRANSFER_COMPLETE_TIMEOUT, &event)
等不到 SDMMCHOST_TRANSFER_DATA_EVENT 事件
请问是否有其他需要注意的?
@zyz @楼主你好
你的eMMC是接在boot脚上吗?你有没有使用MCUBootUtility工具看看能不能连到你的eMMC呢?
还是直接跑代码的呢?你跑的代码是SDK的吗?哪个工程路径?还是自己写的代码?
Best Regards,
kerry
现在使用MCUBootUtility可以正常连接和识别,这里需要选择2(芯片内部只有USDHC1和USDHC2,按常理不是应该选择1吗)
但是现在我的eMMC驱动还是和之前一样,停留在初始化最后一步,
我明天对比一下我的驱动和flashloader,看关于eMMC的配置有什么区别
Hi @zyz ,
你看看你的硬件接在哪个口了呢?
从RT1170的SDHC启动接口看,有两组:
还是要看你硬件是接哪里了,看你boot的情况,应该是接到8线的2口了。
所以,你可以结合flashloader再去看看你的驱动是不是有问题。
希望能帮到你,如果还有问题,欢迎继续交流!
Best Regards,
kerry
你好,我尝试对比我现在的驱动和flashloader的区别,但是发现发现flashloader的驱动不是基于SDK的,差别比较大,而我现在的驱动是基于SDK生成的,目前还没发现配置上有说明大的区别;
我调试时发现我基于SDK和官方模板的驱动在执行完MMC_SendExtendedCsd这个函数后,ADMA_ERR_STATUS寄存器中的错误位置位了(ADMADCE为0x1, ADMAES为0x01),可是关于这一块相关的驱动我没有作任何改动,为什么会出现这样的错误呢?
Hi @zyz
你现在参考的代码是SDK吗?具体SDK 工程路径给我一下, 我看看。
你现在用的SDK是不是最新的,建议你用最新的SDK试试看。
还有,你在SDK工程基础上修改点也分享出来,我这边看看。
你说的:执行完MMC_SendExtendedCsd这个函数后,ADMA_ERR_STATUS寄存器中的错误位置位了(ADMADCE为0x1, ADMAES为0x01)
你也对比寄存器看看,这个是错误标志,如果你那边没有用到对应的,你可以尝试修改代码忽略错误试试看。
Best Regards,
Kerry
是的,是接在boot引脚上,但是使用MCUBootUtility连不上,提示:
1812 (0x714) Send Operation Condition failed"
我现在是直接跑代码的,SDK里面没有现成的eMMC例程,我在SD FATFS基础上修改的,将SD改成eMMC以及将USDHC1改为USDHC2而已,其他都是SDK提供的,在执行MMC_SelectBusTiming这个函数之前都是通信正常的,也就说可以可以获取cid,设置设置rca,获取csd等,但是设置卡总线宽度后(SDMMCHOST_SetCardBusWidth),执行MMC_TestDataBusWidth时失败了,等不到SDMMCHOST_TRANSFER_DATA_EVENT事件: