CSR配置字典之Scanner类
更新时间:2025/7/22
在Gitcode上查看源码

📋 文档信息

项目内容
文档标题Scanner类配置字典
版本v1.0
创建日期2025-01-27
最后更新2025-01-27
维护状态✅ 活跃维护

📋 变更历史记录

文档变更记录

版本发布日期变更类型变更内容影响范围维护人员
v1.02025-01-27初始版本创建Scanner类配置字典全新文档系统管理员

🎯 类概览

Scanner 类

属性
类名称Scanner
功能描述硬件代理对所有配置的Scanner进行周期性扫描,并将值更新到资源树,属性只读
所属SIG组hardware
所属组件hwproxy
责任人硬件代理组
最后更新2025-01-27
状态🟢 正常运行

📊 属性定义详表

必选属性

属性名类型默认值取值范围动态关联描述使用场景举例来源分类
ChipStringCSR配置-Smc_NpuBrdSMCScanner关联的chip
对同一csr中器件的引用
硬件器件关联"#/Smc_NpuBrdSMC"CSR硬件
OffsetU32469765888--偏移地址
json不支持16进制,需转换成10进制
1、对于简单器件,偏移为实际的硬件器件偏移,用于计算硬件的偏移地址,读取硬件下不同地址的数据
2、对于SMC,偏移为SMC命令字
硬件地址定位,若是Smc命令字,需对应器件支持469765888CSR硬件
SizeU81--读取数据的长度
单位为Byte
在hwproxy内部中存在扫描线程对所有配置的Scanner进行周期性扫描,并将值更新到资源树,属性只读,适用于V2中循环获取值的场景1CSR硬件
TypeU800或1-读取方式
0:位读
1:块读
需要器件支持0CSR硬件
PeriodU32500--Scanner扫描周期
单位ms
定时开启扫描动作的周期500CSR硬件

可选属性

属性名类型默认值取值范围动态关联描述使用场景举例来源分类
MaskU8255--掩码
从硬件读取的数据长度为Byte,为了准确获取某其中的某些bit,读值需要与Mask按位与,此操作需要器件支持;位读时掩码有效,块读时掩码无效,可置0
位读方式有效255CSR硬件
DebounceString"None""None"、"#/ContBin_H6L3"、"#/MidAvg_ADTEST_0"ContBin_H6L3、MidAvg_ADTEST_0引用的Debounce防抖对象当成功读到值时,使用配置的防抖方式获取防抖后的值"None""#/ContBin_H6L3""#/MidAvg_ADTEST_0"CSR硬件
ScanEnabledString10或1Scanner_PowerGdScanner使能
ScanEnabled取值为枚举值0和1:
0表示Scanner未使能
1表示Scanner使能
值可以通过单点值、表达式、或从其他Scanner同步值,注意不能依赖成环,表达式需要最后转换为0或1
某些场景不需要进行扫描,可进行配置,例如关联电源信号,下电时不扫描"<=/Scanner_PowerGd.Value"CSR/其他对象同步硬件
NominalValueU80--默认值
Scanner禁用状态,当芯片处于不可用状态时,可通过ScanEnabled属性与NominalValue属性配置Scanner的禁用状态与禁用状态下的取值
在hwproxy内部中存在扫描线程对所有配置的Scanner进行周期性扫描,并将值更新到资源树,属性只读,适用于V2中循环获取值的场景0CSR硬件
StatusU840、1、2、3、4硬件代理提供Scanner状态
Scanner状态属于运行态的变量
0: 正常获取值
1: 获取值失败
2: 获取值预失败,正在进行防抖
3: 处于无效状态
4: 初始状态, 暂未开始扫描
用于状态监控和管理,Status不为0时说明数值并非从硬件上读取来的准确值,不能作为告警的依据无需配置硬件代理提供软件
ValueU8硬件代理提供-硬件代理提供当Scanner处于无效状态(Status=3)时,Value将被置为NominalValue标称值Status的值默认值为(初始状态, 暂未开始扫描),则此时Value = NominalValue无需配置硬件代理提供软件
@DefaultString硬件代理提供--指定特定属性的默认值在hwproxy内部中存在扫描线程对所有配置的Scanner进行周期性扫描,并将值更新到资源树,属性只读N/ACSR硬件

