<sa8650>Safety Monitor 之 API介绍 (第二部分)

<sa8650>Safety Monitor 之 API介绍

  • 4.由APSS安全监视器支持的接口
    • 4.1数据结构文件
      • 4.1.1 struct sm_handle
      • 4.1.2 struct safety_msg_initial_fault
      • 4.1.3 struct safety_msg_notify_fault
    • 4.2 Enumeration documentation
      • 4.2.1 safety_fault_subsystem
      • 4.2.2 safety_health_status
      • 4.2.3 msg_id
      • 4.2.4 safety_health_timer_group
      • 4.2.5 safety_fault_severity
      • 4.2.6 safety_fault_subscriber
      • 4.2.7 safety_msg_bcs_header
    • 4.3消息格式
      • 4.3.1运行状况消息
      • 4.3.2故障消息
        • 4.3.2.1初始故障消息
        • 4.3.2.2详细故障信息
    • 4.4 Function documentation
      • 4.4.1 sm_register_client ()
      • 4.4.2 sm_notify_fault()
      • 4.4.3 sm_report_health()
      • 4.4.4 sm_subscribe_faults()
      • 4.4.5 sm_add_fault_subscription_filter()
      • 4.4.6 sm_add_fault_sev_bitmask()
      • 4.4.7 sm_unregister_client()
      • 4.4.8 sm_unsubscribe_faults()
      • 4.4.9 sm_print_fault_msg()
      • 4.4.10 sm_get_soc_health_status()
      • 4.4.11 sm_send_err_fatal()
      • 4.4.12 sm_get_subsystem_health_status()
      • 4.4.13 sm_set_debug_mode()
    • 4.5 Header files
      • 4.5.1 FUSA头文件
      • 4.5.2安全监视器客户端库头文件
      • 4.5.3子系统头文件
      • 4.5.4向safety_fault_msg_type联合子系统添加故障信息结构
  • 5由SAIL安全监视器支持的接口
    • 5.1数据结构文件
    • 5.2 Enumeration documentation
      • 5.2.1 msg_id
      • 5.2.2 safety_health_timer_group
      • 5.2.3 safety_fault_severity
      • 5.2.4 safety_fault_subscriber
      • 5.2.5 safety_msg_bcs_header
    • 5.3 Message format
    • 5.4 Function documentation
      • 5.4.1 ssm_client_register ()
      • 5.4.2 ssm_notify_fault()
      • 5.4.3 ssm_health_report()
      • 5.4.4 ssm_client_dereg()
      • 5.4.5 ssm_subscribe_faults()
      • 5.4.6 ssm_unsubscribe_faults()
  • 6用户指南
    • 6.1安全监视器的命令行选项
      • 6.1.1在安全监视器中启用调试模式
      • 6.1.2在安全监控器中启用生产模式
      • 6.1.3如何将子系统标记为关键子系统
      • 6.1.4 如何添加新的子系统
      • 6.1.5如何添加新的故障订阅户
    • 6.2 测试应用程序的命令行选项
    • 6.3客户端应用程序开发
    • 6.4测试应用程序使用示例
      • 6.4.1 发送故障信息
      • 6.4.2正在发送运行状况消息
      • 6.4.3订阅错误(使用s选项)
      • 6.4.4通过测试-app命令行设置调试模式
    • 6.5 AURIX串行控制台打印
      • 6.5.1消息摘要
      • 6.5.2运行状况消息摘要
      • 6.5.3故障消息摘要
    • 6.6 Source structure
    • 6.7 AURIX source structure
  • A References
    • A.1首字母缩略词和术语

4.由APSS安全监视器支持的接口

4.1数据结构文件

4.1.1 struct sm_handle

安全手柄由安全客户端分配,并提供给安全监控客户端库。
struct sm_handle
{
int fd;
volatile unsigned registered;
safety_fault_subsystem subsys;
safety_fault_subscriber subs_id;
int chid;
sm_fault_rx_cb f_cb;
osal_thread_handle_t subs_thread;
safety_health_timer_group h_grp;
osal_queue_t queue;
uint8_t fault_subs_seq_no;
};
<sa8650>Safety Monitor 之 API介绍 (第二部分)_第1张图片

