【回眸】Aurix TC397 IST 以太网 UDP 相关开发
前言
关于移植IST功能至 Infineon TC397上主要涉及到UDP发送报文及接收。IST是安全诊断相关的工作
Nvidia IST介绍
Orin系列芯片会提供一种机制来检测由系统内测(IST)所产生的永久的故障,IST 应该在 Orin-x 功能安全系统中使用期间被启动。IST 需要以特定的规则来配置零部件的软硬件。IST 可以配置来执行一个在单 Orin-x 或者 Orin-x 外加一个 dGPU 的模式组成智驾系统。整个错误(Failsafe)处理机制如下:
①当系统无错误时,标准的电源时序会通过特定的 I/O 端或总线(CAN/Flexray/Ethernet PHYs) 唤醒整个系统。这也包含启动所有 SC7 断电域,然后是支持从内存恢复的操作系统 DRIVE OS,以结束正在运行的活动状态。其中,启动的快慢取决于内存的自恢复能力。
②当 SC7 模块失效或 Timeout 时会产生相应的失效时序,芯片内部错误、温度异常导致的宕机、低压/过压等都是这些失效模式之一。整体来说,如果芯片处于失效状态时,实际是首先唤醒 MCU 后,通过内部检测机制确认是否进入 SC7 。已经 timeout 或故障时,需要控制 VRS-10 关闭所有的 SC7 电源轨,只留下唤醒 PHY 线处于低电压供电状态。MCU 最终会将PMIC 模块至于待机状态后将MCU 关闭。
此外,系统内测程序 ITS 还需要检测 Orin 是否长期维持在低功耗状态 SC7下,如果是,则系统将会退出该低功耗SC7模式。并且在下一个系统自检过程中判断是否有重新进入低功耗SC7模式的需求。
对于IST系统内侧应用而言,NVIDIA Orin 专门配置了相应的IST管理器来实现如下一些功能子项:
①提供一个用于设置IST配置的接口。将用户应用程序设置的配置与NVIDIA DRIVE Orin通信™ 以太网上的软件(IST客户端)(用于钥匙打开/关闭Orin IST)。
②提供一个用于读取IST结果的接口。提供接口,平台电源管理器可以使用这些接口查询是否必须执行Keyon/KeyOff IST,并查询IST是否已完成。
③在引导过程中,决定NVIDIA Orin应处于IST模式还是正常模式。
④通过GPIO断言触发IST,监控NVIDIA Orin上IST的执行,并通过超时检测IST卡住的场景。
⑤提供一个中止IST执行的接口。
⑥检测并处理以下硬件错误情况。
在某些情况下,IST的执行会受阻,且该阻塞会由基于GPT的硬件计时器检测到,该计时器具有可配置的超时。与 DRIVE Orin的通信™ SoC由具有可配置超时的软件计时器进行监控。这取决于MCU和Orin之间的活动以太网(VLAN200)连接。客户应用程序应使用NvMCU_ISTManager提供的接口,在每个电源循环期间设置有效的IST配置。这是使用串行控制台Shell命令完成的。
IST开发(自下而上)
从底层开始介绍开发思路。
函数1:shellIST_set_ist_config
函数原型:boolean shellIST_set_ist_config(pchar args, void *data,IfxStdIf_DPipe *io)
先需要一个config IST的值,经过阅读手册,可以看到应该设置为0x0或者0x1
注意这里需要接收输入值,所以是有输入参数的,同时也要进行参数检测,检测传入的参数是否符合要求。
另外,在设置成功后还需要告诉用户 IST设置的值是多少。
函数2:shellIST_get_ist_config
函数原型:boolean shellIST_get_ist_config(pchar args, void *data,IfxStdIf_DPipe *io)
它支持两种操作模式:
- 显示帮助信息:当用户输入
?
时,提供命令语法和使用说明。 - 返回当前配置值:直接获取并输出 IST 的配置状态。
详细逻辑分析
-
参数解析与帮助处理
- 输入参数:
args
: 指向命令参数的指针(如用户输入的额外选项)。data
: 未使用的上下文数据指针(保留参数)。io
: 输入输出管道,用于发送响应或日志。
- 关键步骤:
- 通过
Ifx_Shell_matchToken(&args, "?")
检查用户是否输入了?
参数。 - 如果匹配成功:
- 向
io
输出命令语法提示:Syntax : get_ist_configure(no parameter)
。 - 补充说明命令用途:
get IST setting value
。 - 返回
TRUE
,终止后续逻辑。
- 向
- 通过
- 输入参数:
-
获取并返回配置值
- 无
?
参数时的操作:- 调用
ist_get_ist_cfg()
获取当前 IST 配置值,存储在cfgValue
中。 - 通过
IfxStdIf_DPipe_print
将配置值以十六进制格式输出到io
,例如:IST setting value is 0x1
。 - 返回
TRUE
,表示命令执行成功。
- 调用
- 无
步骤 | 条件/操作 | 输出内容 |
---|---|---|
1 | 检查 args 是否包含 ? | 输出命令语法和使用说明 |
2 | 若无 ? ,调用 ist_get_ist_cfg | 获取当前配置值并通过 io 输出 |
函数3:shellIST_get_ist_info
函数原型:boolean shellIST_get_ist_info(pchar args, void *data, IfxStdIf_DPipe *io)
特性 | 描述 |
---|---|
参数无关性 | 仅检查是否存在 ? 参数,不依赖其他输入内容。 |
简单流程 | 逻辑分支清晰:帮助信息优先于功能执行。 |
固定响应 | 无论操作是否成功,均返回 TRUE ,可能掩盖潜在错误(如 ist_get_ist_info 失败)。 |