ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

ISP、ICP、IAP三种芯片烧录方式详解:从入门到量产选型

ISP、ICP、IAP三种芯片烧录方式详解:从入门到量产选型 芯片刚拿回来的时候里面其实空空如也。没有程序它就是一坨不会动的硅片。所谓烧录就是往芯片里写程序让它活过来的过程。很多新手一上来就被 ISP、ICP、IAP 这三兄弟绕晕网上的解释又总是堆术语越看越迷糊。这篇我用最直白的方式结合实际调试经验把这三种烧录方式彻底讲透保证你看完就知道自己该用哪种以及为什么 STC、STM32 这些芯片的烧录方式有那么多讲究。有一点要提前说明很多人会把芯片烧录里的 ISP 跟运营商、宽带的ISP互联网服务提供商搞混也会把嵌入式里的 IAP 跟手机 App 里的内购In-App Purchase搞混。这几个完全是不同领域的概念只是英文缩写恰好撞车了。这篇文章只聊芯片烧录别的领域我们不展开。1. 烧录的本质芯片为什么需要写入程序先搞清楚一个底层逻辑芯片烧录本质上是把编译好的机器码也就是 .hex、.bin 这些文件通过某种物理接口写进芯片内部的非易失性存储器里。所谓非易失就是断电之后数据不会丢——比如 Flash闪存或者早期的 OTP ROM一次性可编程只读存储器。你写在纸上的程序断电了也还在纸上这叫非易失你写在黑板上的程序一擦就没了这叫易失比如内存 RAM。芯片要独立运行程序必须放在断电不丢的地方这就是烧录存在的根本原因。1.1 存储介质先分清楚Flash、OTP、Mask ROM不同芯片的存储介质不一样直接决定了它能用什么方式烧录Flash可以反复擦写是目前绝大多数 MCU微控制器和 SPI Flash 芯片的主力。ISP、ICP、IAP 都靠它才能玩出花样。OTP ROM只能写一次写错了就报废。多见于低成本、大批量的消费类芯片比如一些遥控器、玩具芯片。这种芯片出厂前在工厂批量烧录用户基本没法碰。Mask ROM芯片制造时直接把程序印进硅片里后期完全无法修改。只有确定产品永远不改版时才用成本最低但最不灵活。所以我们讨论 ISP / ICP / IAP 的前提是芯片内部有可擦写的 Flash。如果碰上 OTP 芯片那就是烫死的鸭子——只能认命。1.2 烧录的两种介入时机按烧录动作发生的时间业内习惯分成离线烧录和在板烧录离线烧录芯片还没焊到电路板上用专门的烧录座夹住芯片写完再贴上板子。适合大批量生产不会受板子电路干扰速度快还能多颗并行烧。在板烧录芯片已经焊在电路板上了通过板子上的接口比如 SWD、串口、JTAG直接烧。方便后期更新程序、调试不用拆芯片。ISP、ICP 基本都是在板烧录思路IAP 更是干脆连外部烧录器都不需要了靠芯片自己写自己。这是它们三个最核心的区别下面详细拆。2. 三种烧录方式逐个拆解ISP、ICP、IAP 到底怎么工作我见过不少新手把 ISP 和 ICP 当成同一个东西实际上它们在烧录入口、是否需要额外硬件、能不能在线升级上有本质差异。一个个来。2.1 ISP靠芯片里预置的引导程序烧录ISP 全称In-System Programming在系统编程。它的核心特征是芯片出厂时就内置了一段特殊的引导代码Bootloader上电后先跑这段代码通过串口、SPI、I2C 等接口接收外部发来的程序再写入自身 Flash。国内最典型的例子就是STC 的 51 单片机。你买一颗 STC89C52不需要买烧录器只需要一个 USB 转 TTL 串口模块把 TX、RX、GND 连好上电瞬间自动进入 ISP 模式用官方软件点一下下载程序就进去了。用过的朋友都知道STC 的下载有个经典毛病需要先点下载、再给芯片上电有时候还得冷启动好几次。这个延时实际上是 Bootloader 在上电后的一小段窗口期内检测串口有没有下载命令错过了就跳去跑用户程序了。ISP 的优点不需要专门的烧录器硬件一根串口线就能搞定开发环境搭建成本极低。芯片焊在板子上也能烧方便改程序。适合工厂量产产线工人只需要会插线、点按钮。ISP 的缺点下载速度通常不如 JTAG/SWD 那种硬件调试接口快。占用了芯片一部分存储空间放 Bootloader虽然通常很小几 KB。如果要同时调试看变量、断点ISP 本身做不到得配合额外调试接口。这里提一嘴热搜词里的isp pipeline。嵌入式领域的 ISP 跟这个没什么关系ISP pipeline 是图像信号处理流程Image Signal Processor 的流水线常见于摄像头、安防监控领域负责把 sensor 的原始数据转成好看的图像。缩写撞车在技术圈太常见了别搞混。另外stc isp去弹窗里的 STC-ISP 是 STC 官方的烧录上位机软件工具本身免费好用但新版本会弹一些广告窗口。很多老工程师包括我自己都习惯用老版本或者绿色版来省心。这个纯粹是使用体验问题不是烧录原理问题。如果你用 STC 芯片找个干净的版本存好实测稳定靠谱。2.2 ICP用专门的调试/烧录接口直接访问芯片内部ICP 全称In-Circuit Programming在电路编程。它的核心特征是通过芯片专门预留的硬件调试接口最常见的是 SWD 和 JTAG由外部烧录器直接访问芯片内部 Flash不依赖芯片里任何预置的 Bootloader。这里要强调一个关键差异ICP 是在芯片内部电路层面直达 Flash 控制器而不是通过串口协议转发软件代码。好比 ISP 是让芯片门口的保安Bootloader帮你把行李搬进去ICP 是直接拿钥匙开仓库门自己放进去。以STM32为例你用 ST-Link 或者 J-Link接上 SWDIO数据线、SWCLK时钟线、GND、3.3V四根线就能烧录。这就是 ICP 的典型用法。ST 官方原厂批量烧录也常用这种方式配合 ST-Link 或者第三方烧录器速度非常快稳定可靠。ICP 的优点烧录不依赖串口和 Bootloader所以即使芯片里的程序跑飞了、Bootloader 被写坏了只要硬件调试口还在就能救回来。支持在线仿真调试断点、单步、看变量这是 ISP 完全没有的能力。速度快适合频繁烧录的开发阶段。ICP 的缺点必须买烧录器ST-Link、J-Link、DAP-Link 等价格从几十到几千都有不过现在国产 DAP-Link 二三十块也能用得很舒服。目标芯片必须预留出调试接口的引脚。有些芯片为了省引脚会在产品量产时把调试口禁用掉那就没法 ICP 了。如果板子设计时没把调试接口引出来后期想烧就得飞线很痛苦。2.3 IAP芯片自己给自己升级IAP 全称In-Application Programming在应用编程。这个玩法和前两个都不一样。IAP 的核心特征是用户程序运行过程中可以调用芯片内部 Flash 的编程接口把新程序写到 Flash 的另一个区域然后跳转过去执行新程序。通俗点讲就是程序自己会升级自己。最常见的场景是OTAOver-The-Air空中升级。设备联网后从服务器下载一个新的固件包存到备份区校验没问题后写入正式区重启生效。整个过程不需要人去插线也不需要烧录器。IAP 的实现离不开一个核心组件Bootloader引导程序。举个例子我有一个 STM32 产品做过远程升级功能。Flash 大概是 256 KB我做了这样的分区规划地址0x08000000到0x0800800032 KBBootloader负责上电检查是否需要升级、是否收到新固件、校验版本。地址0x08008000到0x0802000096 KBApp 主程序区正常运行的产品逻辑。地址0x08020000到0x08040000128 KB备份区存放下载好的新固件。上电后 Bootloader 先跑检查一个标志位——如果用户请求过升级它就把备份区的新固件搬到 App 区然后跳转执行否则直接跳 App正常启动。这里要特别注意App 编译时必须做偏移设置比如 STM32 里要改链接脚本中的 Flash 起始地址把中断向量表也偏移到对应位置否则 App 跑起来第一件事就是崩。很多新手做 IAP 失败十有八九是忘了改这个偏移。IAP 的优点支持远程升级售后维护成本大幅降低。不需要额外硬件节省成本。可以在运行时灵活切换不同的应用固件甚至支持多固件冗余备份提升可靠性。IAP 的缺点技术门槛高要在 Bootloader 和 App 之间做好通信协议、固件校验通常是 CRC 或者 MD5、异常回退逻辑。做不好设备可能升级到一半变砖。分区规划要谨慎Flash 空间被额外占用备份区也要占用一份空间。如果 Bootloader 本身写坏了仍然需要 ICP 接口走外部烧录器救一次。所以产品设计上不要因为有了 IAP 就去掉硬件调试接口那是给自己以后挖坑。另外提一嘴热搜里electron iap和iap ota。Electron 的 IAP 指的是应用内购买跟芯片升级毫无关系IAP OTA其实就是我上面说的通过 OTA 方式做 IAP 升级。要注意结合上下文判断人家在聊什么新闻里看到 IAP 可不一定都是芯片的事。2.4 三者本质对比一图流用大白话重新收一遍ISP 用串口线通过芯片出厂自带的保安Bootloader搬货进去。门槛最低适合入门和简单产品。ICP 用烧录器拿钥匙直接开仓库放货。最强悍能烧能调试还能救砖适合开发调试和产品出厂烧录。IAP 程序自己会拆快递、自己搬进仓库。适合远程升级最灵活但要先有 Bootloader 和 App 的亲密配合。具体到你的项目选哪个看我下面这个对照表。对比项ISPICPIAP是否需要额外硬件只需串口模块需要 SWD/JTAG 烧录器完全不需要烧录入口芯片内置 Bootloader芯片硬件调试接口用户程序自编程能否在线仿真调试不能能通常不能但可用半主机等特殊方式能否远程升级不能不能除非配合机器人物理操作能配合网络模块即可烧录速度中等快取决于通信方式开发难度低中高典型代表STC 单片机、新唐 N76E003STM32 ST-Link/J-Link、GD32 DAP各类支持 OTA 的物联网产品救砖能力Bootloader 坏了就废只要调试口还在就能救Bootloader 坏了仍需 ICP3. 场景选型你的项目到底该用哪种方式很多新手纠结我该学 ISP 还是 ICP这其实是个伪问题。正确的问法是我的项目在哪个阶段当前最需要什么能力。3.1 入门学习阶段优先 ISP顺手体验 ICP如果你是刚开始玩单片机手头是一片 STC89C52 或者类似的 51 单片机直接走 ISP 路线。买一个十几块的 USB 转 TTL 模块CH340 方案就很稳下载 STC-ISP 软件三根线连上单击下载、冷启动上电程序就进去了。这个阶段你还不涉及复杂调试串口下载足够。等你玩到 STM32、GD32 这些基于 Cortex-M 内核的芯片时建议你花二三十块买一个 DAP-Link 或者国产 ST-Link走 ICP 的 SWD 接口。不仅能烧录还能在 Keil / IAR / VSCode 里打断点调试写个逻辑错误一眼就能看出来。这是从能跑就行到知道为什么跑崩的分水岭。3.2 产品研发阶段调试口必须留烧录方式全都要做真正要量产的产品我的建议是全都要开发调试用 ICPSWD/JTAG追求断点、单步、看寄存器。产线批量烧录用 ICP 或者 ISP。如果产品有串口引出用 ISP 产线成本更低但更稳妥的做法是预留 SWD 口配合量产烧录工具比如 J-Flash、离线烧录器批量写入 MAC 地址、产品序列号等唯一信息。产品售后升级用 IAP配合蓝牙、Wi-Fi、4G 或者 USB 口实现 OTA。举个我实际做过的例子一个基于 ESP32 的智能硬件产线直接用 ESP32 芯片内部的串口 Bootloader本质上也是 ISP 的一种烧录出厂固件烧完再写一组经过计算的设备密钥进 NVS 分区用户买回去后通过手机 App 走 BLE 把新固件推给设备设备跑的是自己写的 OTA 逻辑基于 IAP 思路但 ESP32 生态里有现成 OTA 组件校验通过后切换分区生效。研发阶段则是用 ESP32 的 JTAG 接口做调试定位 OTA 之后某个外设初始化失败的 bug。你看同一个项目三个方式用了个遍各司其职。3.3 量产产线选型稳定和速度比技术先进更重要如果你的产品到了要批量出货的阶段烧录这件事别整花活。我的经验是能离线烧录的尽量离线烧。芯片先烧录好再贴板效率最高也避免板子外围电路干扰烧录信号。必须在线烧录的优先选硬件烧录器 SWD/JTAG。产线上工人操作稳定、速度快、反馈清晰比串口 ISP 可靠得多ISP 偶尔会因为电平匹配、串口线过长出幺蛾子。需要写一机一码的选带序列号自动递增功能的烧录工具别手动敲手动敲必出错。我之前做过一个小批量产品第一次用 ISP 在产线上烧录结果发现有一台机器因为 USB 转串口线质量问题下载到一半程序校验失败产线小兄弟直接忽略报错关机后面整批出货后发现那台设备程序是残缺的。后来改成离线烧录座预烧芯片再贴板此后再没出过这类问题。产线追求的是可重复、可追溯、防呆不是技术情怀。4. 新手最容易踩的坑引脚占用、Bootloader 和分区陷阱这一节单独拎出来因为这些坑我全踩过而且几乎每个接手新项目的工程师都踩过。4.1 引脚复用烧录口和功能口打架ISP 用的串口引脚同时也是芯片某个外设的功能引脚ICP 用的 SWD 引脚也可能被复用成普通 GPIO。最常见的事故是这样的产品功能调试好了为了省一个引脚把 SWDIO 所在的引脚改成普通 GPIO 做按键检测。代码一烧进去调试器连不上了想再下载程序得把引脚按住不放靠运气或者直接换芯片。正确姿势即使产品量产时用不上调试口也建议在 PCB 上留出 4 个测试点SWDIO、SWCLK、GND、3.3V就算焊个排针也行。关键时候这是保命通道。4.2 IAP 的 Bootloader 与 App 的分区冲突做 IAP 时最常见的错误就是 Bootloader 和 App 的地址重叠了。Bootloader 写在了 App 要占的地址上App 运行时直接覆盖了 Bootloader下次升级就没法引导了。规划 Flash 分区时第一件事就是算好每一段占多大划定好边界在代码里用宏定义强制约束地址。举个例子STM32F103C8T6 有 64 KB Flash地址从0x08000000到0x0800FFFF。如果你打算给 Bootloader 分配 16 KB到0x08003FFFApp 起始地址就是0x08004000。在工程设置里把 App 的 Flash 起始地址改到0x08004000并把中断向量表偏移量改成0x4000。这些参数写死之前先在数据手册上核对一遍别凭感觉填。4.3 升级中断电等于半砖IAP 最危险的场景是升级过程中突然断电。芯片正在擦写 Flash写到一半断电轻则新程序没烧完整重则把旧程序也擦了设备变砖。所以产品做 OTA 时光有 IAP 还不够还需要两个保险双备份区A/B 分区新固件先完整写入备份区并做完整性校验确认没问题后才切换启动。哪怕断电在切换之前发生旧程序还能继续跑。升级失败自动回退Bootloader 里记录升级次数和升级状态如果 App 启动后一定时间内没有上报我正常启动了就回退到上一个可用版本。这些设计在消费级路由器和手机上都已经是标配但很多自研物联网小设备却忽略了。我见过不止一个团队因为在升级逻辑上偷懒导致设备远程变砖最后只能走售后寄回成本惨痛。5. 常用工具和典型芯片的烧录实践纸上谈兵没什么意义最后给点直接能用的实操参考。不同厂商的芯片烧录姿势差异很大但是底层逻辑永远是那三兄弟。5.1 STM32 / GD32 系列SWD 一套通吃工具ST-Link V2原版或者国产克隆版或者 DAP-LinkCMSIS-DAP 方案便宜又稳定。接线SWDIO、SWCLK、GND、3.3V四根线。部分板子可能还需要 NRST复位脚连接时注意目标板电压和调试器电压要匹配不能让调试器主动给目标板供电除非你明确知道电流需求。软件Keil MDK 直接点击 Download或者用 STM32CubeProgrammer支持图形界面还能读保护、烧选项字节。量产J-Flash 配合 J-Link可以加载算法、批量烧录、自动写序列号。新手最容易犯的错是接线顺序先连调试器 USB再连目标板电源可能导致调试器上电瞬间给目标板灌一个不确定的电平触发意外复位。习惯上先把信号线和地线接好最后接电源线或者把目标板单独上电。5.2 STC 51 系列ISP 老当益壮STC 的芯片因为不用买烧录器至今仍然是很多学校教学和低成本产品的首选。操作流程下载 STC-ISP 软件找个干净版本避开弹窗。USB 转 TTL 模块连接芯片模块 TX - 芯片 RX模块 RX - 芯片 TX地连地。选择芯片型号、串口号、波特率建议先低后高比如 2400 或 4800稳定优先。点下载/编程。给芯片上电如果芯片已经在供电就按一下断电再上电。看到进度条走完程序就跑起来了。这个先点下载再上电的操作顺序就是 ISP 的核心机制芯片上电后 Bootloader 只会短暂等待串口下载指令。如果你先上电程序已经跑起来了这时候再点下载是没用的必须冷启动一次。5.3 ESP32 / ESP8266 系列串口 ISP OTA 的组合ESP 系列芯片出厂自带串口 Bootloader支持一条 USB 线直接下载板载 USB 转串口。同时官方提供了完整的 OTA 方案本质上就是 IAP支持 http_update、阿里云 OTA、乐鑫官方 OTA 组件升级时把新固件下载到 OTA 分区校验后切换。分区表里默认就预留了otadata和app0、app1两个 App 区做 A/B 切换非常方便。我强烈建议用 ESP32 做产品时分区表别随手用默认的单 App 分区。即便你当前根本没有 OTA 需求也建议分一个小的 OTA 数据分区和冗余 App 区出来以后要加远程升级功能不用大改代码。5.4 Nordic nRF52 系列ICP DFU OTANordic 的 nRF52 系列用 J-Link 走 SWD 调试同时官方提供了 DFUDevice Firmware Update方案来支持 OTA通过 BLE 或者串口传输新固件。颁发加密签名的方式可以防止固件被恶意篡改。如果做穿戴设备或者 BLE 周边这套流程很成熟值得借鉴。6. 从烧录到产品化的几个进阶建议最后把视角拉高一点。烧录不只是把程序写进去这么简单它跟产品质量、产线效率、售后维护深度绑定。以下几点是做了多个量产项目之后特别想强调的6.1 烧录总是伴随着身份写入量产产品往往不只是烧一个程序还要写入产品序列号、MAC 地址、校准参数、密钥。实现方式有几种使用烧录工具自动递增序列号配合固定格式写入指定 Flash 地址。在 Bootloader 里支持特殊命令产线通过串口或者 SWD 发送数据Bootloader 把参数写到信息区。对于安全要求高的产品密钥通过加密烧录器直接烧录不在代码里明文出现。强烈建议把程序烧录和身份写入分成两个步骤并且在产线测试流程里加入读取回读校验环节。生产最怕的就是烧了但没完全烧回读校验能及时发现问题。6.2 调试口是硬通货别省前面已经强调过不管产品多小、成本多敏感至少留一个调试口测试点。我见过太多项目为了省几十个测试点里的几个最后在售后维修时付出高昂代价。一个产品卖出去三年后返修工程师接上调试口一看就能定位问题要是没留只能拆芯片、飞线痛苦加倍。6.3 学会自己做产线烧录工具链如果产品有一定批量建议认真研究一下量产烧录工具链。比如用 J-Link Commander 脚本化烧录或者用 STM32CubeProgrammer 的命令行模式。把这些命令封装成批处理脚本配合扫码枪实现扫码-烧录-写号-校验一条线自动化产线效率能翻好几倍。高级点的还能通过 MES 系统记录每台设备的烧录日志做到完整追溯。这些都是别人看不见但很提升交付质量的地方。做芯片烧录这件事最重要的不是记住某个具体操作而是理解你手上芯片的存储和启动机制从哪里读程序、有没有引导代码、能不能自编程想清楚这三件事无论换什么芯片、什么工具你都能在十分钟内定位到该用 ISP、ICP 还是 IAP。我个人这几年最大的体会是千万不要因为 IAP 能做远程升级就放弃预留硬件调试接口。远程升级做得再完美也挡不住 Bootloader 本身被写坏或者芯片进入异常状态的情况。留一个 SWD 口就是你最后的退路。花 0.1 元成本多四个焊盘保的是整个项目的不翻车。
返回列表