4.1.2 struct safety_msg_initial_fault

typedef struct
{
safety_msg_bcs_header hdr;
safety_msg_common_hdr_type safety_common_hdr;
safety_msg_fault_common_hdr_type fault_common_hdr;
} safety_msg_initial_fault;

safety_msg_initial_fault的成员包含了系统中所有故障的通用信息。有关这些头结构的详细信息,请参阅第4.5.1节中提到的头文件。

4.1.3 struct safety_msg_notify_fault

typedef struct
{
safety_msg_common_hdr_type safety_common_hdr;
safety_msg_fault_common_hdr_type fault_common_hdr;
safety_msg_fault_specific_hdr_type fault_specific_hdr;
safety_fault_msg_type safety_msg_fault_item;
} safety_msg_notify_fault;
safety_msg_notify_fault的前3个成员(safety_common_hdr、fault_common_hdr和fault_specific_hdr)包含了系统中所有故障的常见信息。有关这些头结构的详细信息,请参阅第4.5.1节中提到的头文件。

最后一个元素safety_fault_msg_type是系统中定义的故障的联合。

子系统fauft_info结构的声明由子系统所有者在其子系统头文件中提供。

有关将子系统故障信息结构添加到safety_fault_msg_type联合系统中的详细步骤,请参见第4.5.4节。

例如,在notint_fault中使用的safety_msg_xNOC_fault xnoc_fault示例可以在头文件中找到(参见第4.5.1节)。

4.2 Enumeration documentation

下面的部分描述了接口中的一些枚举的示例值。

4.2.1 safety_fault_subsystem

typedef enum
{
CAM,
NOC,
APSS,
VSENSE,
SMMU,
PCIE,
OCIMEM,
DDR,
APSS_XPU,
EMAC0,
EMAC1,
NSP,
TSENSE,
TCSR,
SA9000,
TZ,
SMSS,
UFS,
EVA,
GIC,
NSP_RM,
AVP5_FWP,
APSS_EDAC,
APSS_STL,
DUMMY1,
DUMMY2,
DUMMY3,
/* NOTE: Any new subsystems should be added after DUMMY3 /
PFM,
TSC0,
GFX_GPU,
SAIL_EMAC,
SAIL_CAN,
SAIL_TSC0,
SAIL_TESTCLIENT1,
SAIL_TESTCLIENT2,
/
Customer subsystems start here */
CUSTOM0,
CUSTOM1,
CUSTOM2,
CUSTOM3,
CUSTOM4,
CLIENT_SUBSYS_MAX
} safety_fault_subsystem;;

4.2.2 safety_health_status

typedef enum
{
NOT_REPORTED,
HEALTHY,
NOT_HEALTHY,
NOT_REGISTERED,
} safety_health_status;

4.2.3 msg_id

typedef enum
{
FAULT_MSG = 0x1,
HEALTH_MSG,
INITIAL_FAULT_MSG,
PASSTHROUGH_MSG,
/Used between APSS and SMSS/
SMSS_CONFIG_MSG,
BIST_RESULT_MSG,
/* For use on APSS */
REGISTER_APP_MSG,
UNREGISTER_APP_MSG,
FAULT_SUBSCRIBE,
FAULT_UNSUBSCRIBE
} msg_id ;

4.2.4 safety_health_timer_group

typedef enum
{
SM_HEALTH_TIMER_25MS,
SM_HEALTH_TIMER_50MS,
SM_HEALTH_TIMER_100MS,
SM_HEALTH_TIMER_200MS,
SM_HEALTH_TIMER_500MS,
SM_HEALTH_TIMER_1000MS,
SM_HEALTH_NO_TIMER,
SM_HEALTH_TIMER_MAX,
} safety_health_timer_group;

4.2.5 safety_fault_severity

typedef enum
{
SAFETY_WARNING,
/*

  • SAFETY_ERROR is not be used by subsystems and is
  • to be used between SAIL and VIP/MCU only

*/
SAFETY_ERROR,
SAFETY_RECOVERABLE_ERROR,
SAFETY_SOC_FATAL_ERROR,
SAFETY_SUBSYSTEM_FATAL_ERROR,
SAFETY_SUBSYSTEM_DEGRADED,
SAFETY_SUBSYSTEM_NONFATAL,
SAFETY_FAULT_SEV_MAX
} safety_fault_severity;
注意:在当前的设计中不支持SAFETY_RECOVERABLE_ERROR。

