4、烧录协议入门:常见的烧录协议(ST-Link, J-Link, ISP)、协议选择原则
大家好,欢迎来到第四章。前面我们聊了固件烧录的基本流程和工具链,今天咱们来点硬核的——烧录协议。
说白了,烧录协议就是芯片和烧录器之间沟通的「语言」。你用的烧录器再好,如果跟芯片「说不上话」,那也是白搭。我刚开始做嵌入式那会儿,就吃过这个亏——拿着J-Link去烧一个只支持ISP的芯片,折腾了半天没反应,后来才发现是协议不匹配。
好,咱们一个一个来看。
4.1 ST-Link 协议
ST-Link 是意法半导体(ST)自家出的调试烧录器,主要伺候 STM32 系列芯片。它支持两种底层协议:SWD(串行线调试)和 JTAG。
SWD 协议:
- 只需要两根线:SWDIO(数据线)和 SWCLK(时钟线)
- 速度最高能到几十MHz,实际用起来很稳
- 我个人习惯,只要芯片支持SWD,我就优先用这个——省引脚,布线也方便
JTAG 协议:
- 需要5根线:TMS、TCK、TDI、TDO、nTRST(可选)
- 兼容性更好,很多ARM芯片、FPGA都支持
- 但引脚多,在小板子上不太友好
实际经验:我在一个四层板的项目中,因为空间紧张,硬是用SWD把6个引脚挤成了2个。嗯,省下来的4个引脚刚好用来加了一路I2C传感器。所以说,协议选对了,硬件设计能省不少事。
4.2 J-Link 协议
J-Link 是 Segger 公司的产品,可以说是调试器里的「瑞士军刀」。它支持的协议更丰富:
- SWD:跟ST-Link一样,但J-Link的驱动优化更好,速度更快
- JTAG:标准JTAG,支持多核调试
- SPI / I2C 直写:有些J-Link型号可以直接通过SPI或I2C烧录,不需要走标准调试接口
我记得有一次,客户要求用J-Link烧录一个非ARM架构的芯片。当时我查了半天资料,发现J-Link的「Generic JTAG」模式可以自定义指令序列。说白了,就是你可以手动拼出烧录时序。虽然麻烦了点,但确实能解决问题。
小技巧:如果你用J-Link烧录STM32,建议把速度调到4MHz以上。我实测过,4MHz比1MHz快了将近3倍,而且稳定性没差别。当然,线太长的话要降速,不然容易出错。
4.3 ISP 协议
ISP(In-System Programming)是在系统编程的意思。它跟SWD、JTAG最大的区别是:不需要专用的调试接口。
常见的ISP实现方式:
- UART ISP:比如STM32的串口下载,通过Bootloader引导
- USB ISP:比如AVR芯片的USBasp,直接走USB协议
- SPI ISP:有些芯片支持通过SPI接口烧录Flash
为什么会用ISP?我遇到过一种场景:产品已经量产了,但发现固件有bug。这时候如果拆机用SWD烧录,成本太高。好在芯片预留了UART ISP接口,只需要一根USB转串口线就能现场升级。嗯,这就是ISP的实用价值。
注意:ISP烧录通常需要芯片内部有Bootloader。如果Bootloader被擦除了,那ISP就废了。我曾经手滑把STM32的Bootloader给擦了,结果只能上J-Link救砖。所以,量产前一定要确认Bootloader的保护机制。
4.4 协议选择原则
好,三种协议都介绍完了。那实际项目中怎么选?我总结了几条原则:
| 场景 | 推荐协议 | 理由 |
|---|---|---|
| 开发调试阶段 | SWD(J-Link或ST-Link) | 速度快,支持断点调试,效率高 |
| 量产烧录 | SWD 或 JTAG | 稳定可靠,适合自动化产线 |
| 现场升级 | ISP(UART或USB) | 不需要专用工具,成本低 |
| 多芯片同时烧录 | JTAG(菊花链模式) | 一根线可以串多个芯片,节省时间 |
| 引脚极度受限 | SWD | 2根线搞定,适合小封装芯片 |
另外,还有几个小建议:
- 优先选SWD:只要芯片支持,SWD就是最省心的选择。我90%的项目都用它。
- JTAG留作备选:如果SWD死活连不上,试试JTAG。有时候是芯片的SWD引脚被复用了。
- ISP只用于特殊场景:比如远程升级、产线最后一道工序。别拿它当主力烧录方式,速度慢且不稳定。
避坑指南:我曾经在一个项目中,为了省成本,用ISP代替了SWD做量产烧录。结果因为产线上的USB转串口线质量参差不齐,烧录失败率高达5%。后来换回SWD,失败率直接降到0.1%。所以,量产环节别省那几十块钱的烧录器钱。
4.5 小结
今天的内容就这些。总结一下:
- ST-Link 适合 STM32 开发,SWD 是首选
- J-Link 更通用,支持多种协议,适合多平台
- ISP 适合现场升级,但别用于量产主力
- 协议选择要看场景:开发用SWD,量产用SWD/JTAG,现场用ISP
下一章,我们会深入讲烧录脚本的编写。到时候我会分享一个我常用的Python烧录框架,保证让你写脚本的效率翻倍。咱们下期见。