S12ZVM Bootloader设计开发

S12ZVM Bootloader开发设计

1 开发环境下载

原本想采用IAR或Keil IDE,由于IAR不支持S12Z内核芯片,故采用NXP CodeWarrior IDE.

官网下载地址:www.nxp.com

官网需要注册帐号,怕麻烦的可以采用以下链接地址: https://download.csdn.net/download/ywtiex/86725562

2 CodeWarrior安装

Next -> Next -> Next, 这里不要详细描述,如有问题,请自行搜索百度。

3 工程创建

1 新建工程,File -> New -> Project, 如下图所示:采用Bareboard Project, 并创建工程名。
在这里插入图片描述

2 根据实际需求选择芯片类型和工程类型,Application为应用工程,Library为库工程。

(库工程可以编译打包生成.lib文件,方便给其它应用工程使用,应用工程编译链接生成可执行二进制文件)
在这里插入图片描述
3 根据实际情况选择调试连接器选项。
在这里插入图片描述

4 编译工具选项(应用工程内存模式需保持一致,否则会提示错误)
在这里插入图片描述
5 Processor Expert选项
在这里插入图片描述
6 电机控制库默认实现方式
在这里插入图片描述
End

4 驱动开发

Processor Expert用于图形化配置硬件驱动的插件,Processor Expert->Show Views可打开配置界面,如下图所示:
在这里插入图片描述工程目录下ProcessorExpert.pe为配置文件,可右键生成代码文件,存放在Generated Code目录下。

4.1 Cpu配置

Cpu配置,根据硬件实际情况,配置时钟选项。

本项目中采用外部晶振8M,故使能外部时钟,设置为8MHz,总线时钟频率设置为50MHz。总线时钟可根据实际情况调整,但所有采用总线时钟源的外设模式需相应调整。
在这里插入图片描述其它外设配置,可通过以下方式新增和删除,鼠标双击Cpu选项后右键Target Processor Package.
在这里插入图片描述以下目前Cpu配置情况,点击右上角Cpu相应外设后右键可新增外设模块。点击左下角相应外设右键可选择删除外设模块。
在这里插入图片描述

4.2 定时器配置

定时器配置,由于系统需要1ms定时器,配置如下:
在这里插入图片描述自动生成Enable/Disable函数接口,配置如下:
在这里插入图片描述自动生成TIM0中断处理函数,示图如下:
在这里插入图片描述
点击ProcessorExpert.pe后右键生成代码文件,可查看到Event.c文件中代码。

void TIM0_OnInterrupt(void)
{
	/* Write your code here ... */
    //此处需手动添加相应代码
}

4.3 CAN配置

CAN配置,由于本芯片CAN收发器和控制器都集成在芯片内部,故配置CAN之前,需配置CANPhy外设, 配置如下:
在这里插入图片描述
上图主要配置CAN通道和PIN脚的选择。

通过芯片手册可知,MSCAN有两路时钟源,一路为Bus Clock, 一路为Oscillator Clock, 一般推荐使用Oscillator Clock,避免时钟源来极少因倍频后带来的更大的噪点。
在这里插入图片描述
CAN配置只支持Bus Clock,那么后续波特率的计算,将使用4.1 Cpu配置的50MHz为输入源。

目前需求配置为500Kbits, 采样率为80%,计算公式如下:

通过芯片手册可知以下公式:
在这里插入图片描述500Kbits波特率位时间为2000ns

2000 = Pre/50 * (1 + TimeSegment1 + TimeSegment2)

假设Bit Time由20个QT组成,那么Pre=5(预分频值),波特率可以设置为500Kbits。
在这里插入图片描述通过上图可得到以下关系式:

1 + TimeSegment1 + TimeSegment2 = 20;

Sample Point(80%) = SYNC_SEG + Time Segment1 / 20;

求解:

TimeSegment1 = 15;

TimeSegment2 = 4;
在这里插入图片描述综上所述,CAN配置设置如下:

Time segment1是TSEG1寄存器的值,Time segment2是TSEG2寄存器的值,RSJ是指SWJ,可以配置为0-3。
在这里插入图片描述

4.4 Flash配置

基本配置如下:
在这里插入图片描述
自动生动函数接口配置如下:
在这里插入图片描述

4.5 EEPROM配置

基本配置如下:
在这里插入图片描述自动生成函数接口配置如下:
在这里插入图片描述

5 Bootloader刷写协议

bootloader刷写协议基于UDS协议栈,UDS协议栈不在此详细描述,对此感兴趣的可跳转至以下链接:
https://blog.csdn.net/ywtiex/article/details/126913855?spm=1001.2014.3001.5502

6 Flash空间划分

在这里插入图片描述

参数名地址备注
Bootloader_End0xFFFFFFBootloader结束地址
_ResetVectorTable0xFFFFFCBootloader复位向量
_InterruptVectorTable0xFFFE10Bootloader中断向量
Bootloader_Start0xFF0000Bootloader起始地址
Application_End0xFEFFFFApplication结束地址
_ResetVectorTable0xFEFFFCApplication复位向量
_InterruptVectorTable0xFEFE10Application中断向量
Application_Start0xFC0200Application起始地址

Bootloader占用64K空间,剩余空间由Application占用。

FLASH空间大小由ProcessorExpert.prm文件决定,如下图所示:
在这里插入图片描述
而ProcessorExpert.prm由配置文件生成,配置选项如下:
在这里插入图片描述
_ResetVectorTable和 _InterruptVectorTable参数由Vectors.c定义,如下图所示:
在这里插入图片描述在这里插入图片描述