4.2.6 safety_fault_subscriber

typedef enum
{
FAULT_SUBS_0,
FAULT_SUBS_1,
FAULT_SUBS_2,
FAULT_SUBS_3,
FAULT_SUBS_4,
FAULT_SUBS_RSM,
FAULT_SUBS_QAIC,
FAULT_SUBS_TSENSE,
/* Customer subscriber applications start here */
FAULT_SUBS_CUSTOM0,
FAULT_SUBS_MAX
} safety_fault_subscriber;

4.2.7 safety_msg_bcs_header

此结构用于存储消息的报头信息。
typedef struct
{
uint8 crc;
uint8 cmd;
uint8 version;
uint8 len;
uint8 seq;
} attribute((packed)) safety_msg_bcs_header;
<sa8650>Safety Monitor 之 API介绍 (第二部分)_第2张图片

4.3消息格式

运行状况消息和故障消息的消息格式如下所述。

4.3.1运行状况消息

<sa8650>Safety Monitor 之 API介绍 (第二部分)_第3张图片
图4-1运行状况消息布局

声明:
typedef struct
{
safety_msg_bcs_header hdr;
uint8 id;
safety_msg_common_hdr_type safety_common_hdr;
uint8 aggregated_health[SAFETY_HEALTH_SIZE_BYTES];
} attribute((packed)) safety_msg_soc_aggregated_health_status;

运行状况消息由safety_msg_bcs_header和aggregated_health状态组成。aggregated_health提供了所有应用程序的运行状况状态。任何应用程序的运行状况状态都被定义为第4.2.2节中描述的枚举safety_soc_health_status。
<sa8650>Safety Monitor 之 API介绍 (第二部分)_第4张图片

4.3.2故障消息

4.3.2.1初始故障消息

<sa8650>Safety Monitor 之 API介绍 (第二部分)_第5张图片
图4-2初始故障消息信息布局

初始故障信息的描述见第4.1.1节。

4.3.2.2详细故障信息

<sa8650>Safety Monitor 之 API介绍 (第二部分)_第6张图片
图4-3详细的故障信息布局

详细的故障信息详见第4.1.3节。

4.4 Function documentation

4.4.1 sm_register_client ()

函数原型:
int sm_register_client(safety_fault_subsystem subsys,
safety_health_timer_group h_grp,
apss_client_bist_publish *r_bist,
struct sm_handle *sm_h)

参数:
<sa8650>Safety Monitor 之 API介绍 (第二部分)_第7张图片
返回值:
成功后,返回EOK,否则,返回错误代码(EINVAL,EIO)

依赖项:
客户端ID应存在于safety_fail_system枚举中,以便能够成功调用sm_register_Client API。

4.4.2 sm_notify_fault()

向安全监测器报告故障。

函数原型:
int sm_notify_fault(struct sm_handle *sm_handle,
safety_msg_notify_fault *fmsg,
uint32_t fault_len)

参数:
<sa8650>Safety Monitor 之 API介绍 (第二部分)_第8张图片
返回值:
成功后,返回EOK,否则,返回错误代码(EINVAL,EIO)

依赖项:
客户端应用程序应已向安全监视器注册。

4.4.3 sm_report_health()

向安全监视器报告健康状态。

函数原型:
int sm_report_health(struct sm_handle *sm_handle,
safety_health_status hstatus,
boolean faultclr_flag)
参数:
<sa8650>Safety Monitor 之 API介绍 (第二部分)_第9张图片
返回值:
成功后,返回EOK,否则,返回错误代码(EINVAL,EIO)

依赖项:
客户端应用程序应已向安全监视器注册

注意:
已使用计时器组(Safety_health_timer_group) 因此,FDTI内的客户应报告最新的健康状况。
而对于在(safety_health_timer_group)>FDTI注册的客户端,则会授予额外的宽限期(12.5毫秒)。因此,客户端应在safety_health_timer_group+宽限期(12.5ms)内报告运行状况更新。
当客户端未能在指定的限制内发送运行状况更新时,将在下一个周期中引发严重级别为(SAFETY_SOC_FATAL_ERROR/SAFETY_SUBSYSTEM_FATAL_ERR)的故障,具体取决于客户端的关键性。

