ADuCM360/ADuCM361自诊断功能
简介
ADuCM360/ADuCM361 是32位、 Cortex™-M3微控制器,同时集成24位Σ-Δ模数转换器(ADC),各ADC前端均有一个可以完全编程的仪表放大器。这些微控制器适合广泛的应用,包括工业控制和仪器仪表应用。在诸多目标应用中,自诊断功能在注重安全的环境中以及智能化故障恢复模式 下十分重要。
本应用笔记描述ADuCM360/ADuCM361中可以诊断ADuCM360/ADuCM361和周围电路问题的部分特性。
诊断电流源
ADuCM360/ADuCM361含有两个50 µA诊断电流源。这些电流源与可编程激励电流源不同。ADC0和ADC1拥有分开、独立的诊断电流源。
诊断电流源内部路由至当前选定用于ADC转换的模拟输入通道,通过正输入通道选择的是ADCxCON寄存器,位[9:5],通过负输入通道选择功能选择的是ADCxCON寄存器,位[4:0]。如表1所示,ADCxCON寄存器,位[11:10]使能/禁用正负ADC输入端的电流源。
位 | 位名称 | 说明 |
[11:10] | ADCDIAG | 诊断电流位。 00: 电流源关闭。 01: 在选定正输入端使能50 µA电流。例如,AIN0。 10: 在选定负输入端使能50 µA电流。例如,AIN1。 11: 在选定输入端使能50 µA电流。例如,AIN0和AIN1。 |
诊断测试 | 正常结果 | 故障结果 | 检测到的故障测量值 | |||
寄存器ADCxCON, 位[11:10],设置 | 电流源说明 | 说明 | ||||
00 | 电流源关闭 | 像正常情况下在AINx和AINy上转换,同时禁用 诊断电流 | 正常结果 | 不适用 | 不适用 | |
01 | 在AINx上使能50 μA诊断电流 | 转换AINx和AINy | ADC变化幅度为ΔV = 50 μA × R1;例如,如果R1 = 2 kΩ, 则变化幅度为~100 mV | AINx和AINy间短路;R1_A和R1_B间短路 | ADC读数≈ 0 V,无论可编程增益放大器(PGA)的设置为何 | |
01 | 在AINx上使能50 μA诊断电流 | 以单端模式转换AINx | AINx上的期望电压 | AINx开路或R1开路 | ADC读数为正满量程,即使PGA设置值最低 | |
11 | 在AINx和AINy上使能50 μA诊断电流源 | 转换AINx和AINy | ADC变化幅度为ΔV = 50 μA × (R1 − R2),即容差为10%时,变化幅度为~10 mV | R1不匹配R2 | ADC读数>期望值的10 mV | |
1 AINx为正输入通道,AINy为负输入通道。 |
例如,如果ADCxCON寄存器,位11 = 0x1且ADCxCON寄存器,位[4:0] = 0x1,则有50 µA的电流从AIN1流出。
类似地,如果ADCxCON寄存器,位10 = 0x1且ADCxCON寄存器,位[9:5] = 0x0,则有50 µA的电流从AIN0流出。
图1显示的是一个示例电路。
图1. 采用诊断电流源的示例电路
高度灵活的模拟输入多路复用器
ADuCM360/ADuCM361 ADC拥有高度灵活的模拟输入多路复用器。凭借高度灵活的模拟输入多路复用器,用户在ADC测量中无需受限于固定差分输入对。可以用任何外部 模拟输入引脚配置一个差分对。另外,ADC1允许任意外部模拟输入引脚与内部ADC通道之一配对,以进行差分ADC1测量。ADC0和ADC1都可以连接至任何外部模拟输入引脚。
高度灵活的模拟输入多路复用器可以用于检测以下系统故障:
- 模拟输入引脚电压检测。相对于已知电源电压、VDAC电压或连接至AINx引脚之一的固定外部电压的交叉检测。
- 对任一ADC的功能检测(仅限ADuCM360)。在ADC0上重复测量:选择相同的输入通道并在ADC1上重复进行。也可通过ADC0检测ADC1读数。
- 通过ADC1监控数字或模拟电源电压。此功能可用于电池供电型应用或衰减电源的检测。
图2. ADC输入多路复用器
多个ADC基准电压源
表3所示为ADC0和ADC1可用的基准电压源选项。基准电压源选项通过ADCxCON寄存器,位[13:12]选择。
位 | 位名称 | 说明 |
[13:12] | ADCREF | 基准电压源选择。 00: INTREF-AGND. 01: EXTREF。外部缓冲器模式在ADCxCFG寄存器中设定。 10: EXTREF2IN(仅对ADC1有效)。EXTREF2IN+缓冲器通过ADCxCFG 寄存器控制。 11: AVDD-AGND。 |
基准电压源选项支持对外部基准电压源进行安全检测,其方法是利用内部基准电压源,或者把模拟电源电压用作ADC基准电压源重复进行测量。
通过该安全检测功能,ADuCM360/ADuCM361系统可以检测任意ADC基准电压源中的故障。
外部基准电压源EXTREF的另一个特性是,它能检测设定寄存器状态位的基准电压下降情况。对于EXTREF,如果EXTREF在VREF+和VREF−上的源电压降至0.4 V(典型值)或 0.8 V(最大值)以下,DETSTA寄存器中的状态位(位4)将设为1。要使用该功能,把DETCON寄存器,位8设为1即可。
该功能对EXTREF2IN±基准电压源无效。
Flash内容验证
在读/写FLASH保护机制以外,ADuCM360/ADuCM361还支持一种功能,可验证用户Flash中自上次编程后尚未改变的内容;这就是签名特性。有关该特性的更多详情,请参阅UG-367用户指南。
Flash完整性签名特性
签名检测Flash器件的完整性。软件可以偶尔调用签名检测命令,或者每当要执行新的代码块时调用。签名是对多项式 x24 + x23 + x6 + x5 + x + 1进行的一种24位循环冗余检验(CRC)。签名命令会产生一个签名,并检查一个代码块的签名,这里的块可以是单页,也可以是多页。一个24位线性反馈移 位寄存器(LFSR)会产生一个签名。硬件假定,一个代码块的签名保存在代码块最高有效页最高的四个字节中。在生成签名时不包括这四个字节。
使用以下步骤生成签名:
- 把代码块的起始地址写入FEEADR0L寄存器和FEEADR0H寄存器。
- 把代码块的结束地址写入FEEADR1L寄存器和FEEADR1H寄存器。
- 把签名命令写入命令寄存器(FEECMD寄存器 = 10)。
当命令执行完毕时,签名就在签名寄存器中。将该签名与保存在代码块最高有效页的上四个字节中的数据进行比较。如果数据与签名不匹配,则状态寄存器中返回故障状态(FEESTA寄存器,位[5:4] = 10)。
在计算签名时,对Flash的所有其他存取操作都停止,持续时间为一个128 kB的代码块,即32,000次读取操作。
注意,FEEADR0L寄存器、FEEADR0H寄存器、FEEADR1L寄存器和FEEADR1H寄存器都是字节地址,但只需要标识页。硬件忽略最低的九位。
注意,用户必须首次运行用户代码中的CRC多项式,以生成CRC值,然后把该值写入代码块最高页的最高四个字节中。该操作完成时,调用签名特性的任何操作都会把这个4字节的值与签名检测功能的结果进行比较。
内核完整性
硬件在复位后自动检测内核的完整性。出现故障时,FEESTA寄存器,位6设定,用户代码无法运行。只有在使能串行线接口时,该位才可通过串行线读操作读取。
所有外部引脚上的ESD保护
ADuCM360/ADuCM361上的每个外部引脚都有一个保护电路,连接着地和供电轨,防止器件受到操作人员或机器搬运时导致的静电放电的影响。
表4展示了摘自ADuCM360/ADuCM361可靠性报告的器件瞬变鲁棒性详情。
ESD模型 | 封装 | ESD测试规格 | RC网络 | 最高有效水平 | 第一失效水平 | 类 |
FICDM | 48引脚 LFCSP | JESD22-C101 | R = 1 Ω,C = 封装电容 | ±1500 V | 不适用 | C6 |
HBM | 48引脚 LFCSP | ESDA/JEDEC JS-0012011 | R = 1.5 kΩ, C = 100 pF | ±2500 V | ±3000 V | 2 |
Cortex-M3故障管理功能
Cortex-M3处理器的故障管理系统可以检测总线、存储器和未定义指令故障。
出现这些故障时,Cortex-M3处理器会停止执行当前指令,并指向一个固定存储器地址(一个关联用户定义异常处理程序在此执行)。
在该异常处理程序功能中,用户代码可以提醒系统发生故障,并继续执行后续步骤,以便从故障中恢复或者关闭ADuCM360/ADuCM361。
表5总结了主要异常情况。
编号 | 类型 | 优先级 | 说明 |
1 | 复位 | −3(最高) | 任何复位 |
2 | NMI | -2 | 连接至ADuCM360/ADuCM361电源监控器的不可屏蔽中断 |
3 | 硬故障 | -1 | 未使能相应故障处理程序时的所有故障条件 |
4 | 存储器管理故障 | 可编程 | 存储器管理故障;访问非法位置 |
5 | 总线故障 | 可编程 | 预取故障、存储器存取故障、数据中止和其他地址/存储器相关故障 |
6 | 使用故障 | 可编程 | 同执行未定义指令或尝试非法转换状态 |
时钟和定时器
ADuCM360/ADuCM361集成两个片内振荡器和外部晶体电路,具体如下:
- LFOSC为一个32 kHz低功耗内部振荡器,用于低功耗模式。
- HFOSC为一个16 MHz内部振荡器,用于活动模式。
- LFXTAL为32 kHz外部晶体。
- 节能时钟机制,可针对某个外设使能和禁用。
时钟架构功能框图
运用软件控制,用户可以从四个不同系统时钟源中进行选择,以交叉检测其他时钟源和内部时钟电路。
注意,默认情况下,内部16 MHz振荡器为系统时钟(UCLK)源。
ADuCM360/ADuCM361还集成了一个看门狗定时器。该看门狗定时器一般在用户代码中使能,以定期刷新。如果用户固件运行时发生意外,未能在预定时间内刷新看门狗定时器,看门狗硬件将发出全系统复位指令。
图3. ADuCM360时钟架构功能框图