选型,实现USB转2路CAN功能,目前看到STM32F407和STM32H750都有2路CAN,都能实现功能吗?
STM32H7A3RGT6 ADC 8位采样速度只能达到3.5MSPS达不到数据手册上的7MSPS ?
LPTIM5的事件Lptim5_ait作为14号Trigger input输入到DMAMUX2 Request generator触发BDMA未生成中断问题
关于NAND FLASH加LittleFS的方案
DMAMUX 使用内部外设Request Event(不使用TIM12和LPTIM)
【经验分享】STM32H7 DMA+UART不定长接收实战:解决缓存溢出与数据错位问题
STM32H747 D2域的问题
官方有没有成熟的FTL
STM32H743 以太网 为什么需要设置在0x30040000才能使用
STM32H743 的ADC线性校准问题
微信公众号
手机版
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错误,软件校正程序将返回错误可否修复的信息。