历史上的今天
返回首页

历史上的今天

今天是:2024年12月15日(星期日)

2021年12月15日 | 单片机的四种烧写方式

2021-12-15 来源:eefocus

单片机的四种烧写方式简介

单片机是一种可编程控制器,搭好硬件电路后,可以利用程序实现很多非常复杂的逻辑功能,与纯硬件电路相比,简化了硬件外围的设计、方便了逻辑的设计、丰富了逻辑的输出。不同厂家的单片机需要不同编程IDE来实现编程。在学习单片机之前,要先清楚单片机程序是如何烧写到单片机内部的,在烧写的过程中需要用到什么工具?因为不通用的烧写工具可能价格较贵,比如说Micorchip单片机使用的ICD系列编程器,单台价格在600-1000元人民币之间。今天和大学来认识一下单片机最常用的四种烧写方式和所使用到的工具。


1.使用JTAG接口实现

JTAG接口是一种标准的测试协议,可以实现编程时在线调试,利用单步追踪可以很方便的查找代码的Bug,大多数的单片机都支持这种接口。这种接口除了电源线和复位引脚之外,还要用到单片机的四个引脚,分别是:TDI、TMS、TCK、TDO,他们所代表的含义如下所示:


TDI–数据输入,所有写入寄存器的数据都是通过TDI接口串行输入的;TMS–模式选择,Jlink输出给目标CPU的时钟信号;TCK–时钟信号,所有数据的输入输出都是以该时钟信号为基准的;TDO–数据输出,所有从寄存器读出的数据都是通过TDO接口串行输出的;以上这四个引脚都是协议里强制要求的,而且协议建议在设计电路时要选用上拉电阻。JTAG接口有多种形式,常用的20引脚、14引脚和10引脚。


上图中JTAG接口都通过电阻上拉了,有的单片机的这几个引脚在内部已经上拉,所以这几个上拉电阻可以省略,减少了成本和PCB空间的占用。


JTAG接口烧录方式常用的工具为J-Link。


相信大家都见过或者听过这个烧写工具,这个工具很通用,但是大家在使用的时候一定要注意版权信息,因为这个工具是有版权的,前两年因为版权风波,网购平台还集中整治过一次。


2.SWD接口烧录方式

SWD是一种串行调试接口,与JTAG相比,SWD只需要两根线,分别为:SWCLK和SWDIO。他们的含义如下:


SWDIO–串行数据线,用于数据的读出和写入;SWDCLK–串行时钟线,提供所需要的时钟信号;一般来说,大多数单片机的JTAG接口和SWDIO接口是复用的,SWD也是用J-Link工具来实现的。所以在使用的时候,只需要在软件界面做一下选择,使用SWD方式还是JTAG方式,硬件上无需改动。除了J-Link外,意法半导体的ST-Link也是支持SWD模式的。


SWD的接口如上图所示,可以看出,SWD和JTAG是相互复用的,由于SWD只需要两根线所以大大减少了对单片机GPIO口的占用,SWD方式也是可以在线调试的。


3.ISP烧写方式,用UART实现(常用)

使用过国产51单片机的朋友都清楚这种烧写方式,这种烧写方式是通过单片机的UART串口来实现的,所需要的工具也比较简单-USB/TTL。这个USB/TTL的芯片可以通过MAX232、CH340G等芯片来实现。


在与单片机连接的时候,一定要注意交叉连接,所谓交叉连接即,单片机的TXD接串口RXD,单片机的RXD接串口TXD,否则数据通信失败。51单片机在使用该方式下载时需要断一下点再上电才能下载。


STM32单片机可以使用UART来实现程序下载,但是需要选择BOOT的模式,现在通过CH340G芯片可以实现自动ISP的下载方式,即不需要手动设置BOOT模式。


4.SWIM单总线下载方式

这种下载方式是针对STM8系列的单片机,这种方式只需要一根线即可实现程序的下载,所使用的工具为ST-Link。


烧录方式基本介绍

单片机的烧录方式主要可以分为ICP(在电路编程)、IAP(在应用编程)以及ISP(在系统编程)。玩单片机的都应该听说过IAP、ICP和ISP这几个词。


ISP:In System Programing,在系统编程

IAP:In Application Programing,在应用编程

ICP:In Circuit Programing,在电路编程

JTAG(Joint Test Action Group)编程:通过JTAG协议进行编程

SWD(Serial Wire Debug)编程:通过SWD协议进行编程

UART编程:通过UART进行编程

用一张图形象的表示一下,如下。

在这里插入图片描述

从图上看,ISP和ICP是处于最顶层的技术。描述的是一种编程结构,所使用到的协议、通信端口等,不同芯片有不同的定义。


IAP在第二层,是一种编程方式。实现方式是将一段目标芯片可执行的代码通过某种通信协议下载到芯片RAM中并由芯片执行,由该代码实现具体操作以达到编程的目的。这种方式需要芯片支持通过某种通信协议。