FDTI为75 ms,是针对当前的系统设计,是一个可配置的实体。
下表列出了所有safety_health_timer_group成员的宽限期:
<sa8650>Safety Monitor 之 API介绍 (第二部分)_第10张图片

4.4.4 sm_subscribe_faults()

从安全监控器中订阅故障。

函数原型:
int sm_subscribe_faults(struct sm_handle *sm_h,
sm_fault_rx_cb f_cb,
safety_fault_subscriber subs_id,
sm_subs_msg_filter *sm_filter)

参数:
<sa8650>Safety Monitor 之 API介绍 (第二部分)_第11张图片
返回值:
成功后,返回EOK,否则,返回错误代码(EINVAL,EIO)

依赖项:
None

示例用法:
fault_sev_bitmask fault_sev = 0;
sm_subs_msg_filter sm_filter = {0};

fault_sev = sm_add_fault_sev_bitmask(SAFETY_SOC_FATAL_ERROR) |
sm_add_fault_sev_bitmask(SAFETY_SUBSYSTEM_FATAL_ERROR);

ret = sm_add_fault_subscription_filter(&sm_filter, APSS, fault_sev);
ret = sm_add_fault_subscription_filter(&sm_filter, SA9000, fault_sev);

sm_subscribe_faults(&sub_fault_handle, fault_cb, FAULT_SUBS_0, &sm_filter);

4.4.5 sm_add_fault_subscription_filter()

为子系统添加故障订阅筛选器。使用故障订阅,应用程序可以订阅来自特定子系统和特定严重程度的故障。

函数原型:
int sm_add_fault_subscription_filter(sm_subs_msg_filter *sm_filter,
safety_fault_subsystem subsys,
fault_sev_bitmask fault_sev_bitmask)

参数:
<sa8650>Safety Monitor 之 API介绍 (第二部分)_第12张图片
返回值:
成功后,返回EOK,否则,返回错误代码(EINVAL,EIO)

依赖项:
None

4.4.6 sm_add_fault_sev_bitmask()

函数原型:
fault_sev_bitmask sm_add_fault_sev_bitmask(safety_fault_severity sev)

参数:
在这里插入图片描述
返回值:
fault_sev_bitmask为输入参数safety_fallt_severity sev启用掩码的位掩码。

4.4.7 sm_unregister_client()

从安全监控器中注销应用程序的故障/运行状况报告。

函数原型:
int sm_unregister_client(struct sm_handle *sm_handle)

参数:
在这里插入图片描述

返回值:
成功后,返回EOK,否则,返回错误代码(EINVAL,EIO)

依赖项:
客户端应用程序应已向安全监视器注册。

4.4.8 sm_unsubscribe_faults()

取消对安全监控器的故障的订阅。

函数原型:
int sm_unsubscribe_faults(struct sm_handle *sm_handle)

参数:
在这里插入图片描述
返回值:
成功后,返回EOK,否则,返回错误代码(EINVAL,EIO)

依赖项:
客户端应用程序应已订阅故障。

注意:此API不应从故障回调中调用。请参考testapp实现作为示例。

4.4.9 sm_print_fault_msg()

打印故障消息的内容。

函数原型:
int sm_print_fault_msg(safety_msg_publish_fault *fmsg);

参数:
在这里插入图片描述

返回值:
成功后,返回EOK,否则,返回错误代码(EINVAL,EIO)

4.4.10 sm_get_soc_health_status()

从安全监控器中获取所有子系统/客户端的运行状况状态

函数原型:
int sm_get_soc_health_status(struct sm_handle *sm_h,
safety_aggregated_health *agg_health);

参数:
<sa8650>Safety Monitor 之 API介绍 (第二部分)_第13张图片
返回值:
成功后,返回EOK,否则,返回错误代码(EINVAL,EIO)

依赖项:
客户端应用程序应该已经注册或订阅了故障。

4.4.11 sm_send_err_fatal()

本API仅适用于非安全监视器客户端,不应由安全监视器客户端使用。此API用于软件进程向安全监视器发送故障消息,以指示safety_SOC_FATAL消息,从而可以通过致命处理路径立即关闭SOC。

