你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
攻城狮Melo 发布时间:2022-11-4 16:22
问题描述:) a/ f* N3 U! h1 V! `9 ^$ I; i
        使用如题的结构,STM32将数据存储在EMMC上,电脑通过GL3227E(下文都简称3227)读取EMMC中的数据。使用STM32对EMMC进行格式化(一个主分区,exFAT)后,连接电脑后,发现并不能识别文件系统,必须用电脑重新格式化后才能使用;且电脑格式化之后,STM32再往EMMC里写数据,能确定已经写到了里面,但是连接电脑,却看不到任何STM32写进去的文件。0 {7 f8 M+ B4 x) F; o$ T* a

# z& S: P, j! g8 @8 z 20210823092526672.png , B5 p4 A5 W4 k3 d4 W

- D4 f' I: x" X- _- L# ^, h测试代码,电脑格式化后,STM32能写能读,但是电脑读不到写进去的文件
# W1 R" @2 {/ {! F6 A8 k6 V" i" y) `7 W) r: n* f9 {
解决过程:
7 b7 }2 U: m. C8 t  B1 g# j7 o1 Q        用了很多方法去尝试解决这个问题,就不一一赘述了,直接讲最终解决办法的实现过程
4 {  X* v0 }9 _6 w  z! n- I
6 Q, H0 D: n/ B, ^: [        根据经验,怀疑问题是出在分区表上(关于分区表我之前有写过点击查看),于是先使用STM32对EMMC进行格式化,对0扇区进行查看,如下图 ! [# ~; ]2 A. A8 m/ O% e/ u

7 q7 }- D' H4 G' ^( S+ j 20210823094843341.jpg 3 K, u  d) P* y

  z' l' p3 t0 B可以发现分区从扇区0x3F(63)开始,于是继续查看63扇区,如下图8 E3 L/ d: h7 m* ?9 @
. t  l4 |, k1 O/ K5 U7 X+ `/ T
20210823095029375.png ' z' K: J6 U6 b- _1 u' f

9 _" W+ ?8 ^. R( v8 D8 n( r7 N$ ^ 发现开头为0xEB 0x76 0x90 “EXFAT”,满足exFAT的卷格式,说明分区表没啥问题
7 l5 @$ s' p* T8 i# q- J# m( m# i; U% Y) R
我们继续,使用电脑通过3227对EMMC进行分区(2048对齐),并格式化,使用winhex对磁盘进行查看,首先是0扇区,如下图, t9 P8 Q8 g2 e7 Z" Q3 _( V, g

6 c& X) k# Y7 [ 20210823101234732.png 4 R1 z. T, M& k

& c/ q" ~1 Y% a 由于电脑分区时使用了2048字节对齐,我们可以看到分区表上,分区也的确是从0x0800(扇区2048)开始,我继续使用STM32对EMMC的扇区0进行查看(这一次没有使用STM32进行格式化操作),发现数据还是和之前一样
) a  E. y* K5 t1 P" y
4 ^6 u  G& K/ r" m* F& q  H 20210823102653331.png 5 c- Z/ z7 W( Q- L

* d4 }: q$ K, c% j, O3 @是不是发现端倪了?电脑通过3227对EMMC的分区表进行修改后(也能看到的确修改成功了),STM32却并未查看到分区表被修改。这两种查看分区表的方式都是查看的“各自所认为的扇区0”,STM32看到的是“实际的EMMC的扇区0”,而电脑是通过3227看到的他“所谓的扇区0”,因此电脑“通过3227看到的扇区0”可能不是“实际的扇区0”。2 Q1 l# F7 j+ K$ Z! N. }8 B; T

) _% Q" v# Y' C& B7 F1 M        这款芯片并没有什么加密,我猜测可能是3227读取的扇区有一定的偏移。于是我在STM32中添加了一段代码,在EMMC中去寻找“电脑通过3227看到的扇区0”。果不其然,在扇区256看到了相同的数据。这可是个好消息,于是我在winhex上又找了几个扇区的数据,使用STM32在偏移256扇区的地方均找到了相同的数据。结合之前“电脑通过3227修改分区表并没有修改EMMC实际扇区0上的分区表”这一现象,我认为3227在操作EMMC时偏移256扇区应该是个有效的猜测。$ E" y9 |% u8 I; _: ]* o

0 N; U0 z! e1 B* s- D- j 解决方案:
: I! {. w! ^1 h4 n/ r, K- t3 W! A* }! J) ~+ X4 y- Q6 a
        修改了STM32上user_diskio.c文件,使之访问EMMC时,和3227保持一致,均偏移256个扇区,代码如下
0 o5 u9 I0 n8 c1 d0 J0 G. j9 x+ s" H& H9 \- r# O2 ]
20210823105505962.png $ @+ E1 m' g! q9 y' ~% O
20210823105515513.png 1 g9 m: K8 M( Y+ D

& ]! l8 D. d6 P, H# Z        重复文章开头问题描述中的流程,问题消失,成功解决。
# V0 R, M! n" B8 i& h————————————————
5 b# `, p& r0 w& Y" M版权声明:balibala
+ m% r1 Z" o. E1 o8 N) {" k
$ ?" s$ j! _) v& y
) C8 O3 f+ _: x( T" L* E1 j5 S$ y9 w3 e
收藏 评论0 发布时间:2022-11-4 16:22

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版