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

news/2024/11/24 1:12:19/

声明:

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

问题描述:

        使用如题的结构,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个扇区,代码如下

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


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


http://www.ppmy.cn/news/168617.html

相关文章

光照的个人推导过程与GL实现

目录 1、前提知识 1.1、GL的绘图过程: 1.2、点积的规则和作用: 1.3、normalize在方向处理上的作用 2、光照控制的理论基础 2.1、自由的实现: 2.2、带有方向性的光——基于dot product的实现 最终效果演示如下: 3、关键代…

GLSL #define GL_SPIRV 100说明

GLSL #define GL_SPIRV 100说明 版权 hankern https://blog.csdn.net/hankern/article/details/90690297 Standard, Portable Intermediate Representation - V (SPIR-V) OpenGL 4.6的最大变化就是 支持SPIR-V,一种用于GPU通用计算和图形学的中间语言,…

Linux压缩与解压缩

目录 Linux压缩与解压缩 zip和unzip命令 定义 语法格式 参数及其作用 案例 素材准备 案例1 --- 使用zip也所文件test1.txt 案例2 --- 压缩率为最高压缩test2.txt 案例3 --- 将当前目录dir1连通目录下文件其压缩 实例4 --- 向压缩文件中test1.zip中添加test2.txt文件 实例5…

Mapbox-gl(not ready)

学习mapbox博文传输带vue上使用mapbox初始化第一个mapboxgeoservegeojsoncanvasMapbox-GL样式 -->sources(数据来源)和layers(界面呈现的样子)绘制点绘制线设置点的样式解决点重合问题设置线的样式线随点的移动改变3D地图的实现…

public interface GL10 extends GL

官方注释:https://www.khronos.org/registry/OpenGL-Refpages/ 有一点要注意的是 GL10 意味着 这个借口遵从 OpenGL ES 1.0 规范。(以此类推) 本片文章参考 OpenGL ES 1.1 完成 以下为私人注释。请以官方为准。 好多方法直接百度就可以找到前人的经验 /* //de…

GL线程

1 public class MiniLauncher extends AndroidApplication implements MenuActionListener {2 3 public View glView null;4 public DesktopListener mListener;5 Override6 public void onCreate(Bundle savedInstanceState) {7 8 //得到的是一个s…

Open GL的渲染流程

OpenGL渲染流程 </h1><div class"clear"></div><div class"postBody">一.什么是openGL OpenGL被定义为“图形硬件的一种软件接口”。从本质上说&#xff0c;它是一个3D图形和模型库&#xff0c;具有高度的可移植性&#xff0c;具有…

记录:微星 GE63 屏轴断裂 之后。。。

2022/11/25 记录 微星 GE63 1070 笔记本&#xff0c;使用的第三年&#xff0c;已过保了一年&#xff0c;上周使用时&#xff0c;准备合上笔记本盖。啪一下&#xff0c;左侧屏轴断裂&#xff0c;B面翘起&#xff0c;A面左下角轴盖断了一截。 网上好多人都有类似的情况&#xff…