写在前面:
这几天留校,在做一个电机驱动的项目,使用的是合肥杰发的平台,车规级芯片AC7801/11系列芯片。 但在进行仿真和程序烧录的时候遇到了各种问题,借助这个机会,私下里总结了常见的仿真与烧录程序常见的几种方式,以及相关的操作,希望对大家有帮助。
单片机ISP、IAP和ICP几种烧录方式的区别
1.ICP(In Circuit Programing)
使用硬件对应厂家的软件以及仿真器都可以烧录程序,目前主流的有JTAG和SWD接口。而ICP编程就是以SWD接口进行的。
执行ICP功能,仅需要三个引脚:RESET、ICPDA、和ICPCK。RESET用于进入或退出ICP模式,ICPDA为数据输入输出引脚,ICPCK为编程时钟输入引脚。用户需要在系统板上预留VDD、GND和这三个引脚。
大致的工作流程:PC上运行的软件(ICP编程工具)通过SWD的接口更新芯片内部APROM、LDROM、数据闪存(DataFlash)和目标用户配置字(Config)
2.ISP(In System Programing)
与ICP不同的是,目标芯片通过USB/UART/SPI/I2C/RS-485/CAN等周边接口的LDROM引导代码去更新芯片的内部APROM、数据闪存(DataFlash)和用户配置字(Config)。
3.IAP(In applicating Programing)
IAP就是通过软件实现在线电擦除和编程的方法。IAP技术是从结构上将Flash存储器映射为两个存储体,当运行一个存储体上的用户程序时,可对另一个存储体重新编程,之后将程序从一个存储体转向另一个。
什么是ISP:
用写入器将code烧入,不过,芯片可以在目标板上,不用取出来,在设计目标板的时候就将接口设计在上面,所以叫"在系统编程",即不用脱离系统;
什么是IAP:
在应用编程,有芯片本身(或通过外围的芯片)可以通过一系列操作将code写入,比如一款支持Iap的单片机,内分3个程序区,1作引导程序区,2作运行程序区,3作下载区,芯片通过串口接收到下载命令,进入引导区运行引导程序,在引导程序下将new code内容下载到下载区,下载完毕并校验通过后再将下载区内容复制到2区,运行复位程序,则Iap完成;
应用场合:
-
ISP 程序升级需要到现场解决,不过好一点的是不必拆机器了; -
IAP 如果有网管系统的话,用网管下载一切搞定,人不用跑来跑去
异同
-
ISP一般是通过单片机专用的串行编程接口对单片机内部的Flash存储器进行编程; 而IAP技术是从结构上将Flash存储器映射为两个存储体,当运行一个存储体上的用户程序时,可对另一个存储体重新编程,之后将控制从一个存储体转向另一个。 -
ISP的实现一般需要很少的外部电路辅助实现; 而IAP的实现更加灵活,通常可利用单片机的串行口接到计算机的RS232口,通过专门设计的固件程序来编程内部存储器。 -
ISP和IAP很相似,都是不需要把芯片从板子上拔出来,就达到了用PC-MCU的编程接口(JTAG、串口、双绞线、SPI等)搞定新版本的升级的目的。
MCU内部都是首先执行一段独立的Boot代码(这段Boot代码一般是出厂预置,或使用编程器烧录的,通常只有1k或4k,SST通常是占用一块独立的Block,Philips通常是让BootROM地址与其他Flash重叠,以达到隐藏的效果),Boot负责控制擦除程序存储器及给程序存储器编程的代码(或是处理器外部提供的执行代码),然后通过某种与PC计算机的通信方式(如,ether网口),将用户指定的某个在PC上编译完成的MCU可运行的二进制代码文件编程入MCU内的程序存储器。
ISP和IAP的实际使用
ISP的实现相对要简单一些,一般通用做法是内部的存储器可以由上位机的软件通过串口来进行改写。对于单片机来讲可以通过SPI或其它的串行接口接收上位机传来的数据并写入存储器中。所以即使我们将芯片焊接在电路板上,只要留出和上位机接口的这个串口,就可以实现芯片内部存储器的改写,而无须再取下芯片。
IAP的实现相对要复杂一些,在实现IAP功能时,单片机内部一定要有两块存储区,一般一块被称为BOOT区,另外一块被称为存储区。单片机上电运行在BOOT区,如果有外部改写程序的条件满足,则对存储区的程序进行改写操作。如果外部改写程序的条件不满足,程序指针跳到存储区,开始执行放在存储区的程序,这样便实现了IAP功能。
简言之: ISP=>修改MCU 内部数据需要有外部介入; IAP=>修改MCU 内部数据可以不用外部介入。 二者可以说是数据更新的一种实现机制。 一般具备ISP 功能后,就不要编程器了,而是使用下载线进行编程工作。但是不是说他们就一定不支持编程器了,具体型号具体分析。是否需要仿真器进行仿真和是否具备ISP和IAP没有必然的联系。 只不过具备了IAP功能,可以在MCU内写入监控程序,模拟一个仿真器,当然,这个监控程序是要消耗资源的,和使用硬件的仿真器还有一定的差异。
各自的烧录工具
1.ICP使用SWD接口进行烧录程序。
常用的烧录工具为J-Link、ST-Link、Nu-Link。与之配套的烧录软件为J-Flash、NuMicro_ICP_Programming_Tool、st-link utility。
2.ISP是使用引导程序通过USB/UART等接口进行烧录的,
首先就是需要有bootloader。最常见的烧录方式就是学习8051单片机时使用的STC-ISP烧录工具了。
3.IAP就是通过软件实现在线电擦除和编程的方法,没有使用任何工具,仅仅是通过软件的方法来更新Flash中的数据。
小结:
1.ICP:使用SWD接口进行烧录,如J-Link烧录器和J-Flash软件配合使用。
2.ISP:使用引导程序(bootloader)加上外围UART/USB等接口进行烧录。
3.IAP:软件自身实现在线电擦除和编程的方法,不使用任何工具。程序通常分成两块,分别为引导程序和应用程序。
烧录工具
J-LINK
J-Link是SEGGER公司为支持仿真ARM内核芯片推出的JTAG仿真器。配合IAR EWAR,ADS,KEIL,WINARM,RealView等集成开发环境支持所有ARM7/ARM9/ARM11,Cortex M0/M1/M3/M4, CortexA5/A8/A9等内核芯片的仿真,与IAR,Keil等编译环境无缝连接,操作方便、连接方便、简单易学,是学习开发ARM最好最实用的开发工具。
简单来说: J-Link是一个JTAG协议转换盒,它通过USB传输,在仿真器内部转换成JTAG协议,实现了了一个从软件到硬件转换的工作。使用者只需要一个USB接口,便可以实现JTAG下载, 在以前JTAG协议都是用20pin的转接头(上图),但是随着时代的发展,很多电脑都不在配备并口的,取而代之的是越来越多的USB接口,这就随之而诞生了J-Link仿真器,只需要一个USB接口,使用者就可以实现芯片的烧录与调试,极大地方便了工作并简便了电脑接口。
当然了作为要支持仿真ARM内核的仿真器 J-Link不止支持JTAG 同样支持SWD下载
SWD下载方式接线:
IAR与MDK配置两种下载方式
IAR
打开工程文件,在项目文件-右键-Options
找到J-Link/J-Trace - Connection -选择下载模式
MDK:
首先确定下载方式正确 然后Settings。
之后可以修改下载方式与下载速度,注意下方为USB模式
ST-Link
ST-Link是ST意法半导体为评估、开发STM8/STM32系列MCU而设计的集在线仿真与下载为一体的开发工具,支持JTAG/SWD/SWIM三种模式。
- 支持所有带SWIM接口的STM8系列单片机
- 支持所有带JTAG/SWD接口的STM32系列单片机
ULink
ULINK已经停产,在售的是ULINK2和ULINKpro版本,ULINK2是ARM/KEIL公司(2005年ARM收购了KEIL)最新推出的配套RealView MDK使用的仿真器,ULINK2仿真器也被称为Keil ULINK2、ARM ULINK2仿真器。
ULINK2仿真器支持:
- 片上调试(使用片上JTAG/SWD/SWV)
- FLASH存储器编程(用户可配置FLASH编程算法)
- 以下是各版本ULINK仿真器的区别,可见支持的芯片内核,软件开发工具等内容;
JTAG
JTAG(Joint Test Action Group,联合测试行动小组)是一种国际标准测试协议(IEEE 1149.1兼容),主要用于芯片内部测试,现在多数的器件都支持JTAG协议,ARM、DSP、FPGA等,JTAG接口的单片机用电脑USB下载调试程序,需要用到J-Link(USB转JTAG)。
标准的JTAG是四线:TDI,TMS,TCK,TDO,分别对应数据输入,模式选择,时钟,数据输出,复位管脚可不接。
SWD
SWD全称是Serial Wire Debug(串行调试),SWD模式下用JLink给我们的板子debug时,是用标准的二线DIO和CLK,RESET管脚可不接,当你频繁下载失败时,可接上RESET管脚再试。
在高速模式下,SWD比JTAG更可靠一些,常见的接线信号如下所示,根据具体情况自主选择。
注意: SWD模式下,SWDIO的上拉电阻可预留不贴,在ST的一些MCU参考设计中,有提到建议添加,实际测试不加不影响下载。
SWIM
SWIM接口常见于ST的STM8系列单片机,ST-Link2与STM8连接只需要4根线,见表格。
USB转TTL
串口发送数据(USART)是STM32调试中经常使用的功能,但是电脑USB的电平标准与串口所使用的TTL标准不同,所以需要一条USB转TTL线来完成它们之间的通信。
大结
J-Link、ST-Link、ULink三种仿真器之间的区别:
- JLink是通用型的ARM内核芯片仿真器,支持的芯片和软件开发环境多,优选;
- ST-Link是针对STM8/STM32,如果你使用STM8/STM32单片机,首选ST-Link,当然用JLink下载ST系列单片机也可以;
- ULink专注于Keil平台,支持ARM7/9,Cortex-M0~M4,ULink2还支持8051系列芯片,综合性能(支持芯片种类、软件开发环境及及调试速度)均不如JLink;
三者都支持JTAG和SWD模式;
JTAG、SWD、SWIM三种下载模式的区别:
- JTAG接线比较多,高速模式下稳定性不如SWD;
- SWD接线少,可空出多余的GPIO,所需要的接线信号不同仿真器会有所差别(主要在VCC和RESET),DIO和CLK必接;
- SWIM常见于STM8单片机,需用4根线;
写在最后
时间过的真快,去年这个时候自己一个人到上海求学,正愁着找不到住的地方,眨眼间一年过去了,有时间写个这一年的总结吧,先挖个坑~ 最后祝大家早安,午安和晚安?
参考文献: https://blog.csdn.net/error_again/article/details/108253440 http://t.csdn.cn/h2YQX http://t.csdn.cn/xL5Tk
|