S12X MCU上有一个协处理器,嗯,一个准双核处理器,但是之前都不会用,最近准备学习下怎么使用它。于是乎开始研究官方文档。

翻译的资料是公开的,在这里下载https://www.nxp.com/products/microcontrollers-and-processors/additional-processors-and-mcus/8-16-bit-mcus/16-bit-s12-and-s12x-mcus/ultra-reliable-s12xe-high-performance-automotive-and-industrial-microcontrollers:S12XE?tab=Documentation_Tab,我想应该不会有什么版权问题,如涉及版权问题,请联系我删除文章。另感谢NXP提供的学习资料。


Investigating XGATE Software Errors

XGATEV2 (S12X) Software Error Debugging Aid
by: Dirk Heisswolf
MCD Design
Munich, Germany

译者注:译者博客(http://blog.csdn.net/lin_strong),转载请保留这条。此为官方文档AN3555的翻译,仅供学习交流使用,请勿用于商业用途。

介绍

XGATE外设协处理器拥有一个名为软件错误探测(Software Error Detection)的安全特性。软件错误探测特性使XGATE能探测到不应该在程序执行中出现的状态(condition)。探测到这些状态说明应用程序代码有问题。

XGATE一探测到软件错误状态就会立即追踪程序的执行并触发CPU12X的中断以进行纠错行动。在典型的应用程序中,纠错行动只会简单地初始化并重启系统。然而,在应用程序代码的开发调试阶段,我们会想要精确定位XGATE软件错误。

这篇文档会帮助你调查S12X设备上XGATE软件的错误。文档的第二部分讨论了S12XE(和S12XF)产品家族。

注意:
这篇应用笔记描述的是写这篇文档时,出厂的S12X设备上的XGATE的行为。其中描述了一些没有在参考手册中提到的行为,这些行为可能在以后的XGATE下无效。这篇文档的目的是提供调试应用程序代码的有用信息。不要将其当成XGATE的附加规范。

软件错误探测特性

软件错误探测是XGATE的一个安全特性。它提供了一个机制,这个机制会在XGATE被要求做非法行为时停止程序执行并求助。
非法行为由一个软件错误状态集定义(章节2.1)。软件错误状态包含那些不受MCU架构支持以及与MCU存储器保护方案冲突的特性。软件错误状态根本不应该出现在应用程序中,我们认为其表明软件上的问题。
每当探测到了软件错误状态,XGATE会追踪程序执行并执行两个步骤:先触发CPU12X的一个中断(章节 2.2),然后进入一个叫做special Software Error State的状态(章节2.3)。
为了使XGATE应用程序代码的错误对系统造成的可能伤害最小化,XGATE会在探测到问题的瞬间追踪代码的执行。它不会终止当前指令的执行。
尽管从安全的角度来看,人们更想要在指令执行期间直接中断程序的执行,但这样却会增加调试软件错误时的复杂性。
指令会在它们指定的操作完成前被停止。实际执行完了哪一部分取决于XGATE模块的实现。
当前有两个修订版:主要整合进S12X设备的XGATEV2以及S12XE MCU中XGATEV3(增强型XGATE)。这些版本在软件错误探测特性的实现上有轻微的区别。这篇文档讨论了软件错误的行为,针对的是XGATEV2这个版本。

软件错误状况

不是每一个给予XGATE的指令都可以或应该被执行。那些调用未实现的硬件特性的指令无法产生有意义的输出。那些与存储器保护方案冲突的指令必须被阻止以保护数据一致性。章节 2.1.1和章节 2.1.2分别列出了这两类软件错误状态的清单。图 2中给出了所有状态的总结。

未支持特性的调用

有四个软件错误状态表明使用了未支持的硬件特性:

  • 未定义的操作码 — XGATE的指令集有许多未定义的操作码。执行它们会导致软件错误。图 1列出了所有的非法XGATE指令。对于未来发行的XGATE,这个清单可能会由于其后加入新特性而减少。

    图 1.非法指令
  • 访问非对齐的字(对于奇地址的16bit访问)
    S12X架构不允许XGATE对它的存储器进行非对齐字的访问。所以以下三种访问都会导致软件错误:
    — 从奇地址取操作码
    — 从一个奇地址读16位数据
    — 向一个奇地址写16位数据
  • 未实现的内存地址
    在S12X设备上,如果MCU被加密并处于扩展模式下,可以隐藏Flash存储器。访问这些未实现的内存地址会触发一个软件错误。
  • 对Flash空间的写访问
    S12X设备上的flash存储器不可以由XGATE通过写非易失性存储器的地址空间来编程。由于一般的应用程序代码根本不会想要写这些内存地址;如果企图写的话就会提交软件错误。

存储器保护方案的冲突

第二类软件错误状况是人为的存储器访问限制。这是为了最小化出错的程序代码可能造成的损害。S12X上实现了两类存储器保护。

  • 从寄存器地址空间执行的代码 -
    每个S12X产品家族的XGATE都不允许从寄存器地址空间执行代码。这有两个原因。这是一个安全特性。由于从寄存器地址空间执行代码通常不是一个好的实践,它可以用于标识跑飞的代码。这还是一个加密特性,用于阻止破解者访问被加密的MCU的系统资源。
    XGATEV2的向量提取被看做操作码提取。从寄存器空间提取一个向量会导致一个软件错误。
  • 用户定义的存储器保护 -
    S12X MCUs提供了一个简单的RAM写保护方案。RAM被分为三个区块(section):一个CPU12X区块、一个XGATE区块和一个共享区块。这些区块间的边界是可配置的(图4)。XGATE如果想写入S12X区块的话,就会触发一个软件错误。


图 2.软件错误状态的总结

软件错误中断

XGATE一探测到软件错误状况就会置位软件错误中断标志位(XGSWEIF),这会触发CPU12X的一个可屏蔽的中断(通过设置CPU12X状况码寄存器的1bit来屏蔽)。这个中断请求会一直维持到XGSWEIF标志位在中断服务例程中被清零。

Software Error State

如果XGATE由于一个软件错误而追踪代码执行,它会进入Software Error State。这个state给应用程序代码提供了一个机会来在恢复正常运行前记录和修复问题(典型地会重启应用)。XGATE会一直停留在这个state直到XGSWEIF标志位被清零。离开Software Error State总是会结束当前的线程。

如这篇文档中描述的(见第4节)XGATE软件错误的调查必须在XGATE还在Software Error State时进行。

调试目标

为了理解软件错误发生的原因,需要了解以下信息:

  • 当发生问题时哪个通道正活跃?
  • 正在执行哪条指令或者取哪个向量?
  • 错误发生时正在取指令或向量的哪个周期?
  • 触发了哪个软件错误状态?
  • 当发生错误时,RISC内核寄存器的状态?

不幸的是,XGATE没有任何方法来直接提供以上信息。但是它提供了足够的信息来追踪问题的发生。

只有有限个数的情景会导致软件错误。其中每一个都会在软件错误发生后在XGATE的寄存器内留下一个特征签名。

为了调查软件错误的原因,这些签名被分解为一个可观测状态的集合。必须一个接一个检查这些状态。如果相关的可观测状态不满足的话,就可以排除对应的软件错误情景了。如果只剩下一个可能的软件错误情景,那这个排查过程就完成了。一旦确定了软件错误情景,你就获得了想要的调试信息。

XGATE典型地能提供足够的信息来推断错误发生前的状态。但是,有少数情况会推断出两个可能的情景。这些情况下,需要根据应用程序代码的上下文进行进一步的调查。

调查软件错误

以下章节详细解释了发现一个XGATE软件错误源头的过程。

信息来源

用于调试S12X上XGATE软件错误的信息可以从图3中所示的18个寄存器中获取。


图 3.调试S12X设备的信息来源

这些寄存器是:

  • XGATE的状态和调试寄存器(XGCHID、XGVBR、CGPC、XGCCR、XGR7..XGR1)
    。它们提供了关于XGATE的RISC内核和当前指令状态的信息。
  • MCU的Part ID寄存器(PARTIDH、PARTIDL)
    这个寄存器被用于确定设备上的XGATE的实现。
  • S12XMMC的RAM保护寄存器(RAMWPC、RAMXGU、RAMSHL、RAMSHU)
    这些寄存器确定了被保护的内存的范围。
  • Mode寄存器和Flash加密寄存器(MODE、FSEC)
    要用这些寄存器来找出XGATE的内存映射图中未映射的区域。

由于其中一些寄存器可以用来获得相关的内存地址,为了调查软件错误,在调查期间一定要保证内存内容不变。

存储器保护

如2.1节中所述,有两类软件错误状态。第一类是“未支持特性的调用”(见2.1.1节),包括访问地址映射中未映射的地址。在S12X设备上,只有一个情景下XGATE的地址映射中的某段地址范围会未映射。如果MCU处于扩展模式下并被加密;Flash会因为加密而被禁用。在这种情况下,访问Flash地址会导致软件错误状态 2、5、7、9、10或15(见图2)。

另一类软件错误状况是“存储器保护方案的冲突”(见2.1.2节)。除了通常的限制外,从寄存器地址取操作码和向量也是被禁止的。S12X设备提供了一个可配置的RAM写保护方案。有三个寄存器(RAMXGU、RAMSHL和RAMSHU)用于设置两个写保护地址范围的边界。写访问这些地址会触发软件错误状态 12或17(见图2)。

图 4阐述了S12X设备上所有的存储器保护方案。


图 4.S12X设备上的XGATE内存保护

可观测状态

当调查XGATE软件错误时,有一个重要状态集可以被直接从源寄存器(见4.1节)和MCU内存的当前内容中检查。对于每一个软件错误的原因,这些可观测状态都会有一个确定为真的子集。如果这个子集中的一个状态被证明为假,那对应的原因就可以被排除了。

在S12X设备上,有31个与软件错误调查相关的可观测状态。这些状态被列在图5中。





图 5. 用于在S12X设备上调查软件错误的可观测状态

软件错误情景

会导致XGATE软件错误的情景的数量很有限。它们可以被归纳为22个情形。后面的章节描述了所有的情景并描述了怎么辨识它们。这些是XGATE的RISC内核的周期的记号(见图6)。

V — 向量提取:总是一个对齐字的读取,持续至少一个RISC内核周期
P — 程序字提取:总是一个对齐字的读取,持续至少一个RISC内核周期
r — 8位数据读取:持续至少一个RISC内核周期
R — 16位数据读取:持续至少一个RISC内核周期
w — 8位数据写入:持续至少一个RISC内核周期
W — 16位数据写入:持续至少一个RISC内核周期
A — 对齐周期:不进行写入或读取,持续零或一个RISC内核周期
f — 空闲周期:不进行写入或读取,持续至少一个RISC内核周期
特殊情况
PP/P — 分支:如果进入分支的话PP,否则P

图 6.访问细节记号

向量提取

XGATE的向量提取序列包含三次内存访问:对线程起始地址的一次提取、对数据段指针的一次提取以及对首个指令的一次预提取。在向量提取序列间有四种可能的软件错误情景。见图7。这张表中的用灰体打印的可观测状态是冗余的。



图 7.在向量提取序列间可能的软件错误

非法指令

在S12X设备上,XGATEV2实际上有两个修订版。两个在执行非法指令的方式上有轻微的区别。图8展示了这两个版本的行为。以“L15Y”作为结尾的掩码集(PARTIDH寄存器读取为0xC4)是一个修订版。剩下的所有S12X MCU的XGATE是另一个修订版。


图 8.非法指令导致的软件错误

在一个线性流中的操作码预取

单周期指令(Single Cycle Instructions)是指所有耗费一个XGATE周期来执行的指令,如逻辑或算术运算。所有这些指令都会执行一个操作码预取,如果指令位于地址0xFFFE处,操作码预取就会发生在寄存器空间。图9给出了这种情景的描述。


图 9.操作码预取导致的软件错误

有三个特殊指令需要在操作码预期后有一个对齐周期(可选周期):SIF、SSEM和CSEM。由于对齐周期不会触发软件错误,这些操作可以当做单周期指令。

由单周期指令导致的软件错误无法与由跳转或分支到地址0x0000(4.4.4节)导致的软件错误区分开来。可以基于应用程序上下文来确定错误原因。

分支和跳转指令

分支和跳转需要两个XGATE总线周期。它们执行两次取操作码以在它们设置程序计数器为新地址后填充RISC内核的指令队列。
如果分支条件为false的话,条件分支表现的就像单周期指令。在这种情况下,只会执行首个取操作码周期,第二个被跳过了。
可能在这些周期中发生的软件错误状态被列在图10中。这张表中打印为灰色的可观测状况是冗余的。

图 10.可能由跳转或分支指令引起的软件错误

1 如果分支条件为false,则略过
2 仅用于JAL指令

到奇数地址的分支是不可能的,因为分支偏移量指的是字的个数。只有JAL指令可能导致这个软件错误状态。

如果是在第二个周期探测到的软件错误,那调试起来可能很麻烦。

在执行第二个 P-周期 前,程序计数器被更新为紧跟目标地址的指令,这会给软件错误调查带来两个问题。

  • 当前指令的地址丢失了。XGATE不能提供直接确定是哪条分支或跳转指令导致了软件错误的信息。
  • 分支或跳转到地址0x0000会留下与从地址0xFFFE执行指令同样的寄存器签名。这两个情景无法被清晰地区分。

在指令执行期间对程序计数器的更改实际上使得确定软件错误状况更加简单了,因为取操作符的关键地址可以直接通过(XGPC+2)得到。然而,准确找到导致问题的指令需要进一步调查。通常需要以下过程:

  • 所有可能导致问题的分支指令都可以通过code linting来找到。所有将程序流导向地址XGPC+2的分支指令都受到怀疑。为了简化这一步,所有指向寄存器地址的分支指令都应被排除。但是,这并不总能做到,因为这些操作码有可能出现在数据结构中。
  • 假设软件错误是由一个JAL指令造成的,那么返回地址(跟在JAL指令后的地址)会存储在通用目的寄存器(XGR1..XGR7)之一中。
    可能触发软件错误的跳转指令的清单可以通过遍历通用目的寄存器得到。如果所有以下条件都满足:
    — XGR*n* & 1 恒等于 0
    — XGR*n* > 0x0800
    — [XGR*n*-2] 恒等于 0x00F6 | (256* n)1
    那么,位于地址XGR*n* - 2处的JAL R*n*指令就是嫌疑人之一。

任何进一步的调查都要检查应用程序的代码。

加载和存储指令

所有的加载和存储指令都要执行两次总线访问:一次预取操作码和一次数据访问。图一中展示了可能由这些指令触发的软件错误状态。




为了调查数据访问失败的原因,数据地址需要通过操作码和对应的通用目的寄存器来重建。这些寄存器(目的寄存器和自动递增/递减系数寄存器)在软件错误发生时不会改变。

因为目的寄存器和自动递增/递减系数寄存器在指令执行失败时不会变化;数据地址以及软件错误的原因就可以很明确地确定。

发现软件错误的原因

S12X上有16种软件错误状态和31种可观测状态。为了总览它们的关系,我们在图12中总结了上章节中的相关信息。每行是一种可观测状态,而每列是一种软件错误情景。在一种情景下为“真”的条件被标记为“X”。

一旦可以认为一个可观测状态为“假”,那标记这一行的软件错误状态就都可以排除了。探测的目标就是通过迭代所有状态(行),排除到只剩下一个情景(列)。当在状态间迭代时,只需要检查那些可以排除额外情景的状态。那些冗余的可以直接跳过。

在后面的“向量提取失败”中展示了排除后留下两种可能的软件错误情景的情况。这种情况下就需要基于程序代码进行进一步的调查。


图 12.映射可观测条件到软件错误状态

示例

下例示范了在S12X上的调查过程。

向量提取失败

在这首个例子中,如果XGATE在Software Error State,可以读到以下寄存器值。


图 13.XGATE寄存器值

这些寄存器的值反映出条件16(见图5)为假。这已经足够推论出软件错误的原因了。


图 14.探测到从寄存器地址的向量提取

通道0x38被触发,XGATE试图从寄存器地址提取首个向量。向量基寄存器(XGVBR)没有指向正确的向量表。

非法操作码

第二个例子中,如果XGATE在Software Error State,可以读到以下寄存器值(图15)。从RAM中可以读到如图16中的程序码,我们假设CPU12X的错误handler没有修改这些RAM地址。


图 15.XGATE寄存器值


图 16.XGATE代码序列

只需要检查六个可观测状态就能确定问题的原因。

在地址0x9238执行了非法指令0x0D。不需要检查PARTID寄存器你就知道设备的掩码号不是以“L15Y”结尾的。


图 17.探测非法指令的执行

操作码预提取失败

下一个软件错误稍微有点难辨别。如果XGATE在Software Error State,并且读到如图18的寄存器值以及如图19的内存内容。我们假设CPU12X在调查软件错误期间没有修改XGATE的程序代码。


图 18. XGATE寄存器值


图 19.XGATE代码序列

遍历可观测状态(见图20)可以把9个错误条件缩小到两个。两个可能为:

  • 在0xFFFE执行了一条指令然后从0x0000预提取一条操作符。
  • 执行了一个指向0x0000的Branch或者Jump指令。

31种状态(见图5)都没有办法区分出这两个可能的原因,所以需要进一步的调查。

扫过XGATE的整个64KB地址都没有发现指向0x0000的分支指令。

Jump(JAL)指令在通用目的寄存器(XGR1-XGR7)中留下了一个返回地址。看完这些寄存器我们发现:

  • XGR7和XGR6不包含有效的返回地址,因为它们指向寄存器地址。
  • XGR5和XGR4包含奇数值,也不是有效的返回地址
  • XGR3、XGR2和XGR1指向有效的程序地址,但是在每个返回地址前没有对应的JAL指令。

排除了Jump和Branch指令,我们确定问题是由于从0xFFFE执行一条指令而产生的。


图 20.探测到两个可能原因

失败的写访问

最后一个例子中,触发软件错误后寄存器值如图21。


图 21.XGATE寄存器值

XGATE的程序计数器指向以下RAM内容(见图22)。


图 22. XGATE代码序列

对照9个可观测状态(见图23),可以看出软件错误是由于一次非法的写访问造成的。程序计数器中的指令及对应通用目的寄存器表明,正想往0x4000写入。这个地址位于Flash,满足了软件错误条件11。


图 23. 探测到非法的写访问

参考文献

  1. Datasheet to MC9S12XDP512, Freescale Semiconductor Inc., 2005.

怎么调试S12X微控制器的XGATE上的软件相关推荐

  1. freescale S12X微控制器 模拟EEPROM 快速上手指南

    嵌入式开发中常有存储一些下电后不丢失的数据的需求,RAM访问起来很方便,但是下电后数据会丢失,而MC9S12XE提供了D-Flash和EEPROM用于存储非易失性数据.之前一直只是知道这个东西,但是一 ...

  2. 微控制器MCU片上资源分类总结

    1.概述 MCU,微控制单元(Micro Controller Unit),又称为单片型计算机.单片机,将中间处理器(CPU)进行频率和规格的缩减,并将内存(memory).Timer.UART.SP ...

  3. 在ARM微控制器上部署MATLAB/Simulink仿真模型

    在ARM微控制器上部署MATLAB/Simulink仿真模型 苏勇,suyong_yq@126.com,2022年12月 文章目录 在ARM微控制器上部署MATLAB/Simulink仿真模型 Int ...

  4. HCS12X微控制器的外部总线接口介绍

    翻译的资料是公开的,在这里下载https://www.nxp.com/products/microcontrollers-and-processors/additional-processors-an ...

  5. S12(X)微控制器的Bootloader程序

    需要实现远程升级单片机,正好在网上找到了官方提供的Bootloader程序及其对应的文档,赶快弄下来学习研究,这是对其文档的翻译. 翻译的资料是公开的,在这里下载https://www.nxp.com ...

  6. 富士通推出MB95200H/10H/20H系列用于家电的LPC微控制器

    富士通微电子(上海)有限公司近日宣布其F2MC-8FX家族添加三款具有20个引脚以下(包含20个)的低引脚数(LPC)系列.F2MC-8FX家族是拥有嵌入式快闪记忆体的8位高性能微控制器.2008年9 ...

  7. 什么是微控制器? 通用组件的定义特征和架构

    文章目录 写在前面 正文 什么是微控制器? 微控制器与微处理器 微控制器与数字信号处理器(DSP) 微控制器的要素 中央处理单元 存储器 外围设备 支持电路 下一篇文章 交个朋友 写在前面 原文链接 ...

  8. 手工打造基于MM32F5微控制器的MicroPython开发板

    手工打造基于MM32F5微控制器的MicroPython开发板 苏勇,2022-07-21 文章目录 手工打造基于MM32F5微控制器的MicroPython开发板 引言 MM32F5微控制器简介 制 ...

  9. 使用DAP-Link单独下载可执行文件到MM32F5微控制器

    使用DAP-Link单独下载可执行文件到MM32F5微控制器 suyong_yq,2022年5月 文章目录 使用DAP-Link单独下载可执行文件到MM32F5微控制器 引言 借用Keil工程 使用O ...

最新文章

  1. Windows10安装Mysql5.7.19.0 msi 版本报错
  2. class没有发布到tomcat_SpringBoot内置tomcat启动原理
  3. 每个Web开发人员应该知道的12个终端命令
  4. 自己动手写C语言编译器(5)
  5. 疫苗有效,先抛股票,今日官宣94.5%结果的Moderna高管早有信心
  6. python 排序 sorted 如果第一个条件 相同 则按第二个条件排序
  7. yum 安装PHP之后如何启动,如何用yum安装php_后端开发
  8. android在视频上放view,android在SurfaceView上播放视频
  9. NYOJ 229 工程 二分+dp检验
  10. 消费者广播模式和负载均衡模式
  11. 三、Linux 开机、重启和用户登录注销
  12. ORA-27300错误
  13. 超大超详细图解,让你掌握Spark memeoryStore内存管理的精髓
  14. 电商设计提升水平,需要优秀的模板素材进行临摹练习!
  15. Java学习必备单词
  16. 基于MS强度或计数的数据依赖法非标记定量蛋白质组学的蛋白质互作分析(二)
  17. 不撞南墙不回头-深度优先搜索
  18. ./config.status --recheck 而发现的error的根因与解决方案
  19. 计算机论文的字体要求,关于计算机硕士论文格式要求 论文字体格式
  20. 北京交通大学计算机仿真大作业直流调速系统仿真,北京交通大学电气工程学院计算机仿真大作业.docx...

热门文章

  1. 简单一点,利用xpath解析爬取站长素材的图片
  2. 【项目管理】如何制定进度计划?
  3. 两平面平行但不重合的条件是_____黑龙江省大庆外国语学校高中数学_第二章《2.2_直线、平面平行的判定及其性质》单元测试5_新人教A版必修3...
  4. 109:vue+openlayers 定位动画(平移-弹性平移-飞行 示例代码)
  5. HDU oj wod sticks
  6. 宏的录制以及在Visual Basic中显示代码
  7. 安卓手机投屏软件_手机投屏软件哪个好?推荐这五款投屏神器
  8. 中国艺术孙溟㠭书画《光》
  9. 【多模态】Multi-modal chemical information reconstruction from images and texts for exploring the
  10. 李潤慶 崇德齋 頗有逗撓