1. 芯片烧录到底是个什么"手艺":从一次痛苦的焊板经历说起
我入行第一年,在一家做智能硬件的公司做固件开发。当时带我的老师傅丢给我一块焊好的板子、一个下载器和一根杜邦线,说"把这板子烧一下"。我一脸懵"烧什么?怎么烧?焊的不是好好的吗?"老师傅看了我一眼"里面没程序,芯片就是个空壳,你把它点亮。"
这就是芯片烧录最朴素的解释:往芯片里写入程序,让一块硬件有了"思想"。称它为"烧录",是因为早年用紫外线擦除的EPROM芯片,写入前需要用紫外线灯照射擦除,而写入时一旦出错可能真的会把芯片"烧"坏,这个叫法就这么留下来了。放到今天,不管你是往Flash里写固件、往OTP区写配置字、还是往EEPROM里写校准参数,大家统称"烧录"。
这篇文章想帮新手一次性理清三个特别容易搞混的概念:ISP、ICP、IAP。它们都是烧录方式,但适用场景、硬件连接、底层原理完全不同。很多刚入行的朋友做完一个项目,会用JTAG下载程序,却分不清它到底算ISP还是ICP;又或者听别人说"你这产品要支持IAP升级",根本不知道和普通烧录有什么关系。这篇我会从原理、接线、操作流程、选型思路和踩坑经验几个维度全讲透,配套按文末的方式去实践,基本能覆盖你工作中80%的烧录需求。
2. 三种烧录方式的本质差异:为什么"烧"的方法还不止一种
要想搞懂ISP、ICP、IAP,先得理解一个背景:芯片在不同生命周期阶段,能采用的写入方式不一样。这就好比给一本书印刷内容,可以是在装订之前用印刷机印,也可以是书已经订好之后用补印的方式加页,甚至可以让读者自己按需更新。芯片烧录也遵循类似逻辑。
| 对比维度 | ISP | ICP | IAP |
|---|---|---|---|
| 全称 | In-System Programming(在系统编程) | In-Circuit Programming(在电路编程) | In-Application Programming(在应用编程) |
| 烧录时机 | 芯片已焊到电路板上、系统可运行 | 芯片已焊到电路板上,但通常不需系统运行 | 产品交付后,用户手里运行中升级 |
| 是否需要专用设备 | 需要,通常用USB转串口或专用ISP下载器 | 需要,如JTAG/SWD调试烧录器 | 不需要,靠芯片自己写自己的Flash |
| 触发方式 | 芯片进入ISP模式后由主机引导写入 | 调试接口直接控制芯片写入 | 应用程序里触发跳转Bootloader再写入 |
| 典型芯片厂家举例 | STC、AVR、部分STM32的串口ISP | STM32/S32K等带JTAG/SWD接口的芯片 | 各类带Bootloader的MCU、手机、路由器固件 |
| 适合场景 | 产线批量烧录、升级现场维护 | 开发调试、小批量量产 | 远程升级、用户自助升级、OTA |
很多人第一反应是"ISP和ICP不都是在电路板上烧吗,有什么区别?"
区别核心在于"谁在控制这次写入"。
ISP是芯片内部出厂固化的Bootloader(引导程序)在配合你。你用串口把数据发进去,芯片里那段出厂时写好的Bootloader接收数据、擦除应用区、再把新程序写进去。整个过程芯片是可以上电运行的,甚至主时钟都在跑。
ICP是外部调试器直接接管芯片。JTAG/SWD接口就是专门造出来给外部工具直接"控制"芯片的,调试器可以暂停CPU、读写内存、擦写Flash,不需要芯片里预先有任何程序配合。芯片里是空的没关系,甚至Flash里没程序、时钟没初始化都行,调试器靠自身的时钟协议就能操作。
IAP则是让应用自己烧自己。芯片运行时,在某一个特定条件下跳转到Bootloader区,由Bootloader完成对新固件的接收和写入,然后再跳回应用区跑新的App。打个比方,ISP相当于"厂方售后上门给你换主板",ICP相当于"直接用工程钥匙进入机房换设备",IAP则相当于"设备自己下载更新包然后自己拆自己装"。
搞清这一层区别,你会发现后面所有接线、软件选择、操作步骤都是顺理成章的事。
3. ISP在系统烧录的原理与实操:串口线也能烧程序
3.1 ISP的硬件基础:哪些引脚参与,怎么接
ISP最常见的载体是串口(UART),也有用SPI/I2C做ISP的,但主流MCU用户接触最多的是串口ISP。拿最经典的51单片机(STC系列)和STM32来说:
- STC的典型ISP接线:目标板的RXD接USB转串口模块的TXD,目标板的TXD接模块的RXD,共地。部分型号还需要在下载时对某些引脚做电平配合,比如STC有些型号需要P1.0、P1.1接地才能进入ISP模式;不过现在新出的STC8系列,大部分型号在串口下载时会自动复位进入Bootloader,不用手动拉电平了。
- STM32的串口ISP:通过BOOT0引脚拉高、BOOT1拉低后复位,芯片从系统存储器启动,运行出厂Bootloader,然后通过USART1或USART2接收数据。烧完再把BOOT0拉低复位,回到正常Flash启动。
操作步骤一般是这样:
- 断开目标板电源,把USB转串口模块和板子对应引脚接好,并确认共地。
- 按住下载软件里的"开始下载"按钮(不同工具操作时机不同,STC是软件点"下载"之后才给板上电,STM32的串口ISP工具通常先复位进入Bootloader再连接)。
- 给目标板上电或按复位键。
- 软件检测到芯片、擦除、写入、校验,提示完成。
一个关键经验:串口ISP对电平匹配很敏感。如果你用的USB转串口模块是3.3V的,目标板也是3.3V的MCU,没事;但如果模块是5V输出的,直接接3.3V的MCU,极大概率把引脚打坏,或者至少烧不进去。务必确认逻辑电平一致,不加转换的话就得用TTL电平匹配模块,我早期就烧掉过两颗STM32F103,原因就是拿5V的PL2303模块直连3.3V芯片的USART1引脚,出来的数据全是乱码最后还把引脚搞短路了。
3.2 ISP模式下芯片是怎么工作的:Bootloader的"出厂协议"
为什么要单独讲Bootloader?因为ISP也好、IAP也好,都绕不开这个概念。
芯片出厂时,原厂在芯片内部ROM区烧了一段小程序,这段程序专门负责通过某个外设接口接收数据并写入Flash。芯片的上电启动顺序一般是:从固定地址读取复位向量,如果是正常模式,会跳转到用户程序区;如果检测到进入ISP的条件(比如BOOT引脚电平或特定握手信号),就跳转到Bootloader区。
STM32F103为例,它的系统存储器(System Memory)里那块出厂Bootloader支持USART1、USART2、USB DFU等接口。你通过串口发0x7F做同步握手,它回0x79表示确认,然后就可以发读命令、擦除命令、写命令。很多人在串口ISP失败时看LOG只会看到"连接失败""no response",其实问题往往出在握手阶段——波特率不匹配、晶体频率不对、引脚接错、BOOT引脚没拉对。
这里给大家一个排查串口ISP失败的顺序:
- 量BOOT0电压是否确实为高(STM32),或对应型号进入ISP模式的引脚电平是否正确。
- 串口模块的TXD/RXD是否交叉连接,是否共地。
- 检查串口工具里选择的波特率是否与芯片匹配范围一致。STM32出厂Bootloader默认波特率由硬件决定,自动波特率检测通常能适配,但碰到有源晶振频率异常时会失败。
- 排除目标板上其他外设占用USART引脚的情况,有些板子调试串口和主串口是复用的,接了485芯片没使能会拉死总线。
- 如果板上跑的程序里把USART引脚重新映射或禁用了,先强制进入ISP模式再连接。
3.3 ISP的适用边界:量产为什么常选它
ISP最大的优点是:不需要昂贵的专用调试器,一个USB转TTL模块十几块钱就能搞定;缺点是:需要芯片里出厂有Bootloader,且速度受串口限制,一般几十KB/s,烧大程序体感的慢。再加上每次烧录要手动进模式/复位,产线上的节拍如果没有治具支撑,会明显拉低效率。
不过很多小批量产品线依然选择ISP,因为成本低、治具简单。用一台电脑、一个USB转串口模块、一个按压式烧录座或者干脆飞线,配合软件里的"允许在下载时自动复位"选项,工人只要把板子放上去、点一下按钮、看到下载成功灯亮再取下来,节拍也能做到十几秒一片。
产线上用ISP做批量烧录时有一个容易忽略的点:**不同板子的芯片如果用了不同频率的外部晶振,ISP软件检测波特率时可能出现误差累积。**我遇到过一批板子,晶振标称12M但实际偏差0.5%,串口ISP在115200波特率下偶发校验失败,降波特率到57600后问题消失。如果你在产线上遇到"有的板子好烧、有的板子要试好几次",优先怀疑晶振精度和波特率,而不是像无头苍蝇一样换软件换接线。
4. ICP在电路编程:脱机、裸片、调试器,一条龙
4.1 ICP的物理载体:JTAG与SWD这几根线藏着什么秘密
ICP最常见的实现方式是JTAG和SWD。JTAG全称Joint Test Action Group,是一个边界扫描测试标准,原本是用来做PCB测试的,后来扩展成调试接口。SWD是ARM公司搞的串行调试接口,只用两根线:SWDIO和SWCLK,加上电源和地总共4根线就能实现和JTAG几乎一样的烧录调试功能。
STM32上你用ST-Link烧录,默认走的就是SWD模式。接4根线:SWDIO、SWCLK、GND、3.3V。比串口ISP少一个BOOT0引脚,也不要求芯片里有任何程序,哪怕芯片已经读保护、或者Flash全空,ICP照样能连上并写入。这就是为什么开发调试几乎都用ICP而不是ISP——ICP更'硬核',它在芯片最底层工作。
SWD和JTAG在接口占用方面有个对比:
| 特性 | JTAG | SWD |
|---|---|---|
| 最小接线数 | 4根(TMS、TCK、TDI、TDO) | 2根(SWDIO、SWCLK) |
| 占用引脚 | 较多,很多芯片专门的调试脚就是这些 | 与JTAG复用引脚,可切模式 |
| 速度 | 高,但受线束影响 | 足够日常调试,最高几十MHz |
| 调试能力 | 完整边界扫描 | 完整调试,额外也能做SWO trace |
| 常见工具 | J-Link、ST-Link、DAP-Link | 同样这些,默认优先SWD |
我个人建议新手直接认准SWD。现在市面上的调试器基本都是SWD优先,省引脚、接线简单。它用的SWCLK信号在连线上如果走线太长或干扰大,降低到1MHz以下往往就好了,线缆越短越稳定。
4.2 ICP的完整烧录链路:从IDE到芯片内部
用ICP烧录的流程一般是:在IDE(比如Keil、IAR、STM32CubeIDE)里编译出hex或bin文件,调用调试器软件把它通过SWD/JTAG口写入芯片内部Flash。
具体到STM32CubeProgrammer,操作流程:
- 用ST-Link连接板子到电脑,选择"ST-LINK"接口类型。
- 点击Connect,软件自动读取芯片ID、Flash大小等信息。
- 选择要烧录的文件(hex/bin),设置起始地址(bin需要设起始地址,hex自带地址)。
- 点Download,写入完成后再点Verify校验一次。
- 有时还需要点Set Read Protection选项设置读保护,防止固件被读出来。
命令行方式也很实用,方便产线脚本化:用STM32CubeProgrammer的CLI模式可以直接一行命令完成擦除、下载、校验、设置读保护,比如把烧录命令写成批处理脚本,产线工人只要双击一个图标就能完成操作。
实际工作中,ICP最常见的痛点是"连接不上调试器"。排查顺序一般是:
- 检查调试器驱动是否装好,设备管理器里能否看到设备。
- 看板子是否供电,量3.3V是否稳定。
- 确认SWDIO/SWCLK两个引脚没有被复用成普通GPIO后导致拉死,很多开发者写程序时不注意,把这两个脚初始化成了输出口,导致第二次烧录直接连不上。
- 遇到连不上时,先用按住复位键再点击连接的方式试试——有些芯片复位期间调试口是保持可用的,连接成功后再松开复位,这个技巧在芯片程序跑飞时特别管用。
- 如果完全无响应,检查目标板上有没有其他芯片占用了SWD引脚,或者调试口线序接反。
4.3 ICP量产方式:脱机烧录器的核心价值
ICP也广泛用于量产,但产线上不会每片都挂电脑连IDE,而是用脱机烧录器。这类设备本身内置了Flash存储,事先把固件灌进去,拿到现场只需要用一个烧录座或者探针压到待烧录芯片的对应引脚上,按一下按钮,设备自动完成擦写校验,亮绿灯就是成功。
脱机烧录最大的好处有三个:
- 不依赖电脑、不受USB驱动、杀毒软件干扰,稳定性远高于PC方案。
- 烧录速度快,很多脱机设备支持高速SWD,几十KB的程序几秒完成。
- 可以设置多区域烧录,比如一次写入Bootloader区、应用区、配置字区,还能顺带写MAC地址/序列号这类唯一ID。
如果你负责的产品需要批量发货,我强烈建议从"每台电脑接一个ST-Link挨个烧"升级成"一台脱机烧录器+工装夹具"。两者效率差距是数量级的。算笔账:人工用ST-Link连板子烧一片,小程序大概也得20秒,一天8小时最多烧1400片;换探针式烧录座上料、按压、按键、取料,一个周期5秒,一天能多出近三倍产能,而且出错率大幅下降,因为烧录器自己会校验。
4.4 ICP与ISP在产线里的配合思路:先烧后贴 vs 先贴后烧
这里我多说一个产线工艺概念,很多新手可能没接触过。
"先烧后贴":在PCB还没贴片之前,把芯片放在烧录座上先用IC烧录器烧好程序,再贴到板子上。这种方式适合芯片引脚已经可以通过烧录座直接接触的封装(比如TSSOP、LQFP),好处是烧录时可检测芯片好坏,坏片直接拣掉不浪费后续贴片和组装成本。
"先贴后烧":板子贴片焊接完成后再通过板上的调试口或串口头烧录。好处是烧完可以直接做整机功能测试,坏板当场发现。坏处是如果烧录失败要重新修板,返工成本高一些。
具体选哪种,取决于你的板子结构和量产规模。如果PCB空间允许把SWD接口引出来做成测试点,那先贴后烧最舒服,整机测试一条线搞定;如果是空间非常紧凑的消费类产品,或者固件刷错了容易报废,就得考虑离线烧录座方案。
5. IAP应用内编程:让固件在用户手上自己升级
5.1 IAP的架构:Bootloader和App的"双区切换"
前面提到ISP靠的是出厂Bootloader,IAP则不然——IAP的Bootloader很可能就是你自己写的。
IAP的典型架构是一个芯片Flash里分为两个区域:Bootloader区(通常放在0x08000000开头),App区(放在后面的地址)。Bootloader负责检查有没有新固件、接收新固件数据、写入App区、最后跳转到App区运行。App运行期间如果收到升级指令,会把标志位写到某个存储位置(比如备份寄存器或Flash末尾),然后软复位到Bootloader,Bootloader看到标志后进入升级流程。
这个机制听起来简单,但牵扯的实际问题很多:
- App跳Bootloader前必须关闭所有中断、复位外设,不然跳过去之后各种中断残留,Bootloader会被打断。
- 两个区域的起始地址和大小必须事先规划好,Flash总容量有限,Bootloader占太大App就小了。
- 升级过程中断电会留下"半成品"固件,必须做备份区和回滚机制,否则变砖。
5.2 升级包从哪来:串口、蓝牙、Wi-Fi、USB的IAP流程差异
IAP和OTA基本是孪生概念。OTA(Over-The-Air)就是通过无线方式做IAP升级。不管用哪种通道,IAP的软件流程是相似的:
- 设备在App模式下收到升级包(完整固件或差分包),先校验CRC/签名。
- 将升级包存入临时存储区(可以是外部Flash、SD卡、或者内部Flash的暂存区)。
- 设置升级标志,软复位进入Bootloader。
- Bootloader检查标志,搬运新固件到App区,擦除、写入、校验。
- 校验通过后跳转新App;校验失败则回退到旧App并上报错误。
用串口做IAP是最常见的入门方式,比如你的板子上没有网络模块,但留了一个串口,用户可以用PC工具或者手机蓝牙模块把升级包发给设备。用无线模块做OTA则是现在蓝牙Mesh设备、智能家居设备的标配,好处是用户在App上点一下"升级",设备就给全屋的节点逐个推送固件,不需要物理接触每台设备。
5.3 为什么说IAP是"产品思维"的烧录
这里我要特别强调一个观点:ISP和ICP本质上还是"生产环节"的手段,IAP则把烧录延伸到了产品的整个生命周期。
做了IAP之后,你的产品可以:
- 发布V1.0之后通过固件升级修bug、加功能,不用召回硬件;
- 在产线上只烧一个出厂基础程序,发货后根据不同地区客户的需求下发不同配置固件;
- 配合后端服务器,像手机系统更新一样管理海量设备的固件版本;
- 最关键的一点:配合安全签名机制,能防止第三方篡改固件。
从生态位来看,IAP是你从"开发工程师"进阶到"产品工程师"绕不开的一项能力。如果你正在做联网设备,无论Wi-Fi还是蓝牙,迟早要用到OTA,那IAP就是底层必须踏实的功夫。
5.4 IAP实施中的地址规划与工程配置实操
我以STM32G0系列为例,把IAP的工程配置步骤简化一下。假设芯片Flash是64KB,Bootloader分配8KB,App区从0x08002000开始:
Bootloader工程需要设置:
- 链接脚本里FLASH起始地址=0x08000000,长度=0x2000(8KB)。
- 编译产物是Bootloader的bin,烧录到0x08000000。
App工程需要设置:
- 链接脚本里FLASH起始地址=0x08002000,长度=0xE000(56KB)。
- 在系统初始化早期加入中断向量表重映射:在启动代码或main开头执行SCB->VTOR = 0x08002000。
- App里定义好跳转Bootloader的函数,通常是设置标志位、关闭中断、复位外设,然后调用NVIC_SystemReset()。
实际踩过的坑提醒一下:
- App的bin文件比hex更容易在IAP里处理,因为IAP一般直接接收裸二进制流,用hex还需要在设备端解析地址信息,徒增复杂度。建议在IDE编译输出阶段就配置生成bin文件。
- Bootloader和App的波特率/通信协议要统一,最好定义一个版本握手命令,避免新旧混合升级时出现协议不兼容。
- 给Bootloader加一个升级失败回滚机制,最有效的做法是双App区,运行A时升级B,运行B时升级A,哪个区校验通过就跳哪个区,任何一次异常断电都不会变砖。代价是Flash容量要多一倍,但这在Flash便宜的今天非常值得。
6. 三种方法怎么选:一张场景决策表帮你做判断
市面上很多教程讲完概念就完了,很多人看完依然不知道该用哪招。我的建议是拿一张决策表对着场景查:
| 你的情况 | 推荐方案 | 不推荐原因 |
|---|---|---|
| 日常开发调试程序 | ICP(SWD) | ISP要进Bootloader操作麻烦,IAP需要先写好Bootloader成本高 |
| 芯片刚打样,还没画好板,想先验证芯片好坏 | ICP裸片烧录或选择支持烧录座的ISP | 没有板子没法谈IAP |
| 没有调试器,手里只有串口线,芯片出厂自带ISP Bootloader | ISP | 成本最低,方案成熟 |
| 量产中大批量烧录固件 | 脱机IC烧录器(ICP方式)或带自动复位功能的ISP治具 | 一台电脑一台ST-Link速度太慢 |
| 产品已经交付用户,后续可能功能升级 | IAP/OTA | 没IAP就只能返厂,运营成本难以承受 |
| 需要保护固件不被读取 | ICP方式设置读保护(RDP),或在ISP/IAP固件里加入软加密 | 不做保护,同行的板子能直接读出你固件逆向仿制 |
看到这里你应该明白了,这三种方案不是竞争关系,而是产品生命周期不同阶段的配合关系:
- 开发时用ICP,方便调试器单步跟踪;
- 量产时用ICP脱机烧录或者ISP流水线,快速高效;
- 出货后用IAP,远程修复和功能演进。
一个成熟产品往往把三者都安排上了。比如一个带Wi-Fi的智能插座:生产线上用脱机烧录器以ICP模式灌入Bootloader和出厂固件,设置读保护RDP级别;用户买到手后连上App,云端推送固件升级包,MCU里跑的Bootloader通过UART接收Wi-Fi模块转发的数据完成IAP升级。三个概念在这里串成了一条完整的链。
7. 烧录不畅的常见疑难杂症与实战排查思路
7.1 连接失败、校验失败、烧到一半卡死
这三个问题是新手遇到最多的。我根据自己的经验,把现象、原因、对策整理成一张实用性极强的排查指南:
| 故障现象 | 常见原因 | 快速对策 |
|---|---|---|
| ICP连接不上,软件报No target detected | SWD引脚被程序复用、电源不稳、调试器线过长 | 按住复位键再连接;缩短线缆;检查有无其他设备拉死引脚 |
| ISP握手失败,发0x7F没有响应 | BOOT引脚没拉对、串口RX/TX接反、没共地 | 优先检查引脚电平再查接线,复位一次再试 |
| 校验(Verify)失败 | Flash原本存在内容未擦除、电压太低写入不完整 | 先Full Chip Erase再烧;外接稳定3.3V;降低烧录速率 |
| 烧录过程中目标芯片发热明显 | 内部短路、供电反接、IO对地短路 | 立即断电,量各电源引脚对地电阻,排查焊接连锡 |
| 烧录成功后设备不运行 | 启动地址不对、App起始地址配错、BOOT引脚状态不对 | 检查复位向量是否指向App区;确认Boot配置引脚 |
| 只有部分板子烧录异常 | 晶振频率偏差、PCB布线影响时钟、个别芯片体质差异 | 降低烧录速度;检查晶振匹配电容;统计不良率判断批次问题 |
7.2 读保护和代码防抄:该设置就设置
如果你在做商用产品,一定要养成发布固件时顺手设置读保护的习惯。STM32的RDP(Read Protection)分为Level 0(无保护)、Level 1(禁止通过调试接口读Flash)、Level 2(永久保护,不可回退)。Level 1在量产时够用,烧录完成后再设置,日常也能通过ICP接口擦除重新烧录。Level 2则谨慎使用,设置了烧录器就再也无法连接芯片了,相当于彻底锁死,只适合不需要返修的产品。
设置读保护时有一个坑:很多人在烧录时只在IDE里勾了"Erase Full Chip",没有单独去设置RDP,结果固件被轻易读走。建议在量产烧录流程里把"设置读保护"做进烧录脚本里,命令烧完之后自动设置,这样产线上不可能忘记。
7.3 一个典型排查实例:新做的板子ST-Link突然连不上
我自己遇到过一种情况:画了一块新板子,芯片用STM32F103C8T6,第一次用ST-Link连也没问题,烧了程序后能跑。然后我改了程序里一个GPIO初始化,把之前没接的PB3/PB4拉高了,再想下载却发现连接失败。
花了大概一小时排查,最后想起PB3和PB4分别是JTDO和NJTRST引脚——也就是JTAG口。我的程序初始化把这两个脚配成了普通输出,JTAG接口被禁用,SWD功能也一起被关了。解决路子很简单:按住复位键,让芯片不执行用户代码,调试器趁机连上,立即重烧一个不占用这些引脚的固件。
这个案例特别典型,强烈建议所有新手记住"按住复位连接"这招。它是STM32论坛上被问烂的问题,却依然每天有人在踩。
8. 再聊两点生产实践中的体会
8.1 烧录测试点设计要趁早
如果你在设计PCB,一定在原理图阶段就把烧录接口规划好。SWD的4个信号(SWDIO、SWCLK、GND、3.3V)最好引出到一个4针的座子或至少做成测试焊盘。很多产品为了节省空间不留调试口,结果开发阶段每烧一次程序都要飞线,痛不欲生,还容易因为飞线接触不良烧坏IO。更麻烦的是,有些板子采用了屏蔽壳或者贴片电池覆盖调试焊盘位置,后期想加测试点都加不了。
我一般遵循的原则是:
- 调试口放在板边,方向朝外,方便探针/杜邦线夹持。
- 串口ISP的话,把TX/RX/GND留测试点即可;有机会的话还是优先SWD。
- 预留一个电阻位连接SWDIO到MCU,这样量产时可以贴0欧电阻;开发阶段可以拆掉电阻隔离干扰。
- 如果板上有多个MCU,尽量把每个MCU的调试口都引出来,别共用一组,否则量产测试和产线诊断时互相打架。
8.2 烧录是基础功,也是产品质量的第一道门
芯片烧录乍一看是一件"低级"工作,但仔细想想,产品出厂后的第一道可靠性关口就在这里。烧录不良带来的售后成本往往很高:板子没程序客户收到不能用、固件版本混淆导致功能异常、读保护没设程序被破解量产……每一个都能让产品口碑归零。反过来,烧录方案设计得好,产线效率和产品可维护性都会明显提升。
所以我的建议是,不管你是纯软件还是硬件出身,把这三种烧录方式吃透,对你的职业发展都很有帮助。尤其是IAP/OTA,几乎是现在所有智能硬件的标配能力,会这个和不会这个,做出来的产品在运营层面的差距很大。
最后分享一个我常用的习惯:每接触一款新芯片,第一件事就是翻它的Reference Manual里的"Memory"和"System Memory / Boot mode"章节,搞清楚它的启动模式、Flash扇区布局、出厂Bootloader支持哪些接口。只要这几点摸清,后面无论是ISP、ICP还是IAP,都能一通百通。芯片型号千千万,原理骨架不变,剩下的都是具体寄存器配置而已。