🔗 动态关联机制

语法规范

使用 #/xxx 格式实现属性间的动态关联:

yaml
# 语法格式
属性名: "#/目标类.属性名"

# 实际示例
Chip: "#/Smc_NpuBrdSMC"                    # 关联SMC器件
Debounce: "#/ContBin_H6L3"                 # 关联防抖对象
ScanEnabled: "<=/Scanner_PowerGd.Value"    # 关联电源状态,使用表达式

关联说明

  • Chip: 关联同一CSR中的器件对象,实现Scanner与具体硬件器件的绑定
  • Debounce: 可选关联防抖对象,提供数据滤波功能
  • ScanEnabled: 支持表达式关联,可与电源状态等条件绑定,实现智能扫描控制

📂 分类标准

硬件属性

  • 定义:与物理器件直接相关的参数
  • 特点:通常固定不变,与硬件BOM表对应
  • 示例Chip, Offset, Size, Type, Period, Mask, Debounce, ScanEnabled, NominalValue, @Default

软件属性

  • 定义:用于逻辑控制和软件管理的参数
  • 特点:由硬件代理动态提供和管理
  • 示例Status, Value

📝 配置示例

标准SMC扫描配置

json
{
  "Scanner": {
    "Chip": "#/Smc_NpuBrdSMC",
    "Offset": 469765888,
    "Size": 1,
    "Type": 0,
    "Period": 500,
    "Mask": 255,
    "Debounce": "None",
    "ScanEnabled": 1,
    "NominalValue": 0,
    "Status": 4,
    "Value": 0
  }
}

带防抖功能的扫描配置

json
{
  "Scanner": {
    "Chip": "#/Smc_NpuBrdSMC",
    "Offset": 469765888,
    "Size": 1,
    "Type": 0,
    "Period": 300,
    "Mask": 255,
    "Debounce": "#/ContBin_H6L3",
    "ScanEnabled": 1,
    "NominalValue": 0,
    "Status": 4,
    "Value": 0
  }
}

条件扫描配置

json
{
  "Scanner": {
    "Chip": "#/Smc_NpuBrdSMC",
    "Offset": 469765888,
    "Size": 1,
    "Type": 0,
    "Period": 500,
    "Mask": 255,
    "Debounce": "None",
    "ScanEnabled": "<=/Scanner_PowerGd.Value",
    "NominalValue": 0,
    "Status": 4,
    "Value": 0
  }
}

块读扫描配置

json
{
  "Scanner": {
    "Chip": "#/Smc_NpuBrdSMC",
    "Offset": 469765888,
    "Size": 4,
    "Type": 1,
    "Period": 1000,
    "Mask": 0,
    "Debounce": "None",
    "ScanEnabled": 1,
    "NominalValue": 0,
    "Status": 4,
    "Value": 0
  }
}

🔧 使用指南

配置步骤

  1. 确定关联器件:通过Chip属性指定要扫描的硬件器件
  2. 设置地址参数:配置Offset(偏移地址)和Size(数据长度)
  3. 选择读取方式:根据器件特性选择Type(0位读/1块读)
  4. 配置扫描周期:设置Period参数,建议最小300ms
  5. 可选功能配置:根据需要配置Mask、Debounce、ScanEnabled等
  6. 监控运行状态:通过Status和Value属性监控扫描状态和数值

注意事项

  • 地址转换:JSON不支持16进制,Offset需要转换为10进制值
  • 器件支持:SMC命令字需要确保对应器件支持
  • 掩码使用:位读时掩码有效,块读时掩码无效可置0
  • 防抖配置:防抖对象需要预先定义并确保可用
  • 使能表达式:ScanEnabled表达式不能形成依赖环
  • 状态监控:Status初始值为4,正常运行后应为0
  • 禁用状态:当ScanEnabled=0时,Value将被置为NominalValue

性能建议

  • 扫描周期:建议Period≥300ms,避免过度占用系统资源
  • 批量配置:相同器件的多个Scanner可以考虑优化扫描策略
  • 条件扫描:合理使用ScanEnabled降低无效扫描
  • 防抖策略:根据信号特性选择合适的防抖算法