正常
第 1 章 · 4 读手册的能力
1.4.0 引子:芯片也有 bug,而且官方认
软件有 bug,你认;芯片有 bug,很多人没想过。硅片流片一次成本惊人,设计上的小缺陷没法像软件那样发个补丁就改——只能改下一版硅片。那已经卖出去的这版怎么办?ST 的做法是:写进 errata,告诉你「这地方别这么用,变通办法是这样」。
所以 errata(ES096)就是 ST 给自家芯片发的「召回公告」——不是召回芯片,是召回你的某些用法。
1.4.1 errata 长什么样
ES096 结构很清晰:
- 开头一张 Summary 表:每个 bug 编号、一句话标题、它出现在哪些硅片版本、状态码;
- 后面逐条详述:Description(这个 bug 具体什么表现)+ Workaround(变通办法,或「无变通」)。
状态码四个,记住含义:
A:有变通方案;P:部分变通(只能减轻,或对部分场景有效);N:无变通;-:该版本无此问题。
1.4.2 「硅片版本」是个关键概念
同一个 STM32F103C8T6,不同批次可能对应不同的硅片版本号(silicon revision),ES096 里列出了 A / B / Z / Y / X / 1 / 2 / 3 等好几版。版本不同,中招的 bug 也不同。你手头那颗芯片是哪一版?可以用调试器读 DBGMCU_IDCODE 寄存器里的 REV_ID 字段查出来。
1.4.3 三个真实的坑(只点名,不展开)
随便举几条 ES096 里记录在案的,感受一下:
- 2.1.1:一条叫 LDRD 的指令,如果在执行中被中断,基址寄存器可能出错(状态
A,有变通)——影响中断密集的代码; - 2.6.7:通用定时器想做 100% 占空比的 PWM 会有问题(状态
N,无变通)——你要是正好需要满占空比输出,这是个死坑,得换实现方案; - 2.2.9:与较新版本的编译器有兼容问题(状态
P,部分变通)。
踩坑提醒:debug 一晚上没结果、明明配置全对行为就是怪——先去 errata 搜关键词。很多「玄学」其实是官方记录在案的硅片缺陷,变通办法白纸黑字写在 ES096 里,比你重新啃一遍 RM0008 管用一百倍。强烈建议项目选定芯片后,把 errata 通读一遍,标出和你项目相关的坑。
1.4.4 要点
- errata 是 ST 自认的芯片 bug 清单(「召回公告」),最该被新手看见、却最常被忽视。
- 每条 bug 带
A/P/N/-状态码;不同硅片版本中招的 bug 不同(读DBGMCU_IDCODE查版本)。 - 玄学问题先查 errata,再 debug;项目初期通读一遍标坑。
参考说明:参考 ST 官方 errata ES096 Rev 15(2022),仅作理解线索与条目指路;本文为结合自己理解重新整理的学习笔记,不涉及对原文档的复制或翻译。