内容提要
引言
1. Hiwave调试软件中的command窗口和save命令介绍
1.1 Hiwave调试软件中的command窗口介绍
1.2 查看Hiwave命令窗口所支持的命令
1.3 了解命令用途和具体使用方法
1.4 save命令详解
2. 通过CALL命令调用cmd脚本实现NVM读取
2.1 CMD命令脚本和CALL命令详解
2.2 读取S12G128的片上NVM数据
2.3 读取S12XEP100的片上NVM数据
总结
引言
本公众号之前的文章(点击标题即可快速跳转阅读):
S12(X)系列MCU的片上存储器资源与分页访问机制详解(一) ;
S12(X)系列MCU的片上存储器资源与分页访问机制详解(二);
详细介绍了S12(X)的片上NVM(非易失性存储器--包括EEPROM/D-Flash和P-Flash)以及RAM资源的分页访问机制是具体使用和编程方法。
而在实际工作中,如果遇到ECU功能异常,需要做失效分析(FA-Failure Analysis)时,为了排除NVM中的程序代码和数据被意外修改(比如程序跑飞,运行Bootloader中的NVM驱动程序,导致NVM擦除或编程为非预期值)的因素,我们常常需要在重新下载应用程序或者外设测试程序之前,将失效ECU的MCU的NVM内容读出(所谓dump out)与下载的原始应用工程编译结果S19文件或者正常ECU中读出的内容进行对比;或者时在开发bootloader时,完成APP下载之后,检查APP通过bootloader下载的完整性和正确性,也需要读出NVM的内容。
本文针对这一需求,介绍如何利用BDM调试器,在CW5.x IDE自带的Hwave调试软件中,通过command命令窗口save命令完成S12(X)系列NVM读出的方法和步骤,希望对大家有所帮助。
1. Hiwave调试软件中的command窗口和save命令介绍
CW 5.x IDE自带的调试软件Hiwave位于其安装目录下的Prog子目录下,双击即可打开:
1.1 Hiwave调试软件中的command窗口介绍
按照《CodeWarrior IDE使用tips之bug定位绝技--hotsync与attach调试》(点击标题即可快速跳转阅读)介绍的方法链接和配置连接好目标MCU之后界面如下图:
其中:
源代码窗口(Source):加载应用工程ABS文件和源代码之后,可以在该窗口中看到应用程序的C语言源代码;
函数列表窗口(Procedure):在该窗口中会列出当前断点所在的函数及其地址信息;
全局变量窗口(Data1):在该窗口中会自动列出当前应用工程的所有全局变量,在该窗口中,可以查看全局变量的地址和赋值情况;
局部变量窗口(Data2):在该窗口中会自动列出当前应用工程的所有局部变量,在该窗口中,可以查看局部变量的地址和赋值情况;
汇编代码窗口(Assembly):正常调试时,该窗口将自动显示与源代码窗口对应的汇编代码;
CPU内核寄存器窗口(Register):该窗口可以查看和修改CPU内核寄存器;
存储器查看窗口(Memory):通过在窗口可以查看任意合法的MCU存储器内容;
command命令窗口(Command):位于调试界面的右下角,可以在其中输入命令控制调试过程,比如设置断点,查看变量等,以及打印输出命令执行结果和调试log信息;
在command命令窗口的命令提示符in>之后输入想要执行的命令,然后回车即可执行该命令。
Tips:以上窗口其实都是Hiwave的窗口组件(window component),可以将其单独最大化、最小化或者关闭。如果不小心关闭了某一窗口,可以通过菜单Component-->Open..-->在Open Window Component对话框中选择相应的组件重新打开或者另外打开一个新的组件窗口,如下为打开command命令窗口的过程:
Tips:通过打开对个窗口组件,比如打开3个memory窗口,可以同时查看本地址地址、逻辑地址和全局地址或者不同存储器--EEPROM、RAM和P-Flash中的数据变化,从而全面掌握调试信息,功能十分强大,使用也十分方便快捷。但是每一个BDM连接,只能打开一个command窗口;
1.2 查看Hiwave命令窗口所支持的命令
在command窗口中输入命令help即可查看到所有可在该窗口中执行的命令及其功能介绍:
Tips:command窗口中输入的命令不区分大小写,比如命令help,输入help或者HELP都可以被Hiwave识别:
1.3 了解命令用途和具体使用方法
通过Hiwave的菜单Help-->Help Topics-->打开HC(S)S12(X) Debugger 帮助,在其中搜索栏输入命令作为关键词,即可查到该命令的使用说明,比如搜索本文要使用的save命令,其结果如下:
1.4 save命令详解
save命令用于将指定地址范围的存储器数据保存(读出)到指定的S19文件中,其用法如下:
SAVE range fileName [offset][;A]
range:指定要读出的存储器地址范围:在起始地址和结束地址之间用英文输入法输入的两个小数点".."进行区分:<起始地址>..<结束地址>;
fileName :指定用于保存数据的文件名,可以包含具体路径或者直接文件名,前者将自动在指定的目录下创建该文件用于保存存储器数据,后者由于为指定保存路径,所以其默认会在当前工程的project.int所在目录下创建S19文件:
[offset]:可选选项,用于指定保存到S19文件时是否进行地址偏移,默认为偏移为0,即保存时使用的地址与save命令range中指定的地址一致;
[;A]:可选选项,用户将当前目录输出的数据叠加(append)到已有S19文件,比如要将多次save命令导出的不连续地址数据放在同一个S19文件中时,就可以使用这个选项了。
典型应用例子如下:
①:in>SAVE 0x400..0x13FF S12G_EEPROM.s19
作用:将S12G系列MCU位于地址0x400到0x13FF之间的4KB EEPROM数据读出保存到当前工程目录下的S12G_EEPROM.s19中;
②:in>save 0x88000..0x8BFFF D:\S12G128_NVM.s19 ;A
作用:将位于地址0x88000到0x8BFFF 之间的16KB S12G128的0x8 的P-Flash分页数据读出叠加保存到D:\S12G128_NVM.s19中;
2. 通过CALL命令调用cmd脚本实现NVM读取
2.1 CMD命令脚本和CALL命令详解
Hiwave调试软件支持调用命令脚本文件方式实现多条命令的一次性调用和执行;其目录脚本文件类似于Window的命令行批处理文件,用户可以通过新建文本文件(*.txt)然后将其后缀手动修改为.cmd的方式创建其脚本文件。
使用任意文本编辑器即可打开和编辑器中内容,所有可以在Hiwave调试软件command窗口中正常执行的命令都可以添加带.cmd脚本文件中。
通过以下命令CALL即可调用已经创建好的cmd脚本文件。
CALL FileName [;C][;NL]
其中,FileName 为所要执行得cmd脚本文件,其可以指定具体的cmd保存路径以执行其他非当然工程目录下的cmd脚本文件;
CALL 命令的典型用法如下:
CALL D:\S12G128_NVM_Read.cmd
作用:调用并执行保存在D盘根目录下的S12G128_NVM_Read.cmd脚本文件。
2.2 读取S12G128的片上NVM数据
S12G128的片上NVM资源如下:
器件(part) |
存储器资源类型 |
大小 |
分页寄存器 |
分页窗口地址 |
分页号 |
页数 |
S12G128 |
EEPROM |
4KB |
- |
无 |
- |
- |
P-Flash |
128KB |
PPAGE |
0x8000~0xBFFF |
0x08~0x0F |
8 |
由于S12G系列MCU在Hiwave调试软件中的memory窗口无法通过全局地址查看其P-Flash空间数据,比如输入地址0x3C000'G--S12G128的page F P-Flash所对应的全局地址,其中数据为未知状态(-):
而输入地址0xF8000'L--S12G128的page F P-Flash所对应的逻辑地址,则可以正常查看到P-Flash中的数据:
只能通过分页的逻辑地址来查看和读取其P-Flash的数据,而save目录只能读取合法的联系地址数据,所以如果在command命令窗口通过save命令读取,则需要执行9次(其中包含读取EEPROM的数据)save命令。
所以为了简化操作,我们在D盘根目录下创建一个cmd脚本文件--S12G128_NVM_Read.cmd,并编辑输入以下命令:
save 0x400..0x13FF D:\S12G128_NVM.s19 ;A
save 0x88000..0x8BFFF D:\S12G128_NVM.s19 ;A
save 0x98000..0x9BFFF D:\S12G128_NVM.s19 ;A
save 0xA8000..0xABFFF D:\S12G128_NVM.s19 ;A
save 0xB8000..0xBBFFF D:\S12G128_NVM.s19 ;A
save 0xC8000..0xCBFFF D:\S12G128_NVM.s19 ;A
save 0xD8000..0xDBFFF D:\S12G128_NVM.s19 ;A
save 0xE8000..0xEBFFF D:\S12G128_NVM.s19 ;A
save 0xF8000..0xFBFFF D:\S12G128_NVM.s19 ;A
Tips:由于S12G系列MCU在Hiwave中不支持全局地址,所以在memory窗口或者save命令中使用0x88000和0x88000'L都是指向逻辑地址空间。
然后,在Hiwave调试软件的command命令窗口中输入以下CALL命令调用该脚本:
CALL D:\S12G128_NVM_Read.cmd
执行结果如下:
此时,我们就可以在D盘根目录下看到读取结果S19文件--S12G128_NVM.s19:
2.3 读取S12XEP100的片上NVM数据
S12XEP100的片上NVM资源如下:
器件(part) |
存储器资源类型 |
大小 |
全局地址 |
S12XEP100 |
EEPROM/D-Flash |
32KB |
0x138000~0x13FFFF |
P-Flash |
1MB |
0x70000~0x7FFFFF |
由于Hiwave调试软件支持S12XE系列MCU的全局地址,所以可以通过以下save命令完成S12XEP100的片上NVM资源数据的读取:
①读取32KB D-Flash数据
save 0x138000'G..0x13FFFFD'G:\S12XEP100_NVM.s19 ;A
②读取1MB P-Flash数据
save 0x700000'G..0x7FFFFFD'G:\S12XEP100_NVM.s19 ;A
Tips:当然,用户也可以使用P-Flash的逻辑地址来访问和读取其数据。
总结
Hiwave调试器软件的command命令窗口中的命令可以完成的功能十分丰富和强大,大家可以参考本文介绍的方法自己学习。
以上就是今天跟大家分享的内容。希望对大家有用。
本微信公众号已经发布的个人原创精品----嵌入式系统技术文章链接如下,欢迎大家参考学习,并转发分享(可直接点击下列文章题目跳转阅读):
1. 汽车电子ECU bootloader开发系列
汽车电子ECU bootloader开发要点详解
汽车电子ECU BootLoader开发之基于CAN总线通信的MPC574xP系列MCU bootloader开发详解
汽车电子ECU BootLoader开发之基于CAN总线通信的S12(X) 系列MCU独立NVM驱动安全bootloader
Qorivva MPC56xx系列MCU启动过程全解析(基于CW IDE应用工程--EAB I、链接文件、启动文件和map文件)
《汽车电子ECU BootLoader开发》系列相关文章链接与资源汇总
2. 浅谈嵌入式MCU开发系列
浅谈嵌入式MCU开发中的三个常见误区
浅谈嵌入式 MCU 软件开发之应用工程的堆与栈
浅谈嵌入式MCU软件开发之中断优先级与中断嵌套
浅谈嵌入式MCU软件开发之代码风格与代码优化
浅谈嵌入式MCU软件开发之startup过程详解(从复位向量到main函数之前的准备工作)
浅谈嵌入式软件开发之Qorivva MPC56/57xx系列MCU的Power e200内核寄存器功能和内核调试技巧介绍
浅谈嵌入式MCU软件开发之startup过程详解(在CodeWarrior 5.1 中实现RAM自定义初始化)
浅谈嵌入式MCU软件开发之S12(X)系列MCU 中断ISR在CodeWarrior 5.1 IDE 中的三种写法
浅谈嵌入式MCU硬件设计之MCU最小系统电路
3. 外设使用Tips系列
S12(X)系列MCU的片上存储器资源与分页访问机制详解(一)
S12(X)系列MCU的片上存储器资源与分页访问机制详解(二)
S12(X)系列MCU的加密(Secure)原理和解密(Unsecure)方法
使用 Cyclone 离线编程器对 S12(X)和 MagniV S12Z 系列 MCU 片上 NVM 编程
S32K1xx系列MCU使用Tips--功能介绍及软件开发和硬件设计FAQ
S32K1xx系列MCU使用Tips--Flash加密后不断复位无法连接调试器的问题解决
外设使用Tips之Qorivva MPC56xx_57xx系列MCU内核异常(IVORx)与IRQ中断处理详解
外设使用Tips之Qorivva MPC56xx/57xx系列MCU的模式控制与切换(片上外设资源使能与功耗控制)
外设使用Tips之S12G系列MCU Startup之前的复位过程详解(COP看门狗复位和时钟监测复位中断识别与处理)
外设使用Tips之MPC57xx系列MCU C55 Flash模块详解及其SSD(标准软件驱动)使用
外设使用Tips之MSCAN接收ID滤波器设置
外设使用Tips之TIM定时器使用FAQ和使用经验
外设使用Tips之MPC574xP系列汽车级MCU的SWT看门狗定时器配置与使用
4. S32DS 使用Tips系列
S32DS使用Tips--S32DS for Power V1.2 链接文件和启动过程详解
S32DS 使用Tips之S32DS for Power不同版本之间的GNU工具链差异与外设寄存器位域访问问题总结
S32DS使用Tips之S32DS for Power v1.1应用工程升级到v1.2重新编译运行程序跑飞问题解决
S32DS 使用tips--S32DS for ARM v1.3工程到S32DS for ARM V2.0迁移升级方法和注意事项
S32DS 使用 tips--工程属性配置(编译选项和C编译器、汇编器及链接器设置)
S32DS使用Tips--如何编译生成和调用静态库
S32DS使用Tips--如何通过创建新的编译目标(Build Target)在同一个S32DS工程中同时编译静态库和应用程序
S32DS使用Tips--如何配置和使能Attach功能定位软件程序bug和完成bootloader与应用程序工程的联合调试
S32DS 使用 tips--使用Flash from file下载S19或elf文件
5. CodeWarrior IDE使用Tips系列
CodeWarrior IDE使用tips之bug定位绝技--hotsync与attach调试
CodeWarrior IDE使用Tips之Qorivva MPC56xx新建应用工程选项、调试高级选项及下载过程控脚本详解
CodeWarrior IDE使用tips之prm链接文件详解(自定义存储器分区以及自定义RAM数据初始化与在RAM中运行函数)
CodeWarrior IDE使用Tips-Qorivva MPC56xx应用工程map文件全解析(CW 2.10/10.x )
CodeWarrior IDE使用tips之map文件详解
CodeWarrior IDE 版本选择与 License功能(feature)和价格,授权形式差异、激活方法与安装使用
CodeWarrior IDE使用Tips-如何编译生成和调用静态库
CodeWarrior与S32DS IDE使用 Tips之如何在应用工程中保留定义但未使用的全局常量、变量(用于参数标定)
CodeWarrior IDE使用Tips之如何通过prm文件指定汇编代码函数、全局变量和常量的储存地址
CodeWarrior IDE使用Tips之burner工具使用详解(实现不同类型存储器地址间的转换和NVM编程格式文件的输出)
CodeWarrior IDE使用Tips--使用burner将elf文件转换生成HEX和BIN文件的方法和步骤详解
原创写作不易, 如果大家觉得本文对你的工作和学习有帮助,也欢迎大家打赏鼓励----我将坚持写作,给大家带来更多精彩的原创文章。
Tips:使用Android手机的读者直接点击文末的打赏链接进行打赏;使用iPhone的读者由于苹果公司关闭了微信打赏功能,请通过微信长按以下二维码打赏鼓励作者。
Thank you!
如果你喜欢本公众号的文章,请点击文章最开始的公众号关注或微信直接长按扫描识别下方二维码关注,你也可以在微信添加朋友-->公众号-->输入"汽车电子expert成长之路"搜索-->点击关注。若对本文观点有任何意见和建议也欢迎留言指出。
您的关注、点赞、转发分享是对我辛勤写作的最大肯定!