对芯片的RAM进行读写并能控制其CPU。这是在编程结构下的一种编程方式,像AK100Pro、SmartPRO、5000U-Plus等烧录器,都用到了这种编程方式。


最下面的是硬件通信协议,UART是最早应用在单片机里面的串行通信技术。JTAG和SWD是ARM内核芯片兴起之后,逐渐流行起来的,这三种技术描述的是编程过程中硬件层使用的通信协议,是最底层的一些技术规范。


用一个表格来对比这几种通信协议的特性:

在这里插入图片描述

综合上面所述,只要UART、JTAG、SWD这些硬件通信协议能保证电气连接的规范性和稳定性,那么ISP、IAP就能对芯片正确地编程。


烧录方式详述

1、ISP:In System Programming

利用单片机的串行口接到计算机的RS232口,通过专门设计的固件程序来编程内部存储器。芯片可以在目标板上,不用取出来,设计目标板的时候将接口设计在上面。所以叫"在系统编程",即不用脱离系统。程序升级需要现场解决,但不必拆机器。比如:利用STC-ISP对STC芯片编程,如图,祥见“STC_ISP下载软件问题汇总与解决”;利用FlyMcu对STM32编程。

在这里插入图片描述

在这里插入图片描述

2、IAP:In Applicatin Programming

ISP的实现一般需要很少的外部电路辅助实现,由芯片自身(或通过外围的芯片)通过一系列操作将代码写入。从结构上将Flash存储器映射为两个存储体,当运行一个存储体上的用户程序时,可对另一个存储体重新编程,之后将控制从一个存储体转向另一个。比如STM32微处理器通过SEGGER J-Flash下载程序,祥见“J-Link使用汇总(STM32F103)”。

在这里插入图片描述

MCU内部都是首先执行一段独立的Boot代码(这段Boot代码一般是出厂预置,或使用编程器烧录,通常只有1k或4k,SST通常是占用一块独立的Block,Philips通常是让BootROM地址与其他Flash重叠,以达到隐藏的效果),Boot负责控制擦除程序存储器及给程序存储器编程的代码(或是处理器外部提供的执行代码),然后通过某种与PC计算机的通信方式(如ethernet网口),将用户指定的某个在PC上编译完成的MCU可运行的二进制代码文件编程入MCU内的程序存储器。


① ISP和IAP最大的不同是:由谁来触发进入BootROM。

ISP有4种触发方式:

1)由外部硬件电路:如VDD保持高电平,给RST连续3个脉冲;

2)检测状态位:如ISPEN,为0时PC指针从0000H开始执行;为1时,通过“引导向量”计算出“ISP代码”的位置。每次复位后都会检测该状态位;

3)中止控制符信号触发芯片复位:中止控制符信号就是指在异步串行口的接收脚上出现长 达一帧长度的低电平,这里一帧的长度与异步串行口的工作模式有关。

4)直接调用ISP:用户程序也可以调用,但是很危险。


② 4种方式的目的相同,即进入ISP子程序。

比如Philips出厂的ISP子程序在1E00H-1FFFH,只要能引导PC指针指向1E00H就可以了。进入ISP代码的目的是进入BootROM。

IAP的触发简单一些,没有外部触发。通过一些指示位(SST为SC0/SC1、SFCF[1,0];Philips为一段IAP子程序,保存在FF00H~FFFFH地址空间中),达到引导至BootROM的目的。

殊途同归,ISP、IAP所进入的BootROM里面驻留的Boot代码,才是最终目标。


3、ICP:In Circuit Programing

1)MCU只要处于上电状态即可,不必预烧任何代码进MCU。

2)烧录范围涵盖整颗MCU,包括 APROM、DataFlash、CONFIG、LDROM和 ROMMAP。

3)芯片在LOCK的状态下,无法只更新某一区块,只能在erase-ALL之后,更新某一区块,再逐一烧回其它区块;

因为ICP的本质就是走串行接口的Writer Mode,芯片被LOCK之后,除了erase-ALL,所有烧录动作皆会被禁止。

4)因为烧录纯粹是ICP硬件的行为,MCU无法自己更新自己,所以给系统设计者的弹性较小。例如无法藉由ICP去实现IAP的功能。

5)需要其他硬件支持(如NU-LINK等)

6)不严格来说,ISP和IAP也属于在电路编程。


总结

形象点的描述:


ISP是把房子拆了再重造一间,但是地基保留,那么在造好之前当然是不能住人。

IAP是在造好的房子里边进行一些装修,当然人可以继续住。

ICP是对房子地基与房子的整体重构。

推荐阅读

史海拾趣

Abundance Enterprise Company公司的发展小趣事

Abundance Enterprise Company注重品牌建设和市场推广工作。公司通过多种渠道加强品牌宣传和推广,提高品牌知名度和美誉度。同时,公司还积极参与社会公益活动,履行企业社会责任,树立了良好的企业形象。这些举措有效提升了公司的市场竞争力,为公司的快速发展提供了有力保障。

ACCRETECH公司的发展小趣事