那么是如何修改这两个参数呢?经过实验发现手动修改后,会被重新覆盖。ProcessorExpert.pe配置界面没有提供此配置项,通过文本方式打开ProcessorExpert.pe发现,两个参数是有默认参数,通过修改此参数值后,配置自动生成代码,可达到修改此参数值。
在这里插入图片描述

7 制作烧录文件和升级文件

7.1 制作说明

烧录文件用于产线烧录程序,一般由Appliation和Bootloader两部分程序组成,需要合并生成。

升级文件用于CAN UDS在线升级,升级文件由FlashDriver、Head、Updata三部分组成,FlashDriver及Head目前采用固定格式(直接提供),Updata文件由于上位机暂不支持多段升级需要填充0xFF。

7.2 制作方法

  1. 下载HexView软件,链接方式如下: https://pan.baidu.com/s/1dCelcyZdN03XVNMtBCdaCg?pwd=n5pi 提取码: n5pi
  2. 制作脚本, 新建Production.bat文件,编辑输入以下代码
::HexView软件路径
set HexVierPath=G:\Software\Work\Design\HexView\HexView.exe
::Application源文件名
set AppFileName=EPL_S12Z_Application.s19
::Bootloader源文件名
set BootFileName=EPL_S12Z_Bootloader.s19
::生产烧录生成文件名
set AppBootFileName=EPL_S12Z_AppBoot.s19
::应用升级生成文件名
set AppUpdataFileName=EPL_S12Z_ApplicationUpdata.s19

:: 合并文件
echo "Merage File"
%HexVierPath% /s /mt:%AppFileName%;+%BootFileName%;0:0xFF0000-0xFFFFFF /XS  -o %AppBootFileName%
:: 填充字节
%HexVierPath%  /s %AppFileName% /FR:0xFC0000-0xFEFFFF /FP:0xFF /XS -o %AppUpdataFileName%
  1. 复制Application.s19和Bootloader.s19到Production.bat同一目录。
  2. 双击Production.bat脚本,生成烧录文件和升级文件。
    在这里插入图片描述

Q&A

Q1 Application工程需要设置哪些参数?

1 Application空间地址,可参照6章节 Flash空间示意图设置。

2 _ResetVectorTable和 _InterruptVectorTable参数设置。

3 IVBR寄存器设置,此寄存器用来设置中断基础向量地址,如果采用配置方式,此地址与_InterruptVectorTable相关联,无需重新配置。

Q2 如何合并Bootloader与Application工程?

通过hexview或jlink工具可以手动合成。

Q3 通过什么方式烧录合并文件?

由于采用PE Micro下载器,去官网搜索烧录软件,目前需要收费,有试用版本。只能退而求其此次,采用CodeWarrior IDE自带的下载功能,界面如下:o真心丑陋,有条件的话可以购买正版烧录软件o
在这里插入图片描述

Q4 Bootloader跳转后无法运行?

这个问题卡了1-2个星期,现在梳理一下流程,防止后来者采坑。

MCU整体运行流程,如下图所示:
在这里插入图片描述
这里就上图逐一进行讲解分析:

1 MCU上电后从0xFFFFFC地址取址,从下图bootloader.s19文件可知,取址数据为0xFFFF000F。
在这里插入图片描述
从编译bootloader.map来看,0xFF000F对应函数_EntryPoint,如下图所示:
在这里插入图片描述
从上图可知,MCU采用3字节指令,这也是该问题关键所在。

2 JumpFunction,需要从0xFEFFFC取址,只取低3个字节,并跳转执行,代码如下:

	unsigned long int app_vector;

	//Jump to main application
	app_vector = *(unsigned long int *) (addr);
    app_vector <<= 8;  //跳转地址取后三个字节
    asm LD X, app_vector;
	asm JMP (0, X);

该问题出函数,没有取后三个字节,实际跳转至0xFFFC02,程序无法运行。

创作不易,请转载时注明原创链接地址,感谢关注和收藏!!!

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
CAN驱动软件设计及功能测试是针对S12ZVM(Motorola 16位微控制器)的CAN总线驱动软件进行设计和测试的过程。这个软件可以实现CAN通讯协议的解析和交互,使得不同的模块和设备可以在CAN总线上进行数据的传递和通讯。 在进行CAN驱动软件设计时,需要首先进行CAN总线控制器的初始化设置,包括波特率的配置、过滤器的设置和中断的处理等。然后需要设计CAN消息的发送和接收功能,包括数据的打包和解析以及错误处理等。另外,还需要考虑到CAN总线的唤醒功能、自动重传机制和错误处理等功能的设计。 在进行功能测试时,需要对CAN驱动软件的各个功能进行测试,包括消息的发送和接收功能、错误处理功能、唤醒功能和中断处理等。测试时需要模拟不同的情况,包括正常的数据传输、异常情况下的错误处理和重传机制等。同时还需要进行对接收到的CAN消息进行解析和验证,确保数据的正确性和可靠性。 在进行CAN驱动软件设计及功能测试时,需要充分考虑到硬件平台的特性和应用场景的需求,保证软件可以稳定可靠地运行并满足实际应用的需求。同时还需要关注软件的性能和资源占用情况,确保软件在有限的资源下能够高效地运行。通过设计和测试CAN驱动软件,可以实现系统中不同模块和设备之间的数据通讯,为实际应用提供可靠的数据交互通道。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jetty.Liu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值