函数原型:
int sm_send_err_fatal(void);

参数:
没有输入参数

返回值:
成功后,返回EOK,否则,返回错误代码(EINVAL,EIO)

依赖项:
None

4.4.12 sm_get_subsystem_health_status()

从安全监视器中获取客户端的运行状况状态。

函数原型:
int sm_get_subsystem_health_status(struct sm_handle *sm_h,
safety_fault_subsystem subsys,
safety_health_status *hstatus)

参数:
在这里插入图片描述
返回值:
成功后,返回EOK,否则,返回错误代码(EINVAL,EIO)

依赖项:
客户端应用程序应已注册以进行健康报告。

4.4.13 sm_set_debug_mode()

将APSS或/和SAIL上的安全监视器置于调试模式。

函数原型:
int sm_set_debug_mode(safety_debug_type debug_state)

参数:
在这里插入图片描述

返回值:
成功后,返回EOK,否则,返回错误代码(EINVAL,EIO)

注意:
在APSS上启用调试模式时,安全状态和非安全看门狗咬的触发被禁用。
在SAIL上启用调试模式时,禁用sm_err引脚和看门狗的触发。
调试模式是互斥的,即一次只能调用一个调试模式。详见第6.4节。

4.5 Header files

4.5.1 FUSA头文件

▪位置-<构建根目录> /qnx_ap/AMSS/safety_shared/inc/fusa_msg_interface.h
▪描述-包含在第4.1节和第4.2节中所述的故障和运行状况消息的结构和枚举声明。

4.5.2安全监视器客户端库头文件

▪位置-<安全监控源根>/sm_client/public/amss/sm_client.h
▪描述-包含由客户端/子系统用于与安全监视器接口的函数原型、结构和枚举声明。

4.5.3子系统头文件

以下子系统头文件是安全共享公用文件夹的一部分:
位置-<构建根目录>/qnx_ap/AMSS/safety_shared/inc/
fusa_bist_types.h
fusa_fault_msg_apss_edac.h
fusa_fault_msg_ddrss.h
fusa_fault_msg_eva.h
fusa_fault_msg_gpu.h
fusa_fault_msg_noc.h
fusa_fault_msg_nsp_rm.h
fusa_fault_msg_smmu.h
fusa_msg_apss_def.h
fusa_msg_avp5.h
fusa_msg_camera.h
fusa_msg_camera_mcu.h
fusa_msg_camera_SA8650.h
fusa_msg_interface.h
fusa_msg_pfm.h
sa9000_safety_msgs_fusa.h

4.5.4向safety_fault_msg_type联合子系统添加故障信息结构

1.子系统创建一个新的头文件,其中包含fault_info结构的声明。
2.新的头文件应该复制到公共位置-<构建根目录>/qnx_ap/AMSS/safety_shared/inc/
3.报头文件还声明了故障源代码和故障代码的枚举。
4.此头文件包含在安全监控器fusa_msg_interface.h头文件中,子系统故障_info结构变量将被添加到safety_fault_msg_type联合中。

5由SAIL安全监视器支持的接口

5.1数据结构文件

请参见第4.1.2节和第4.1.3节。

5.2 Enumeration documentation

以下部分介绍接口中某些枚举的示例值。
关于APSS和SAIL安全监测器之间常见的列举,请参阅第5.2节。

5.2.1 msg_id

参见第4.2节。
typedef enum
{
FAULT_MSG = 0x1,
HEALTH_MSG,
INITIAL_FAULT_MSG,
PASSTHROUGH_MSG,
BIST_TYPE_MSG,
/Used between APSS and SMSS/
SAIL_CONFIG_MSG,
BIST_RESULT_MSG,
/* For use on APSS */
REGISTER_APP_MSG,
UNREGISTER_APP_MSG,
FAULT_SUBSCRIBE,
FAULT_UNSUBSCRIBE
} msg_id ;

5.2.2 safety_health_timer_group

typedef enum
{
SM_HEALTH_TIMER_25MS,
SM_HEALTH_TIMER_MAX,
} safety_health_timer_group;

5.2.3 safety_fault_severity