Abundance Enterprise Company注重品牌建设和市场推广工作。公司通过多种渠道加强品牌宣传和推广,提高品牌知名度和美誉度。同时,公司还积极参与社会公益活动,履行企业社会责任,树立了良好的企业形象。这些举措有效提升了公司的市场竞争力,为公司的快速发展提供了有力保障。

Avalon Photonics公司的发展小趣事

Avalon Photonics深知技术创新是公司发展的核心动力。因此,公司每年都将大量资金投入研发领域,不断推动技术创新。公司研发团队积极探索新技术、新材料,在光子学领域取得了多项重要突破。这些技术创新不仅提升了Avalon产品的竞争力,也为公司在市场上赢得了良好的声誉。

Compact公司的发展小趣事

在电子行业的初期,Compact公司凭借其卓越的技术研发团队,成功开发出了一款具有颠覆性的新型半导体芯片。这款芯片不仅性能卓越,而且成本远低于市场上的同类产品。凭借这一技术创新,Compact公司迅速获得了市场份额,并在行业内建立了良好的声誉。随着技术的不断进步,Compact公司不断推出新产品,巩固了其市场地位。

Easy Braid公司的发展小趣事

品质一直是Easy Braid公司的生命线。在竞争激烈的市场环境中,Easy Braid始终坚持使用高品质的材料和严格的生产工艺,确保每一件产品都达到最高标准。正是这种对品质的执着追求,让Easy Braid赢得了客户的信任和口碑。随着客户群的扩大,Easy Braid的品牌影响力也逐渐增强。

A1 PROS公司的发展小趣事

随着公司在韩国本土市场的稳步发展,A1 PROS开始积极寻求国际市场的拓展。公司以韩国母公司为研发和生产中心,面向台湾、香港、中国大陆以及中东、欧美等地区开展业务。通过不断优化产品设计和提升生产效率,A1 PROS的产品逐渐在国际市场上占据了一席之地。同时,公司还积极参加各类国际电子展会和技术交流会,与全球同行建立了广泛的合作关系。

问答坊 | AI 解惑

CC2500模块传输距离做到了1000米

CC2500加功率放大加低噪音放大是在CC2500的基础上扩展PA+LNA;CC2500+PA+LNA模块是集FSK/ASK/OOK/MSK.调制方式于一体的收发模块。它提供扩展硬件支持实现信息包处理、数据缓冲、群发射、空闲信道评估、链接质量指示和无线电波唤醒,可以采用曼彻斯特 ...…

查看全部问答>

1.5mV怎么用运放才能实现精确的放大1000倍

请教各位,其实我的问题就是要把小信号稳定的放大1000倍,要求这个放大倍数很精确,双级或单级都可以。最好是有高手可以告诉我直接有精密的放大100倍和10倍的芯片。在线等,谢谢啦!…

查看全部问答>

8259A芯片中有那些寄存器?各寄存器有什么作用?

8259A芯片中有寄存器总数有多少?各寄存器名称和作用?…

查看全部问答>

在windows mobile下写输入法,那位大哥能给点资料?

在windows mobile下写输入法,那位大哥能给点资料? SIP IME输入法都可以,还想问下大家,sip能切换ime输入法吗?…

查看全部问答>

求一份WtpTool Download完整原版代码

marvell的cpu智能机板子,要做一个自己的下载工具 email:killbug2004@gmail.com 另外麻烦讲一下基于usb下载的流程 中间有个VerifyImage不懂,文件下载id设置也不太清楚 谢谢达人…

查看全部问答>

EVC编程出现LINK 错误 我不能解决 希望有高人能帮我看看 谢谢了。。

         error LNK2019: unresolved external symbol \"int __cdecl registerwnd(struct HINSTANCE__ *)\" (?registerwnd@@YAHPAUHINSTANCE__@@@Z) referenced in function WinMain ARMV4Rel/mytimetable.exe : fa ...…

查看全部问答>

关于VHDL程序设计的三个问题~请教!!!

1。在仿真中,有些非端口信号,例如SIGNAL ,VARIABLE,在node finder的 all list中 还是没有,没法建立它们的仿真波形,该怎么办,而且有的SIGNAL可以看到,有的看不到,这是为什么?(QUARTUSII) 2。在PROCESS中,这个PROCESS是 TYPE state IS ...…

查看全部问答>

[求助]请问大家一个关于视频的问题

我用1394转接卡接一个摄像头,然后在屏幕上实时的显示摄像头拍得图像,但是在启动初始化的时候(大概10次中有1次),显示在屏幕上的图像错位了,图像的1/3跑到下面去了,而且一直保持这样,要让图像正常只能重启,有人说是同步问题,但我觉得不像, ...…

查看全部问答>

我编译binutils到ARM上用,可是没有make过,请帮忙看一下!!

我先是 ./configure -target=arm-linux生成 Makefile 然后执行 make ,提示如下: // 我查了一下 regex.c中定义了个 char *malloc(); 在stdlib.h中void *malloc (size_t __size),我用的是gcc编译器,如果函数重载c++也可以通过 make[1]: Leav ...…

查看全部问答>