s32k144 bootloader
s32k144 bootloader升级
mcu : s32k144
can_tool : kvaser
摘要:实现can升级app程序,现在网上大多是CAN_FD升级bootloader 的程序,CAN_FD在消费型轿车可能已经使用,而队友许多大型汽车,目前用的还是can通讯,所以实现can升级制定mcu的app程序就显得尤为重要。本次发送的是摩托罗拉公司定义的s19文件(srec),上位机解析文件,发送。CAN_FD一帧数据能发64个字节,而CAN一帧数据只能发送8个字节(不包括ID等其他信息),而s19文件除了第一行可能超过64个字节外,其他行一般小于64个字节,所以CAN_FD的方式会很简单,而can的方式会很麻烦。本文分为三个部分:boot loader、app、上位机软件。
1.bootloader:
(1)bootloader主要实现功能:

(2)分析一下跳转部分:
① s32k的栈顶地址为0x00000000,而stm32的栈顶地址一般为0x08000000。复位向量表起始地址 = 栈顶地址+4 ;我们平时复位地址就是这个地址。各部分程序映射地址如下图

图中使用的APP地址偏移量是0x00004000(8k)的大小,通过查看要烧录的文件发现2k字节的大小是完全足够的,我们此次就是用的地址为0x00002000
②单片机的函数名就是地址,运行函数其实就是将PC指针跳到函数的入口去执行程序
typedef void (*bootloader_fun)(void); /*定义函数指针类型*/
bootloader_fun jump2app; /*定义函数指针*/
..........
/* 函数指针指向app的复位向量表的地址。注意将地址强转成函数入口地址 */
jump2app = (bootloader_fun)*(uint32_t*)(APP_ADDR + );
/* 设置栈顶指针*/
MSR_MSP(APP_ADDR);
/*将pc指针指向入函数地址(app地址)运行*/
jump2app();
PS.在跳转之前还得can_deinit()和关闭全部的中断 __asm volatile ("cpsid i" : : : "memory");
(3)其他注意要点
① bootloader中提供的外部接口:
Ⅰ.缓存buff的size
Ⅱ.bootloader的等待值
Ⅲ.app的栈顶地址
Ⅳ.和上位机通信的can帧ID
Ⅴ.要擦除app扇区的数量
②bootloader 注意:
Ⅰ.没有使用独立看门狗,s32k144的独立看门狗从上电复位到掉电只能被初始化一次,所以app使用,bootloader没有使用。以后版本会使用到
Ⅱ.进行flash操作的时候,不可能处理完一行的srec的值就写入flash中,可以用一个buff缓存,这个buff的大小直接决定了更新速度。下面两点要注意:
□ 为提高flash写入速度,app扇区在第一次写flash时就擦出全部app扇区,这个地方要注意擦除的地址要小于自己配的eeprom的地址,不然会将以前的数据擦除。
□ 在进行flash操作的时候不能被中断打断,所以返回上位机一条忙碌的信息,使其阻塞。
□ 缓存buff必须动态分配,跳转前必须释放
2.app
(1).修改app的链接文件
keil的话直接在output选项卡中修改栈顶地址就行,而我此次用的是S32DS,需要修改工程的链接文件如下图


(2).在主函数中设置中断向量表的偏移地址,并打开全局中断
/* 此处偏移地址必须和bootloader中的一样 */
S32_SCB->VTOR = 0x00002000 ;
/* 关闭全局中断*/
__asm volatile ("cpsie i" : : : "memory");
(3).添加CAN特殊ID
当接收到的帧ID是某一特定ID时,判断接收到的值 unsigned char resetmcu[] ={0x52,0x45,0x53,0x45,0x54,0x4d,0x43,0x55};这些值对应RESETMCU的asicii码对应的十六进制值
当正确时复位看门狗,mcu重新从0x00000000开始运行,完成更新软件复位,从而更新程序
(4).app至少需要的接口 :引起看门狗复位的CAN_ID
3.kavser 上位机软件
(1)主要功能如下图:

(2)提供外部接口: 与MCU通讯的帧ID
PS :控制好一键复位和发送第一帧数据的时间间隔,太快就会丢失这一帧,太慢,bootloader已经跳到app中去了
4.量产烧录
出厂第一次烧录的时候必须将bootloader 的srec文件和app的srec文件合成一个srec文件,并用J-FLASH烧录到MCU,J-FLASH可以合并文件和分段烧录是一个比较非常好用的工具,非常方便
体会:本次发现C#是很好用的,以后可能用到着,一切皆工具
s32k144 bootloader的更多相关文章
- 自己用C语言写NXP S32K144 serial bootloader
了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader) 欢迎咨询或定制bootloader(在线升级程序). NXP S32K144 ...
- S32Kxxx bootloader之CAN bootloader
了解更多关于bootloader 的C语言实现,请加我Q扣: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 最近完成了S32Kxx ...
- STM8如何使用自带的bootloader
1,首先确认你使用的STM8有没有自带的bootloader.参考下表 2,STM8空器件可以直接使用自带的bootloader. 3,STM8在使用SWIM烧录后,要想继续使用自带的bootload ...
- Android Bootloader LittleKernel的两篇文章 【转】
转自:http://blog.csdn.net/loongembedded/article/details/41747523 2014-12-05 14:37 3599人阅读 评论(2) 收藏 举报 ...
- 斐讯k1路由器刷Breed BootLoader(不死UBoot)教程
刷入Breed BootLoader: 因为这个K1路由器可以开启telnet服务,所以此处刷Breed可以不使用编程器刷Flash芯片的方法进行. 1.打开K1路由器的Telnet服务. 电脑通过有 ...
- Linux学习 : 自己写bootloader
一.bootloader 目标:启动内核 基本功能: ①初始化硬件:关看门狗.设置时钟.设置SDRAM.初始化NAND FLASH ②image比较大需要重定位到SDRAM ②将内核从NAND FLA ...
- How to acquire an Android phone with locked bootloader?
As we know that some devices come with locked bootloaders like Sony, HUAWEI, hTC...If you try to unl ...
- Encrypting bootloader (程序BIN文件加密及在线升级)
了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 在上一个博客随笔,我介 ...
- Xmodem Bootloader
了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 多年前玩Cisco交换 ...
随机推荐
- Linux 笔记 - 第八章 文档的打包与压缩
博客地址:http://www.moonxy.com 一.前言 在 Linux 系统中,文件的后缀名没有实际的意义,加或者不加都无所谓.但是为了便于区分,我们习惯在定义文件名时加一个后缀名,比如常见的 ...
- 使用ajax提交的json数据,产生筹码问题
使用ajax提交的json数据,我们必须添加produces注解,如下所示.否则将会产生乱码 方法一:添加produces注解 @ApiOperation(value = "删除日志&quo ...
- 代码审计之SQL注入及修复
在新手入门web安全的时候,sql注入往往是最先上手的一个漏洞,它也是危害相当大的一个漏洞,存在此漏洞的话,将有被脱裤的风险. 以下所有代码都是我自己写的,可能有不美观,代码错误等等问题,希望大家可以 ...
- selenium-03-01截图函数
UI自动化测试执行过程中,当遇到检查失败的情况,往往会发现打印的log并不能有效地帮助我们定位问题.我们需要失败时刻的屏幕截图来重现当时的失败场景,进而排查出错原因. 基于这种需求可以使用Sele ...
- Python Excel操作——xlrd、xlwd
读取 1.导入模块 import xlrd 2.打开Excel文件读取数据 data = xlrd.open_workbook('excel.xls') 3.获取一个工作表 1 table = dat ...
- netty源码解解析(4.0)-23 ByteBuf内存管理:分配和释放
ByteBuf内存分配和释放由具体实现负责,抽象类型只定义的内存分配和释放的时机. 内存分配分两个阶段: 第一阶段,初始化时分配内存.第二阶段: 内存不够用时分配新的内存.ByteBuf抽象层没有定义 ...
- Android NDK(二) CMake构建工具进行NDK开发
本文目录 一Androidstudio中需要的插件 二项目配置 ①build.gardle配置 ②CMakeLists.txt ③Android和Cpp的代码 ④so文件生成 ⑤so文件的位置 一.A ...
- vim设置golang语法高亮 (Centos)
Go语言自带vim 的语法高亮文件. http://www.golangtc.com/download 下载 go1.3.3.src.tar.gzgo1.3.3 (source only),解压缩 ...
- SpringBoot系列:Spring Boot使用模板引擎FreeMarker
一.Java模板引擎 模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档. 在jav ...
- Spring使用ThreadPoolTaskExecutor自定义线程池及实现异步调用
多线程一直是工作或面试过程中的高频知识点,今天给大家分享一下使用 ThreadPoolTaskExecutor 来自定义线程池和实现异步调用多线程. 一.ThreadPoolTaskExecutor ...