typedef enum
{
SAFETY_WARNING,
/*

  • SAFETY_ERROR is not be used by subsystems and is
  • to be used between SAIL and VIP/MCU only

*/
SAFETY_ERROR,
SAFETY_RECOVERABLE_ERROR,
SAFETY_SOC_FATAL_ERROR,
SAFETY_SUBSYSTEM_FATAL_ERROR,
SAFETY_SUBSYSTEM_DEGRADED,
SAFETY_SUBSYSTEM_NONFATAL,
SAFETY_FAULT_SEV_MAX
} safety_fault_severity;

注意:在当前的设计中不支持SAFETY_RECOVERABLE_ERROR。

5.2.4 safety_fault_subscriber

typedef enum
{
SAILFAULT_SUBS_0,
SAILFAULT_SUBS_1,
SAILFAULT_SUBS_2,
SAILFAULT_SUBS_3,
SAILFAULT_SUBS_4,
/* Customer subscriber applications start here */
SAILFAULT_SUBS_CUSTOM0,
SAILFAULT_SUBS_MAX
} sail_safety_fault_subscriber;

5.2.5 safety_msg_bcs_header

此结构用于存储消息的报头信息。
typedef struct
{
uint8 crc;
uint8 cmd;
uint8 version;
uint8 len;
uint8 seq;
} attribute((packed)) safety_msg_bcs_header;
<sa8650>Safety Monitor 之 API介绍 (第二部分)_第14张图片

5.3 Message format

请参见第4.3节。

5.4 Function documentation

5.4.1 ssm_client_register ()

向SAIL安全监控器登记。

函数原型:
int ssm_client_reg(safety_fault_subsystem subsys, safety_health_timer_group h_grp)

参数:
在这里插入图片描述
返回值:
成功后,返回1,否则,返回错误代码

依赖项:
客户端ID应存在于safety_falt_system枚举中,以便可以成功调用ssm_Client_register API。

5.4.2 ssm_notify_fault()

向SAIL安全监视器报告故障。
函数原型:
int ssm_notify_fault(safety_fault_subsystem subsys ,
safety_msg_notify_fault *fmsg,
uint32_t fault_len)

参数:
<sa8650>Safety Monitor 之 API介绍 (第二部分)_第15张图片
返回值:
成功后,返回1,否则,返回错误代码

依赖项:
客户端应用程序应已向安全监视器注册。

5.4.3 ssm_health_report()

向安全监视器报告健康状态。
函数原型:
int ssm_health_report(safety_fault_subsystem subsys,
safety_health_status hstatus,
boolean faultclr_flag)

参数:
<sa8650>Safety Monitor 之 API介绍 (第二部分)_第16张图片

返回值:
成功后,返回1,否则,返回错误代码

依赖项:
客户端应用程序应已向安全监视器注册。

注意:
客户端已使用计时器组(Safety_health_timer_group)注册到安全监视器。
当客户端未能在指定的限制内发送运行状况更新时,客户端的运行状况状态将更改为UNHEALTHY。
下表列出了所有safety_health_timer_group成员的宽限期:

在这里插入图片描述

5.4.4 ssm_client_dereg()

从SAIL安全监视器中注销应用程序的故障/运行状况报告。

函数原型:
int ssm_client_dereg(safety_fault_subsystem subsys);

参数:
在这里插入图片描述
返回值:
成功后,返回1,否则,返回错误代码

依赖项:
客户端应用程序应该已经注册了故障和健康监控。

5.4.5 ssm_subscribe_faults()

从安全监控器中订阅故障。

函数原型:
int ssm_subscribe_faults(subscriberCallbackFnptr pCB,
sail_safety_fault_subscriber subs_id,
sm_subs_msg_filter *sm_filter)

参数:
<sa8650>Safety Monitor 之 API介绍 (第二部分)_第17张图片
返回值:
成功后,返回1,否则,返回错误代码

依赖项:
None

5.4.6 ssm_unsubscribe_faults()

取消对安全监控器的故障的订阅。

函数原型:
int ssm_unsubscribe_faults(sail_safety_fault_subscriber subs_id)

参数:
在这里插入图片描述
返回值:
成功后,返回1,否则,返回错误代码

依赖项:
客户端应用程序应该已经订阅了错误。

