|
问题描述:. r9 |( P% i, c9 J6 @& p 使用如题的结构,STM32将数据存储在EMMC上,电脑通过GL3227E(下文都简称3227)读取EMMC中的数据。使用STM32对EMMC进行格式化(一个主分区,exFAT)后,连接电脑后,发现并不能识别文件系统,必须用电脑重新格式化后才能使用;且电脑格式化之后,STM32再往EMMC里写数据,能确定已经写到了里面,但是连接电脑,却看不到任何STM32写进去的文件。
m- u) `& @/ h( x 测试代码,电脑格式化后,STM32能写能读,但是电脑读不到写进去的文件 ' o6 ]" J: I/ y% \ 解决过程:4 M. ]/ U4 p7 I; Z1 k0 ] 用了很多方法去尝试解决这个问题,就不一一赘述了,直接讲最终解决办法的实现过程 {) F: I" i: Q" n) T: Y6 n) m2 ] 根据经验,怀疑问题是出在分区表上(关于分区表我之前有写过点击查看),于是先使用STM32对EMMC进行格式化,对0扇区进行查看,如下图
可以发现分区从扇区0x3F(63)开始,于是继续查看63扇区,如下图$ U Y) L+ ]' ^# \
发现开头为0xEB 0x76 0x90 “EXFAT”,满足exFAT的卷格式,说明分区表没啥问题: o- |, a& D0 {3 j( V- Q( W5 T# t; L' k 我们继续,使用电脑通过3227对EMMC进行分区(2048对齐),并格式化,使用winhex对磁盘进行查看,首先是0扇区,如下图8 t4 _* p4 U' G, [9 O ) U* Y& P- y2 g7 P
$ ~! Q+ ~ M0 C" P5 q* {( J4 Y* m( H 由于电脑分区时使用了2048字节对齐,我们可以看到分区表上,分区也的确是从0x0800(扇区2048)开始,我继续使用STM32对EMMC的扇区0进行查看(这一次没有使用STM32进行格式化操作),发现数据还是和之前一样
* m6 s) P, }8 `0 c7 Q6 R# Z 是不是发现端倪了?电脑通过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扇区应该是个有效的猜测。- `3 o! B) L$ P. b6 _6 W3 S% K 解决方案:3 ~' c. }2 r8 p3 x% k( E# q, x 修改了STM32上user_diskio.c文件,使之访问EMMC时,和3227保持一致,均偏移256个扇区,代码如下 # p) J! s# E& r6 d, x ~! J
6 k/ h% b4 T/ j$ M8 K! D* i 重复文章开头问题描述中的流程,问题消失,成功解决。! w7 ?8 W2 X4 D7 L: t v ————————————————+ w: n" t+ U9 x, D+ ]$ V0 u 版权声明:balibala , b( i0 a$ p1 b( j |
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
Keil-MDK 在线调试设置断点的高级用法
请教下STM32N6570 怎么把分辨率改成320x240并可以全屏显示
【福利三:逢7发帖赢大礼】想要充分利用STM32H743VI片内的RAM空间(但并不顺利)
基于stm32平台上的IC-MU磁绝对值编码器SPI通讯和码盘数据处理
使用STM32 MCU和MPU连接PDM数字麦克风
分享STM32资料-采用 STM32U031R8 MCU 的 STM32 Nucleo-64 开发板,官方资料,数据手册等资料
HRTIM 指南
使用 STM32 的 DWT 单元监控内存
DAC,COMP,HRTIM Fault 功能的使用
微信公众号
手机版