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. Day 9 用户管理

    1.什么是用户? 能正常登陆系统的都算用户 windows系统和linux系统的用户有什么区别? 本质上没有区别, linux支持多个用户同一时刻登陆系统, 互相之间不影 响 而windows只允许同 ...

  2. [Flask Tips]Flask-APScheduler用法总结

    在应用中需要使用调度框架来做一些统计的功能,可惜在Windows上可用的不多,最后选择了APScheduler这个调度器. 用法不多介绍,只总结一下在使用中遇到的坑. app_context 问题 凡 ...

  3. BOM之定时器

    JavaScript中的时间是通过定时器控制的,他们分别是window.setInterval和window.setTimeout,我们当然可以省略window,直接使用方法名称调用. 一     s ...

  4. JavaScript之数据类型转换

    JavaScript中有多种数据类型,在实际工作中,不管是有意还是无意的,我们总能碰到不一样的数据类型值之间进行运算,或者我想从用户输入获得一个数字时,而用户却输入了一个字符串,这种时候就需要用到今天 ...

  5. MySQL中对字段内容为Null的处理

    使用如下指令,意思就是 select IFNULL(jxjy,0) AS jxjy from yourTable ifnull(a,b) 意思是指:如果字段a为null,就等于b if( sex = ...

  6. JSR303 后端校验包的使用

    1.首先通过Maven导入JSR303架包. <!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate- ...

  7. selenium--定位--CSS

    大家在使用selenium元素定位的时候,通常更多使用的是XPATH,css定位方式用得比较少 但有时候css定位方式还是有一些优势的, 优势1:一般情况下定位速度要比XPATH快 优势2:语法要比X ...

  8. Spring boot 官网学习笔记 - Spring Boot CLI 入门案例

    安装CLI https://repo.spring.io/release/org/springframework/boot/spring-boot-cli/2.1.1.RELEASE/spring-b ...

  9. 【IT技术概念】WebAPI与传统的WebService有哪些不同?

    在.net平台下,有大量的技术让你创建一个HTTP服务,像Web Service,WCF,现在又出了Web API.在.net平台下,你有很多的选择来构建一个HTTP Services.我分享一下我对 ...

  10. 1 Processing入门简介

    1 Processing入门简介 1.1 Before you start Processing是一个为开发面向图形的应用(visually oriented application)而生的简单易用的 ...