6用户指南

6.1安全监视器的命令行选项

6.1.1在安全监视器中启用调试模式

在启动时启动安全监视器时,可以通过添加-<0、1、2、3>参数来启用调试模式。
$ safetymonitor safetymonitor -a 1 &
此参数使SAIL和APSS安全监视器处于调试模式。支持的调试模式:
0–Debug mode is OFF
1-调试模式都开启
2-调试模式仅适用于APSS
3-调试模式仅为SAIL打开

6.1.2在安全监控器中启用生产模式

生产模式允许检查所有关键客户端的注册情况。如果任何关键客户端未能在指定的时间段内注册,则会显示严重性为Soc_catal的故障类型。它由adding-d参数启用,同时在启动时启动安全监视器。
$ safetymonitor safetymonitor -d &
以下是关键的客户端子系统:
APSS
TSENSE

6.1.3如何将子系统标记为关键子系统

在sm_cfg.h文件的数组critical_subs_list[]中添加枚举数据类型safety_fallt_system中的子系统ID。例如,将CUSTOM0添加到关键子系统列表中:
critical_subs_list[] ={…, CUSTOM0,… };

注:目前列表critical_subs_list[]包含两个子系统:APSS和Tsense。

6.1.4 如何添加新的子系统

在数据类型safety_fail_system中添加新的枚举成员。例如,要在枚举列表中添加新的子系统CUSTOM5:
typedef enum
{

DUMMY3,
/* Customer subsystems start here */
CUSTOM0,

CUSTOM5,
CLIENT_SUBSYS_MAX
} safety_fault_subsystem;

6.1.5如何添加新的故障订阅户

在数据类型safety_fail_subscriber中添加新的枚举成员。
要在枚举列表中添加新的子系统FAULT_SUBS_CUSTOM1,请执行以下操作:
typedef enum
{

FAULT_SUBS_4,
/* Customer subscriber applications start here */
FAULT_SUBS_CUSTOM0,
FAULT_SUBS_CUSTOM1,
FAULT_SUBS_MAX
} safety_fault_subscriber;

6.2 测试应用程序的命令行选项

testapp options
<sa8650>Safety Monitor 之 API介绍 (第二部分)_第18张图片

6.3客户端应用程序开发

客户端应用程序可以基于随发行版提供的testapp进行开发。
testapp代码位于第6.6.节中列出的位置。
在common.mk文件中,添加以下内容以链接到sm_client库:
LIBS+= ^sm_client
客户端代码必须包含标头文件:
#include “sm_client.h”

6.4测试应用程序使用示例

6.4.1 发送故障信息

命令:$testapp -r -i 24 -f
Testapp向安全监视器注册(-r选项)客户端应用程序id 24(-i选项),并向AURIX发送故障消息(-f选项)。testapp生成与客户端应用程序id 24相对应的硬编码故障消息。
<sa8650>Safety Monitor 之 API介绍 (第二部分)_第19张图片
在这里插入图片描述

6.4.2正在发送运行状况消息

命令:$ testapp -r -i 24 -h 1
Testapp向安全监视器注册(-r选项)客户端应用程序id 24(-i选项),并向AURIX发送健康状态(-h选项)。在本例中,它将健康状态更新消息发送为健康。
在这里插入图片描述

6.4.3订阅错误(使用s选项)

这个测试可以通过运行两个测试应用程序客户端应用程序来执行。
▪应用程序ID为24的客户端,订阅并等待故障60秒
$on -u 0:1002 testapp -r -i 24 10 -s 1 -b 60

▪从应用程序ID为: 25的客户端发送故障。
$testapp -r -i 25 -f
<sa8650>Safety Monitor 之 API介绍 (第二部分)_第20张图片

在发送故障之后,具有应用ID 24的testapp的第一实例接收具有故障有效载荷的故障指示。

上例中打印的故障内容:
buf_len = 0x16
Msg_id = FAULT_MSGapp_id = DUMMY1
fault_severity = SAFETY_ERROR

6.4.4通过测试-app命令行设置调试模式

APSS和SAIL可以使用测试应用程序命令进入调试模式。

