Python微信订餐小程序课程视频

https://edu.csdn.net/course/detail/36074

Python实战量化交易理财系统

https://edu.csdn.net/course/detail/35475
了解更多关于bootloader 的C语言实现,请加我Q扣: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序)。

最近完成了S32Kxxx CAN bootloader, 之前需要拆开外壳通过烧写口才能更新应用程序。如果产品灌了胶,每更新一次应用程序都非常之麻烦。现在有了CAN bootloader, 可以通过Standard CAN 接口就能够更新产品的应用程序,简单又方便。就算产品已经出货到了客户端,更新程序也不繁琐,成本也可接受。接下来分两部分来介绍,第一部分介绍如何实现S32K CAN bootloader,碰到的问题,以及如何解决的。第二部分介绍如何使用S32K CAN bootloader。

S32Kxxx CAN bootloader的实现

NXP S32Kxxx 系列芯片的功能很强大, 开发环境也不错, 特别是Processor Expert。 我的S32Kxxx CAN bootloader的所有底层driver,包括CAN driver都是通过Processor Expert 配置生成。S32Kxxx CAN bootloader 的开发环境:

1. IDE: S32DS for ARM, Version: 2018.R1

2. Compiler: GCC for ARM,  Version:gcc-6.3-arm32-eabi

3. SDK: S32DS/S32SDK_S32K1xx_RTM_3.0.0

S32Kxxx CAN bootloader 的上层代码是手写的,以下底层Components 代码都是通过Processor Expert配置后自动生成:

1, PIN (pin_mux)

2. Clock (clock manager)

3. Interrupt (interrupt manager)

4. CAN (can_pal)

5. Flash (flash driver)

6. SBC  (external watchdog, can tranceiver uja1169)

虽然大概一年前我有完成过S32Kxxx UART bootloader,  但此次S32Kxxx CAN bootloader 实现过程比我预想的要更难,实现花费的时间也比我预想的要更长。主要原因就是碰到了以下问题,解决它们花费了我不少时间。

1。 CAN 通信始终收发都不成功。

供电,硬件,can driver, sbc driver 一个一个去排查,最后查出不是硬件的问题,也不是can driver 的问题。

供电有问题,我的板子是NXP官方出品EVA 板子,我是使用USB 口供电,但是如果需要CAN 通信成功,需要接上power adapter。

sbc driver 有问题, sbc_init时,里面的SBC_GetMode返回0,后面这个返回值0又通过SBC_SetMode()设置回去,造成sbc_init出错。修正后就OK。

2。 Flash 擦除不成功

flash driver, watchdog, interrupt 一个一个去排查,查出不是flash driver的问题。

Interrupt 管理有问题,FLASH_DRV_EraseSector调用前需要关Interrupt, 调用后再开Interrupt。否则会重启(寄存器RCM提示是Lockup的Reset source)

watchdog管理有问题, 担心擦除时间长,每擦除块后调用SBC_SetWatchdog就出现Reset造成擦除无法完成,不调用就没有问题,然后发现此时

另外sbc_init完成后g_drvConfig.isInit既然等于false, g_drvConfig.isInit等于false, 之后调用SBC_SetWatchdog出问题。sbc_init完成后g_drvConfig.isInit既然等于false。将其改为true。 问题消失。

3。 程序卡死在SBC_SetWatchdog。

排查后发现SBC_SetWatchdog前不能关Interrupt。

Processor Expert 用起来很愉快,一旦生成的代码使用起来,如果出了问题,也是让人头疼不已。

S32Kxxx CAN bootloader的使用

S32Kxxx CAN bootloader 使用很简单。需要用到一个CAN盒子,Z-Box CAN,简称ZCAN。 是我开发的一个很强大的CAN总线分析工具。还需要在电脑端运行一个上位机zFlash。zFlash是我用C# 语言开发的一个Windows 软件。 zFlash操作非常简单,能够自动查询Z-Box CAN并建立连接。点击zFlash界面上的下载按钮,下发握手指令去查找bootloader。 和bootloder 握手成功后就按照自定义的协议发送应用程序完成升级。

S32Kxxx CAN bootloader 时电脑和板子的连接如下图。 电脑上运行zFlash, 中间的USB-2-CAN是CAN 总线分析仪Z-Box CAN。用户板上烧录了S32Kxxx CAN bootloader。我的用户板上面的芯片是S32K116,是NXP的一款带有CAN controller的ARM Cortex-M4核的32-bit 单片机。这个bootloader 移植到S32K118,S32K144等都很容易。

Z-Box CAN 是一款强大的CAN 总线分析仪,其金属外壳一边是方形USB 口通过USB线连接电脑,一边是DB9口连接CAN bus。内部是进口芯片,信号有隔离。可以安全可靠地工作在复杂的工业场所,或用来分析汽车上各ECU之间的CAN 总线。见图:

Z-Box CAN最强大的地方是busmaster 支持它。busmaster(又称博世总线大师)是一种开源软件工具,用于模拟,分析和测试CAN / LIN总线系统。 它支持DBC,LDF,CAPL语言,节点模拟,自动测试, C语言脚本,log保存等等强大的功能。我在其开源代码的基础上进行添加,使其可以识别并连接我开发的Z-Box CAN。打开bumaster我的版本,找到Driver Selecion,选择Z-Box CAN,点击Connect, 既可以开始愉快的使用了。

S32Kxxx bootloader之CAN bootloader相关推荐

  1. 【Bootloader】探究bootloader,分析u-boot源码

    Preface 之前也发表过关于<Bootloader启动过程分析>的文章,但是内容表达得比较抽象,大多是文字叙述,所以这里从系统和代码的角度来深入分析bootloader的启动过程. 工 ...

  2. BLE CC2541 串口BootLoader 即 SBL BootLoader 资料 收集

    1.[CC254X_Bootloader]SBL(串口Bootloader)使用说明 2.CC2540协议栈高速串口通信解决(UART的DMA方式) 3.[BLE]CC2541之SBL 4.[BLE] ...

  3. bootloader详解----bootloader的基本概念

    引言 在专用的嵌入式板子运行 GNU/Linux 系统已经变得越来越流行.一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次: 1. 引导加载程序.包括固化在固件(firmware)中的 ...

  4. android 官方bootloader,安卓系统bootloader模式是什么?如何进入bootloader模式

    [刷机之家]在嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行.可以初始化硬件设备.建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的 ...

  5. 【Android】Pixel 2 解锁 Bootloader

    文章目录 一.Pixel 2 解锁 bootloader 前提 二.Pixel 2 解锁 bootloader 三.解锁成功 一.Pixel 2 解锁 bootloader 前提 欧版才能解锁 ; 美 ...

  6. 【嵌入式开发】 Bootloader 详解 ( 代码环境 | ARM 启动流程 | uboot 工作流程 | 架构设计)

    作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42462795 转载请著名出处 相关资源下载 :  -- u-boo ...

  7. 操作系统实现(一):从Bootloader到ELF内核

    Bootloader 我们知道计算机启动是从BIOS开始,再由BIOS决定从哪个设备启动以及启动顺序,比如先从DVD启动再从硬盘启动等.计算机启动后,BIOS根据配置找到启动设备,并读取这个设备的第0 ...

  8. [嵌入式]Bootloader的作用

    关于Bootloader的作用,老师教我们把它当作PC的BIOS来理解,但其实不完全是这么回事.文章参考: http://www.cnblogs.com/yashi88/archive/2010/02 ...

  9. 启动代码和Bootloader的区别和关系介绍

    注意:很多初学者总是将启动代码和Bootloader联系在一起,这是错误的 什么是启动代码?     启动代码是系统上电或者复位后运行的第一段代码,是进入C 语言的main 函数之前需要执行的那段汇编 ...

最新文章

  1. python中的for else
  2. php 删除指定html标签,总结php删除html标签和标签内的内容的方法
  3. 支付宝接口调用问题快速通道
  4. idl linux运行效率,Linux性能优化实战 CPU篇 阅读笔记
  5. python快速编程入门教程-半小时带你快速入门Python编程,Python快速入门教程
  6. XCTF_Web_新手练习区:webshell
  7. 曲线的生成算法实现_PCGPlanet1-地形生成算法简介
  8. oracle 如何查看当前用户的表空间名称
  9. LeetCode 669. Trim a Binary Search Tree
  10. Python的安装部署
  11. 逻辑数据库设计 - 单纯的树(邻接表、路径枚举、嵌套集、闭包表)(引)
  12. js页面滚动时层智能浮动定位实现(jQuery/MooTools)
  13. 用c语言编写成绩单由高到低,C语言程序设计实验.doc
  14. windows 安装metis_Win10 VS2013 suitesparse-metis-for-windows 1.3.1
  15. 质量管理体系文件分类
  16. 山海经鸿蒙手游iOS 版本,山海经鸿蒙异兽手游下载,山海经鸿蒙异兽手游最新官方版 v1.0-手游汇...
  17. 【导弹四种坐标系及坐标系之间的变换】
  18. 使用docker下载搭建TeamCity容器并使用
  19. 局域网中两台电脑通信
  20. Android 10.0 SystemUI状态栏屏蔽掉通知栏不显示通知

热门文章

  1. 【滑窗】B024_LC_和相同的二元子数组(暴力前缀和 / map 优化)
  2. 视频号迎来重大更新,这些功能久等了
  3. Android 屏蔽第三方SDK权限
  4. 全国电子设计大赛 物品清单分析2013年
  5. 剪裁头像裁剪遇到关于小米华为适配问题的解决
  6. 状语从句——专升本语法
  7. 下一代威胁感知系统的设计构想
  8. Perl CGI简介
  9. Java语言springboot开发框架实现个性化美食推荐网 在线美食推荐系统 基于用户、物品的协同过滤推荐算法实现
  10. Vimeo高级API:使用SCRIBE在JAVA中搜索公共视频