使用STM32H743IIT6,读写MCU内部Flash固定地址与固定长度的区域,出现随机性HardFault错误,请问是什么原因?
STM32H7A3VGH6Q D1、d2、E1、E2是SMPS功能对应的引脚,裸片量测D2与C1、D1对应的地没有短路现象,PCB板量测也没有短路,但芯片贴到板上D2 VLXSMPS就会与地短路。不知是啥原因。是否芯片型号与批次不对?
mmt 工具如何管理NAND和LCDinterface 设备
调试器如何通过AP0~AP3访问H757?
STM32H7的LSE起振问题
使用STM32H7A3的FMC接口驱动LCD 是否可以用DMA传输数据
stm32h743 lan8720 cube配置lwip无法ping通
型号相同,尾椎不一样
请问有没有人见过这样的报错
在Vscode中,如何将touchGFX的图片资源下载到QSPI FLASH中?
微信公众号
手机版
STM32 的 FMC(或 FSMC)里确实带有一块“硬件 ECC 计算单元”,但它只负责实时计算 Hamming/BCH 校验码 ,真正的“写入 OOB、读出比对、纠错”仍然要由软件完成。流程可以分成下面三步看:
写页
先把 FMC 的 ECCEN 置 1,指定 ECC 页大小(256/512/…/8192 字节)。
通过 FMC 向 NAND 写主数据,硬件在同一时刻把数据流送进 ECC 单元,写完一页后读 FMC_ECCR 寄存器,得到 22~32 bit 的校验码。
软件把这段校验码再写进 OOB 的约定位置(字节地址由你定,FMC 不会自动写)。
发 PAGE-PROGRAM 命令完成写入
。
读页
再次把 ECCEN 置 1。
通过 FMC 读主数据,硬件重新计算“新 ECC”。
软件把 OOB 里保存的“旧 ECC”读出来,与“新 ECC”做异或。
如果异或结果为 0 表示无错;结果中有 11 个 bit 为 1 说明 1 bit 可纠错;其他情况视为不可纠错的 2 bit 以上错误
。
若需要纠正,软件根据异或值定位翻转位并取反即可;硬件不会自动改数据。
关于纠错能力
旧系列(F1/F2/F4)的 Hamming 单元只能“纠 1 检 2”。
H7/MP1 等新型号可选 BCH,支持“纠 4 检 8”或“纠 8 检 16”,但算法仍然由软件完成,硬件只提供两套校验码
。
官方文档
结论: “硬件 ECC”= 自动计算校验值,省去软件逐字节做位运算的时间; “写入/读取 OOB、比对、纠 1 bit”= 必须由用户软件完成。只要记住这一点,手册里的寄存器序列就能看懂了。
执行以下序列以进行ECC计算:
1. 在FMC_PCR寄存器中使能ECCEN位。
2. 向NAND闪存页写入数据。在NAND页写入期间,ECC模块计算ECC值。
3. 等待ECC码准备就绪(FIFO清空)。
4. 从FMC_ECCR寄存器读取ECC值并存储至变量。
5. 清除ECCEN位,随后在FMC_PCR寄存器中重新启用该位,再从NAND页读回写入数据。读取NAND页期间,ECC模块将计算ECC值。
6. 从FMC_ECCR寄存器读取新ECC值。
7. 若两个ECC值相同,则无需校正;否则存在ECC错误,软件校正程序将返回错误可否修复的信息。