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

📋 文档信息

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

📋 变更历史记录

文档变更记录

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

🎯 类概览

Accessor 类

属性
类名称Accessor
功能描述适用于不需要循环周期性获取值或需要写入硬件值的场景,属性可读写
所属SIG组hardware
所属组件hwproxy
责任人硬件代理组
最后更新2025-01-27
状态🟢 正常运行

📊 属性定义详表

必选属性

属性名类型默认值取值范围动态关联描述使用场景举例来源分类
ChipStringCSR配置-Smc_ExpBoardSMCAccessor关联的chip
对同一csr中器件的引用
适用于不需要循环周期性获取值或需要写入硬件值的场景,属性可读写"#/Smc_ExpBoardSMC"CSR硬件
OffsetU32469765888--偏移地址
json不支持16进制,需转换成10进制
1、对于简单器件,偏移为实际的硬件器件偏移,用于计算硬件的偏移地址,读取硬件下不同地址的数据
2、对于SMC,偏移为SMC命令字
适用于不需要循环周期性获取值或需要写入硬件值的场景,属性可读写469765888CSR硬件
SizeU81--读取数据的长度
单位为Byte
适用于不需要循环周期性获取值或需要写入硬件值的场景,属性可读写1CSR硬件
MaskU8255--掩码
1、位读时Mask有效,块读时Mask无效可置0,BMC从硬件读取数据后与掩码进行按位与操作后返回结果
2、写入时先获取值,再按位修改后写入到硬件,需要器件支持
适用于不需要循环周期性获取值或需要写入硬件值的场景,属性可读写255CSR硬件
TypeU800或1-读取方式
0:位读/位写
1:块读/块写
适用于不需要循环周期性获取值或需要写入硬件值的场景,属性可读写0CSR硬件

可选属性

属性名类型默认值取值范围动态关联描述使用场景举例来源分类
ValueU8硬件代理提供-硬件代理提供读值
当前硬件器件的实际值
适用于不需要循环周期性获取值或需要写入硬件值的场景,属性可读写无需配置硬件代理提供硬件

🔗 动态关联机制

语法规范

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

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

# 实际示例
Chip: "#/Smc_ExpBoardSMC"                  # 关联SMC器件

关联说明

  • Chip: 关联同一CSR中的器件对象,实现Accessor与具体硬件器件的绑定
  • Value: 由硬件代理动态提供,反映当前硬件器件的实际状态

📂 分类标准

硬件属性

  • 定义:与物理器件直接相关的参数,支持读写操作
  • 特点:通过配置实现对硬件的直接访问和控制
  • 示例Chip, Offset, Size, Mask, Type, Value

📝 配置示例

标准位读写配置

json
{
  "Accessor": {
    "Chip": "#/Smc_ExpBoardSMC",
    "Offset": 469765888,
    "Size": 1,
    "Mask": 255,
    "Type": 0,
    "Value": 0
  }
}

块读写配置

json
{
  "Accessor": {
    "Chip": "#/Smc_ExpBoardSMC",
    "Offset": 469765888,
    "Size": 4,
    "Mask": 0,
    "Type": 1,
    "Value": 0
  }
}

特定位掩码配置

json
{
  "Accessor": {
    "Chip": "#/Smc_ExpBoardSMC",
    "Offset": 469765888,
    "Size": 1,
    "Mask": 15,
    "Type": 0,
    "Value": 0
  }
}

多字节读写配置

json
{
  "Accessor": {
    "Chip": "#/Smc_ExpBoardSMC",
    "Offset": 469765888,
    "Size": 2,
    "Mask": 65535,
    "Type": 0,
    "Value": 0
  }
}

🔧 使用指南

配置步骤

  1. 确定关联器件:通过Chip属性指定要访问的硬件器件
  2. 设置地址参数:配置Offset(偏移地址)和Size(数据长度)
  3. 选择访问方式:根据器件特性选择Type(0位读写/1块读写)
  4. 配置掩码:设置Mask参数,位读写时有效,块读写时可置0
  5. 验证配置:确保器件支持读写操作和掩码操作
  6. 监控数值:通过Value属性获取当前硬件状态

注意事项

  • 地址转换:JSON不支持16进制,Offset需要转换为10进制值
  • 器件支持:SMC命令字需要确保对应器件支持读写操作
  • 掩码使用:位读写时掩码有效,块读写时掩码无效可置0
  • 写入操作:写入时先获取值,再按位修改后写入到硬件
  • 访问权限:确保器件支持读写权限
  • 数据一致性:读写操作需要保证数据一致性

性能建议

  • 按需访问:不同于Scanner的周期性扫描,Accessor按需访问,减少系统负载
  • 读写分离:根据实际需求选择只读或读写配置
  • 掩码优化:合理设置掩码可以提高位操作效率
  • 批量操作:对于连续地址的多个寄存器,可以使用块读写提高效率

读写操作说明

  • 位读操作
    • 从硬件读取数据后与掩码进行按位与操作
    • 返回掩码覆盖的特定位数据
  • 位写操作
    • 先获取当前值
    • 按位修改目标位
    • 将修改后的值写入硬件
  • 块读操作
    • 一次性读取Size指定长度的数据
    • 掩码无效,直接返回原始数据
  • 块写操作
    • 一次性写入Size指定长度的数据
    • 掩码无效,直接写入完整数据

与Scanner的区别

特性ScannerAccessor
访问方式周期性扫描按需访问
数据更新自动更新到资源树手动读取
写入支持只读可读写
使用场景状态监控配置控制
性能影响持续占用资源按需占用资源

常见问题

  • Q: 什么时候使用Accessor而不是Scanner?
    • A: 当需要按需读取数据或需要写入硬件值时使用Accessor,需要持续监控状态时使用Scanner
  • Q: 如何确保写入操作的安全性?
    • A: 使用位写操作并配置合适的掩码,确保只修改目标位而不影响其他位
  • Q: 块读写和位读写如何选择?
    • A: 需要精确控制特定位时使用位读写,需要处理完整数据时使用块读写