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的更多相关文章

  1. 自己用C语言写NXP S32K144 serial bootloader

    了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader) 欢迎咨询或定制bootloader(在线升级程序). NXP S32K144 ...

  2. S32Kxxx bootloader之CAN bootloader

    了解更多关于bootloader 的C语言实现,请加我Q扣: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 最近完成了S32Kxx ...

  3. STM8如何使用自带的bootloader

    1,首先确认你使用的STM8有没有自带的bootloader.参考下表 2,STM8空器件可以直接使用自带的bootloader. 3,STM8在使用SWIM烧录后,要想继续使用自带的bootload ...

  4. Android Bootloader LittleKernel的两篇文章 【转】

    转自:http://blog.csdn.net/loongembedded/article/details/41747523 2014-12-05 14:37 3599人阅读 评论(2) 收藏 举报 ...

  5. 斐讯k1路由器刷Breed BootLoader(不死UBoot)教程

    刷入Breed BootLoader: 因为这个K1路由器可以开启telnet服务,所以此处刷Breed可以不使用编程器刷Flash芯片的方法进行. 1.打开K1路由器的Telnet服务. 电脑通过有 ...

  6. Linux学习 : 自己写bootloader

    一.bootloader 目标:启动内核 基本功能: ①初始化硬件:关看门狗.设置时钟.设置SDRAM.初始化NAND FLASH ②image比较大需要重定位到SDRAM ②将内核从NAND FLA ...

  7. 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 ...

  8. Encrypting bootloader (程序BIN文件加密及在线升级)

    了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 在上一个博客随笔,我介 ...

  9. Xmodem Bootloader

    了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 多年前玩Cisco交换 ...

随机推荐

  1. springboot 定时器 Schdule

    定时器:定时启动任务,执行代码 1.在启动类中加入注解: 2.创建一个类,并且在这个类上加入注解:@Component 3.定义一个方法,在方法上加入注解:@Scheduled(cron=" ...

  2. mybatis源码专题(1)--------复习jdbc操作,编译mybatis源码,准备为你的简历加分吧

    本文是作者原创,版权归作者所有.若要转载,请注明出处.文章中若有错误和疏漏之处,还请各位大佬不吝指出,谢谢大家. 1.mybatis的底层是jdbc操作,我们来回顾一下,如下  运行以后的结果如下图: ...

  3. 09 (OC)* 键路径(keyPath)、键值编码(KVC)、键值观察(KVO)

    键路径在一个给定的实体中,同一个属性的所有值具有相同的数据类型.键-值编码技术用于进行这样的查找—它是一种间接访问对象属性的机制. - 键路径是一个由用点作分隔符的键组成的字符串,用于指定一个连接在一 ...

  4. 大白话讲解 BitSet

    原理 BitSet是位操作的对象,值只有0或1即false和true,内部维护了一个long数组,初始只有一个long,所以BitSet最小的size是64,当随着存储的元素越来越多,BitSet内部 ...

  5. mybatis无法给带有下划线属性赋值问题

    https://blog.csdn.net/qq_33768099/article/details/69569561

  6. Hbase入门(二)——安装与配置

    本文讲述如何安装,部署,启停HBase集群,如何通过命令行对Hbase进行基本操作. 并介绍Hbase的配置文件. 在安装前需要将所有先决条件安装完成. 一.先决条件 1.JDK 和Hadoop一样, ...

  7. 浏览器端获取短信验证码java实现——阿里云短信服务

    需求:浏览器端输入手机号,获取验证码.点击登录,验证验证码是否输入错误.是否超时等情况,一旦校验通过,将用户数据保存到数据中(业务逻辑). 前提:注册阿里用户,开通短信服务,申请key.秘钥.签名.短 ...

  8. Spring 中使用 @Scheduled 创建定时任务

    一.定时任务触发条件 1.在 Application 启动类上添加:@EnableScheduling 2.含定时方法的类上添加注解:@Component,该注解将定时任务类纳入 spring bea ...

  9. 实际体验华为云AI : ModelArts

    国庆前看到了博客园官方博客发布的一篇博客: 学AI有奖:博客园&华为云AI有奖训练营开战啦 本着对AI这种火热的话题,以及华为云博客园联名公仔(次要),我决定参与这个活动. 现在华为云开始全面 ...

  10. 你的环境有问题吧?--byte数组转字符串的疑惑

    1. 故事背景 小T是个测试MM,小C是个程序猿,今天早上他们又为一个bug吵架了. 小T:“这个显示是bug,在我的浏览器上显示不正确” 小C:“这个bug我不认,在我的电脑上显示正常,是你的环境有 ...