背景
当前的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"
}
评审结论
同意