【已评审】新增类,用于器件逻辑自检方案优化

背景

当前的CPLD自检方案,仅支持对连续的寄存器地址进行自检,不支持对特定地址的多个寄存器进行自检。

并且自检时,方案为周期性访问寄存器,向寄存器内写入0x55和0xaa,读取出0x55和0xaa,检测到写入和读取一致,则认为正常。

这导致:

1. **无法覆盖多片选场景**:当一个cpld多片选时,或者一个单板上实现多个smc模块的时候,每一个片选和模块都需要检测。

此时只支持连续寄存器地址的自检的接口无法满足要求。

2. **无法覆盖异常场景**:主控设备(CPU/BMC)通过 Local Bus 向 CPLD 写入控制指令或数据时,假如对端CPLD挂死,会导致读入和读出值一致,无法检测出异常。

需开发更完善的CPLD自检方案以覆盖场景。

关联ISSUE

整体方案

在model.json中新增对象LogicSelfTest,对象中新增私有属性RefChip、WriteReg、ReadReg、WriteVal、ReadVal等,

以支持对特定器件的测试寄存器进行自检,并支持配置具体需要的写入值和校验值。

详细描述

变化类型:model.json中新增类LogicSelfTest
应用场景:CPLD等器件的自检
持久化类型: 不持久化
操作权限:ReadOnly

属性名称 变化类型 签名 持久化 默认值 变化通知 属性说明 属性约束
RefChip 新增属性 ay 不持久化 false 关联的逻辑器件
WriteReg 新增属性 u 不持久化 false 关联写入的寄存器
ReadReg 新增属性 u 不持久化 false 关联读取的寄存器
WriteVal 新增属性 au 不持久化 false 实际写入的值
ReadVal 新增属性 au 不持久化 false 预期读出的值
DebounceCount 新增属性 y 不持久化 3 false 防抖次数
PeriodMs 新增属性 u 不持久化 6000 false 扫描周期, 单位ms

model.json详情展示:

    "LogicSelfTest": {
        "properties": {
            "RefChip": {
                "usage": [
                    "CSR"
                ],
                "baseType": "U8[]",
                "refInterface": "bmc.kepler.Chip",
                "description": "关联的逻辑器件"
            },
            "WriteReg": {
                "usage": [
                    "CSR"
                ],
                "baseType": "U32",
                "description": "关联写入的寄存器"
            },
            "ReadReg": {
                "usage": [
                    "CSR"
                ],
                "baseType": "U32",
                "description": "关联读取的寄存器"
            },
            "WriteVal": {
                "usage": [
                    "CSR"
                ],
                "baseType": "U32[]",
                "description": "实际写入的值"
            },
            "ReadVal": {
                "usage": [
                    "CSR"
                ],
                "baseType": "U32[]",
                "description": "预期读出的值"
            },
            "DebounceCount": {
                "usage": [
                    "CSR"
                ],
                "default": 3,
                "baseType": "U8",
                "description": "防抖次数"
            },
            "PeriodMs": {
                "usage": [
                    "CSR"
                ],
                "default": 6000,
                "baseType": "U32",
                "description": "扫描周期, 单位ms"
            }
        }
    }

xxxx_basic_info.sr 配置示例:

        "Accessor_LogicalSelfTest_0": {
            "Chip": "#/CpldChip_0",
            "Mask": 255,
            "Offset": 0,
            "Size": 1,
            "Type": 0,
            "Value": 0
        },

xxxxx_mgmt_model.sr 配置示例:

        "LogicSelfTest_0": {
            "RefChip": "#/CpldChip_0",
            "WriteReg": "#/Accessor_LogicalSelfTest_0.Value",
            "ReadReg": "#/Accessor_LogicalSelfTest_0.Value",
            "WriteVal": [
                85,
                170
            ],
            "ReadVal": [
                170,
                85
            ],
            "DebounceCount": 3,
            "PeriodMs": 6000
        },
        "Event_LogicSelfTestFail_0": {
            "EventKeyId": "ExpBoard.ExpBoardCPLDSelfTestFailure",
            "Reading": "<=/CpldChip_0.HealthStatus",
            "Condition": 1,
            "OperatorId": 5,
            "Enabled": true,
            "AdditionalInfo": "1,2",
            "DescArg1": "cs0",
            "DescArg2": "1",
            "@Default": {
                "Reading": 0
            },
            "Component": "#/Component_ComExpander"
        }

评审结论

同意

由于大量社区举报,此话题被临时关闭至少 4 小时。

此话题已在 12 小时后被自动打开。