调试STM32+EMMC+GL3227E(固件1857,1858,1859)遇到的问题

声明:

        记录下我自己的调试过程,一是给自己看,记录点滴;二也是分享给大家,在碰到类似的问题时,提供些许的思路。

问题描述:

        使用如题的结构,STM32将数据存储在EMMC上,电脑通过GL3227E(下文都简称3227)读取EMMC中的数据。使用STM32对EMMC进行格式化(一个主分区,exFAT)后,连接电脑后,发现并不能识别文件系统,必须用电脑重新格式化后才能使用;且电脑格式化之后,STM32再往EMMC里写数据,能确定已经写到了里面,但是连接电脑,却看不到任何STM32写进去的文件。

测试代码,电脑格式化后,STM32能写能读,但是电脑读不到写进去的文件


 解决过程:

        用了很多方法去尝试解决这个问题,就不一一赘述了,直接讲最终解决办法的实现过程

        根据经验,怀疑问题是出在分区表上(关于分区表我之前有写过点击查看),于是先使用STM32对EMMC进行格式化,对0扇区进行查看,如下图 

可以发现分区从扇区0x3F(63)开始,于是继续查看63扇区,如下图

 发现开头为0xEB 0x76 0x90 “EXFAT”,满足exFAT的卷格式,说明分区表没啥问题

我们继续,使用电脑通过3227对EMMC进行分区(2048对齐),并格式化,使用winhex对磁盘进行查看,首先是0扇区,如下图

 由于电脑分区时使用了2048字节对齐,我们可以看到分区表上,分区也的确是从0x0800(扇区2048)开始,我继续使用STM32对EMMC的扇区0进行查看(这一次没有使用STM32进行格式化操作),发现数据还是和之前一样

是不是发现端倪了?电脑通过3227对EMMC的分区表进行修改后(也能看到的确修改成功了),STM32却并未查看到分区表被修改。这两种查看分区表的方式都是查看的“各自所认为的扇区0”,STM32看到的是“实际的EMMC的扇区0”,而电脑是通过3227看到的他“所谓的扇区0”,因此电脑“通过3227看到的扇区0”可能不是“实际的扇区0”。

        这款芯片并没有什么加密,我猜测可能是3227读取的扇区有一定的偏移。于是我在STM32中添加了一段代码,在EMMC中去寻找“电脑通过3227看到的扇区0”。果不其然,在扇区256看到了相同的数据。这可是个好消息,于是我在winhex上又找了几个扇区的数据,使用STM32在偏移256扇区的地方均找到了相同的数据。结合之前“电脑通过3227修改分区表并没有修改EMMC实际扇区0上的分区表”这一现象,我认为3227在操作EMMC时偏移256扇区应该是个有效的猜测。


 解决方案:

        修改了STM32上user_diskio.c文件,使之访问EMMC时,和3227保持一致,均偏移256个扇区,代码如下

        重复文章开头问题描述中的流程,问题消失,成功解决。


        最后,文章中可能出现错误,如有发现,欢迎指正,大家一起进步! 

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
STM32F103是STMicroelectronics推出的32位ARM Cortex-M3内核的微控制器系列。它具有丰富的外设和功能,广泛应用于各种嵌入式系统中。 Emmc是一种嵌入式多媒体卡(eMMC)的简称,它是一种用于存储数据的闪存存储解决方案。与传统的SD卡相比,eMMC集成了闪存存储器和控制器,并通过一个标准的接口与主机进行通信。 要在STM32F103上实现eMMC驱动程序,可以按照以下步骤进行: 1. 了解eMMC的工作原理和通信协议。eMMC使用SPI或SD/MMC接口与主机进行通信,需要了解其注册、命令和数据传输等相关协议。 2. 配置STM32F103的外设和引脚。根据eMMC的通信协议,配置STM32F103的SPI或SD/MMC接口。选择合适的引脚和时钟,设置寄存器和标志位。 3. 编写初始化函数。初始化eMMC的控制器,并设置读写时钟频率、数据位宽、时序等参数。根据eMMC的规格书进行配置。 4. 实现命令和数据传输函数。根据eMMC的规格书,实现发送命令、接收应答、读写数据等函数。 5. 实现读写操作函数。根据应用需求,实现读取和写入eMMC存储器的函数。可以使用DMA或中断方式进行数据传输。 6. 编写错误处理和状态检测代码。在驱动程序中处理各种错误情况,并提供状态检测函数以供应用程序使用。 7. 进行测试和调试。使用信号分析仪、示波器等工具对eMMC驱动程序进行测试和调试,确保其正常工作和稳定性。 最后,需要提醒的是,实现eMMC驱动程序需要深入了解STM32F103的外设和寄存器编程,以及eMMC的通信协议和操作流程。此外,根据具体的应用需求,可能需要对驱动程序进行定制和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值