命令:testapp -e <调试模式>,其中调试模式可以是以下模式之一:
0–Debug mode is OFF
1-调试模式都开启
2-调试模式仅适用于APSS
3-调试模式仅为SAIL打开
注意:调试模式是相互排斥的,即:一次只能调用一个调试模式。
例如,如果将调试模式设置为1,则APSS和SAIL都将处于调试模式。但是现在,如果调试模式被设置为2,这将导致只有APSS保持在调试模式下,而在SAIL上的调试模式将被禁用。
同样,如果调试模式设置为3,这将导致APSS的调试模式被禁用,SAIL的调试模式将被启用。
此外,在当前的生产构建中验证调试模式2和3具有挑战性,因为APSS和SAIL相互依赖,并且有自己的安全状态机制。因此,建议今后只验证调试模式1(同时用于APSS和SAIL)选项。

6.5 AURIX串行控制台打印

6.5.1消息摘要

两个soc每1秒就会在AURIX串行控制台上连续打印一次摘要。
在串行控制台上打印的摘要如下所示:
<sa8650>Safety Monitor 之 API介绍 (第二部分)_第21张图片
AURIX上的安全应用程序连续打印了SOC1和SOC2的以下摘要:
▪串行控制台打印“Info:SOC1[T:] / info:SOC2[T:]”,描述摘要是来自SOC1还是SOC2,时间以秒为单位。
▪在最近1秒内收到的运行状况消息总数。
▪客户端在1秒的时间间隔内变得不健康的次数将出现在“不健康的状态”中。
▪在1秒的时间间隔内,每个客户端ID的最新健康状态将出现在“健康状况”中。
▪在过去1秒内收到的总故障消息和任何客户端特定的警告/错误数将出现在“总故障”中。
▪故障序列扩展了总故障总数的定义。它表示来自特定子系统的故障发生的顺序,也表示故障的严重程度。

6.5.2运行状况消息摘要

在串行控制台上打印的运行状况消息摘要如下所示:
<sa8650>Safety Monitor 之 API介绍 (第二部分)_第22张图片
在MCU上收到的总结包括:
▪“总健康状况”表示在过去1秒内收到的健康状况总数。
▪不健康:这将显示客户是不健康的。这只打印给那些不健康的客户端(UH)。
▪此快照显示“不健康”下的“[12:40]”,其中“12”是客户端ID,“40”是客户端报告为不健康的次数。
▪“健康状况”将显示健康状况为不健康(UH)、未注册(NREG)或未报告(NREP)的客户端的健康状态。
▪健康的(H)客户将不会出现在“健康状况”的打印版中。
▪要向APSS安全监视器注册客户端,并将健康状态发送为健康和不健康,请参见第6.1.3节。

6.5.3故障消息摘要

在串行控制台上打印的故障消息摘要如下所示:
<sa8650>Safety Monitor 之 API介绍 (第二部分)_第23张图片

在MCU上收到的总结包括:
▪“故障总数”显示了在最近1秒内接收到的故障总数。
▪“客户端”显示故障严重程度的客户端编号和1秒内接收故障的次数
▪此快照显示“0[2:20]”,其中“0”是客户端,“2”是故障的严重程度,“20”是在1秒内接收到的故障次数。
▪故障序列扩展了总故障总数的定义。它表示来自特定子系统的故障发生的顺序,也表示故障的严重程度。在“[0,2]”快照中,这里“0”是客户端ID,“2”是故障严重程度。

6.6 Source structure

▪/qnx_ap/AMSS/safety/safetymonitor/safetymonitor/src/-安全监控源
▪/qnx_ap/AMSS/safety/safetymonitor/public/AMSS/–安全监视器FUSA头文件。
▪/safetymonitor/sm_client–安全监视器客户端库
▪/safetymonitor/testapp–样本测试应用程序

6.7 AURIX source structure

列出的文件可以在META构建中的qnx_ap\AMS\vip\aurix\src\AppSw\Tricore中找到。

<sa8650>Safety Monitor 之 API介绍 (第二部分)_第24张图片
<sa8650>Safety Monitor 之 API介绍 (第二部分)_第25张图片

A References

A.1首字母缩略词和术语

<sa8650>Safety Monitor 之 API介绍 (第二部分)_第26张图片

你可能感兴趣的:(车载系统)