《疑难答疑》之S12G系列MCU使用Hiwave和BDM调试器debug
0赞《疑难答疑》之S12G系列MCU使用Hiwave和BDM调试器debug时无法使用逻辑地址查看和保存P-flash问题的解决
内容提要
问题描述(Issue Discription)
根本原因分析(Root Cause)
解决方案与总结(Solution and Summary)
问题描述(Issue Discription)
在我之前的文章《CodeWarrior IDE使用Tips之利用Hiwave读取S12(X)系列MCU片上NVM命令脚本(CW 5.x IDE)》(可直接点击下列文章题目跳转阅读)中详细介绍了在Hiwave中如何使用save命令保存NVM(EEPROM和P-Flash)的数据到S19文件的方法和步骤,当时是以S12G128为例进行介绍的,使用逻辑地址进行操作的,有读者反馈说,使用同样的方法去保存S12G64的P-Flash数据时遇到了问题:
在Hiwave窗口中执行如下逻辑地址的save命令:
save 0xD8000..0xDBFFF D:S12G64_PageD_PFlash.s19
出现失败,并提示错误原因为:save命令的输入存储器地址范围未定义( memory not defined in given range):
进而,再尝试通过Hiwave的Memory窗口查看逻辑地址0xD8000的数据,也不能正常跳转:
通过以上操作验证,似乎Hiwave不支持使用逻辑地址区访问S12G64的P-Flash地址空间?使用save命令保存S12G64的P-Flash数据和代码时应该使用什么地址呢?
根本原因分析(Root Cause)
首先,我们来看看S12G64的4KB P-Flash,其地址映射时如何的?
根据我之前公众号文章《S12(X)系列MCU的片上存储器资源与分页访问机制详解(一)》和《S12(X)系列MCU的片上存储器资源与分页访问机制详解(二)》(可直接点击下列文章题目跳转阅读)S12G64存在4个Flash 分页(Page),其对应的本地地址(Local Address)、逻辑地址(Logical Address )和全局/物理地址(Global/Physical Address) memory map如下表:
从上表可以看到,虽然在默认的Hiwave调试软件中,我们可以使用本地地址正常访问P-Flash,但并非所有的64KB P-Flash都可以在本地地址空间直接访问,而且也不正常全局地址。
通过对比S12G128的Hiwave配置和分析Hiwave的debug工作原理,其Memory和Command窗口等调试接口的访问地址空间由Hiwave软件的配置和真实的目标MCU存储器映射地址共同决定,即:
要访问一个存储器/寄存器地址,其必须满足以下两点:
①MCU硬件上必须存在该存储器映射地址;
②Hiwave的调试存储器映射(Debugging Memory Map..)配置也必须存在该地址:
我们可以通过Hiwave的菜单HC12MultilinkCyclonePro-->Debugging Memory Map..打开其配置:
其默认配置如下,只有地址空间0x0000~0xFFFF的64KB存储器地址映射,没有我们想使用的逻辑地址映射:
因此,使用Hiwave默认的S12G64配置,所以的逻辑地址都不能通过调试器访问:
比如,使用0xF8000访问Page F的P-Flash依然不能正常跳转:
解决方案与总结(Solution and Summary)
通过以上分析,此问题的解决方法就是在Hiwave的Debugging Memory Map..配置增加相应的逻辑地址空间即可:
具体步骤如下:
①Hiwave的菜单HC12MultilinkCyclonePro-->Debugging Memory Map..打开其配置:
②选择New,增加一个新的调试存储器映射(Debugging Memory Map..)配置:
在弹出的配置窗口中,首先勾选使能“Enable memory module.(act”,,然后再输入正确的起始地址(本地/逻辑/物理地址),访问属性(access)、地址类型(Type)和优先级(Priority)和注释(Comment,可以忽略)等信息:
以下为成功添加S12G64的Page D的P-Flash逻辑地址空间配置的结果:
完成以上配置之后,我们就可以在Memory窗口和Command窗口使用逻辑地址查看和使用save命令保存S12G64的的Page D的P-Flash了:
为了能够使用逻辑地址访问所以的64KB 片上P-Flash,完整的Hiwave的Debugging Memory Map..配置如下:
此外,若按照如下添加S12G64的全局物理地址(0x30000~0x3FFFF)到Hiwave的Debugging Memory Map..配置
其P-Flash也可以使用全局地址访问了,比如在Memory窗口中,同时使用本地地址(0xC000)、逻辑地址(0xF800)和物理地址(0x3C000)查看Page F的P-Flash数据结果如下:
Tips:在添加了全局地址映射空间到Hiwave的Debugging Memory Map..配置之后,我们如果使用全局物理地址查看S12G64的Page C P-Flash,就会发现,其与I/O外设寄存器、EEPROM和RAM重叠的区域内容映射的是相应的I/O外设寄存器、EEPROM和RAM地址空间,而非真实的P-Flash地址空间,因此还是得使用逻辑地址进行:
比如,使用全局物理地址0x33000和逻辑地址0xCA000访问P-Flash的Page C最后4KB地址,以及使用0x3000访问RAM的结果如下:
所以,我们还是不能简单的使用全局物理地址利用如下save命令导出S12G64的P-Flash数据和代码:
save 0x30000..0x3FFFF D:\S12G64_PFlash_Physical_Addresss.s19
胡恩伟
NXP汽车电子FAE
若对本文观点有任何意见和建议欢迎留言指出。
如果喜欢,可以关注本人公众号,阅读更多精彩内容。