CodeWarrior IDE使用Tips之利用Hiwave读取S12(X)片上NVM命令脚本
0赞CodeWarrior IDE使用Tips之利用Hiwave读取S12(X)系列MCU片上NVM命令脚本(CW 5.x IDE)
内容提要
引言
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)的片上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命令窗口中的命令可以完成的功能十分丰富和强大,大家可以参考本文介绍的方法自己学习。