图2.2.1 SEGGER J-Flash下载程序
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代码,才是最终目标。
--------------------------------
举例说明:CAN总线实现STM32的IAP
使用STM32F105RCT6的CAN通信做IAP,实现固件的远程更新功能。IAP的实现包括两个程序:BootLoader和应用程序。启动过程先启动BootLoader,等待1S,若接收到烧写指令则开始更新程序,若无指令则启动应用程序。应用程序接收到更新指令后,切换到BootLoader。
远程程序更新需要防止更新失败后,程序卡死,只能通过人工现场更新的情况。可以使用看门狗实现重启返回BootLoader,给重新烧写留出时间。
实现IAP流程,需要的工作包括:
(1)规划单片机存储区,设置中断向量位置,生成应用程序Bin文件
(2)编写BootLoader,实现应用程序切换
(3)编写远程更新上位机,实现通信协议
(4)插入看门狗程序,实现烧写失败后重启
-----------------
1)规划单片机存储区,设置中断向量位置,生成应用程序Bin文件
STM32F105RCT6的Flash共256KB,规划Flash空间:
0x0~0x0 共16KB空间,给BootLoader
0x0~0x0 共48KB空间,给应用程序
0x0~0x0 共16KB空间,保留
0x0~0x0 共16KB空间,给配置
单片机应用程序在起始地址中的结构,首先是中断向量,然后是代码。
中断向量的结构:开头4字节堆栈指针,接下来是4字节reset函数地址,之后是其他中断函数的地址。
单片机开机后,从0x0处取得SP,然后从0x0处取得reset地址作为PC,在Reset函数中调用main函数,进入C语言控制的程序中。
在Keil中的Options -> Target -> IROM 填写应用程序的起始和长度,并在Linker -> Use Memory Layout from Target Dialog中打钩。
在应用程序中,调用NVIC函数,设置中断向量位置为0x0。
生成应用程序的bin文件:Keil中,在Options -> User -> After Build -> Run 中输入指令 fromelf.exe --bin -o ..w01simbinmcubincanext.bin .obj est.axf
-----------------
2)编写BootLoader,实现应用程序切换
建立一个普通的STM32工程,实现CAN通信和数据协议、Flash烧写等功能,当超时无指令,或烧写成功后,需要进行程序切换。
程序切换时,首先应关闭设备时钟、关闭中断,避免应用程序中未对设备进行初始化,导致Boot方式启动与冷启动有功能差别。
切换原理:模拟单片机上电过程,人工设置堆栈指针,调用应用程序入口函数。切换代码如下:
到此这篇单片机程序烧录连接线路图(单片机烧录程序怎么接线)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/jszy-jszl/34628.html