CSR配置字典之Accessor类
更新时间:2025/7/22
在Gitcode上查看源码📋 文档信息
项目 | 内容 |
---|---|
文档标题 | Accessor类配置字典 |
版本 | v1.0 |
创建日期 | 2025-01-27 |
最后更新 | 2025-01-27 |
维护状态 | ✅ 活跃维护 |
📋 变更历史记录
文档变更记录
版本 | 发布日期 | 变更类型 | 变更内容 | 影响范围 | 维护人员 |
---|---|---|---|---|---|
v1.0 | 2025-01-27 | 初始版本 | 创建Accessor类配置字典 | 全新文档 | 系统管理员 |
🎯 类概览
Accessor 类
属性 | 值 |
---|---|
类名称 | Accessor |
功能描述 | 适用于不需要循环周期性获取值或需要写入硬件值的场景,属性可读写 |
所属SIG组 | hardware |
所属组件 | hwproxy |
责任人 | 硬件代理组 |
最后更新 | 2025-01-27 |
状态 | 🟢 正常运行 |
📊 属性定义详表
必选属性
属性名 | 类型 | 默认值 | 取值范围 | 动态关联 | 描述 | 使用场景 | 举例 | 来源 | 分类 |
---|---|---|---|---|---|---|---|---|---|
Chip | String | CSR配置 | - | Smc_ExpBoardSMC | Accessor关联的chip 对同一csr中器件的引用 | 适用于不需要循环周期性获取值或需要写入硬件值的场景,属性可读写 | "#/Smc_ExpBoardSMC" | CSR | 硬件 |
Offset | U32 | 469765888 | - | - | 偏移地址 json不支持16进制,需转换成10进制 1、对于简单器件,偏移为实际的硬件器件偏移,用于计算硬件的偏移地址,读取硬件下不同地址的数据 2、对于SMC,偏移为SMC命令字 | 适用于不需要循环周期性获取值或需要写入硬件值的场景,属性可读写 | 469765888 | CSR | 硬件 |
Size | U8 | 1 | - | - | 读取数据的长度 单位为Byte | 适用于不需要循环周期性获取值或需要写入硬件值的场景,属性可读写 | 1 | CSR | 硬件 |
Mask | U8 | 255 | - | - | 掩码 1、位读时Mask有效,块读时Mask无效可置0,BMC从硬件读取数据后与掩码进行按位与操作后返回结果 2、写入时先获取值,再按位修改后写入到硬件,需要器件支持 | 适用于不需要循环周期性获取值或需要写入硬件值的场景,属性可读写 | 255 | CSR | 硬件 |
Type | U8 | 0 | 0或1 | - | 读取方式 0:位读/位写 1:块读/块写 | 适用于不需要循环周期性获取值或需要写入硬件值的场景,属性可读写 | 0 | CSR | 硬件 |
可选属性
属性名 | 类型 | 默认值 | 取值范围 | 动态关联 | 描述 | 使用场景 | 举例 | 来源 | 分类 |
---|---|---|---|---|---|---|---|---|---|
Value | U8 | 硬件代理提供 | - | 硬件代理提供 | 读值 当前硬件器件的实际值 | 适用于不需要循环周期性获取值或需要写入硬件值的场景,属性可读写 | 无需配置 | 硬件代理提供 | 硬件 |
🔗 动态关联机制
语法规范
使用 #/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
}
}
🔧 使用指南
配置步骤
- 确定关联器件:通过Chip属性指定要访问的硬件器件
- 设置地址参数:配置Offset(偏移地址)和Size(数据长度)
- 选择访问方式:根据器件特性选择Type(0位读写/1块读写)
- 配置掩码:设置Mask参数,位读写时有效,块读写时可置0
- 验证配置:确保器件支持读写操作和掩码操作
- 监控数值:通过Value属性获取当前硬件状态
注意事项
- 地址转换:JSON不支持16进制,Offset需要转换为10进制值
- 器件支持:SMC命令字需要确保对应器件支持读写操作
- 掩码使用:位读写时掩码有效,块读写时掩码无效可置0
- 写入操作:写入时先获取值,再按位修改后写入到硬件
- 访问权限:确保器件支持读写权限
- 数据一致性:读写操作需要保证数据一致性
性能建议
- 按需访问:不同于Scanner的周期性扫描,Accessor按需访问,减少系统负载
- 读写分离:根据实际需求选择只读或读写配置
- 掩码优化:合理设置掩码可以提高位操作效率
- 批量操作:对于连续地址的多个寄存器,可以使用块读写提高效率
读写操作说明
- 位读操作:
- 从硬件读取数据后与掩码进行按位与操作
- 返回掩码覆盖的特定位数据
- 位写操作:
- 先获取当前值
- 按位修改目标位
- 将修改后的值写入硬件
- 块读操作:
- 一次性读取Size指定长度的数据
- 掩码无效,直接返回原始数据
- 块写操作:
- 一次性写入Size指定长度的数据
- 掩码无效,直接写入完整数据
与Scanner的区别
特性 | Scanner | Accessor |
---|---|---|
访问方式 | 周期性扫描 | 按需访问 |
数据更新 | 自动更新到资源树 | 手动读取 |
写入支持 | 只读 | 可读写 |
使用场景 | 状态监控 | 配置控制 |
性能影响 | 持续占用资源 | 按需占用资源 |
常见问题
- Q: 什么时候使用Accessor而不是Scanner?
- A: 当需要按需读取数据或需要写入硬件值时使用Accessor,需要持续监控状态时使用Scanner
- Q: 如何确保写入操作的安全性?
- A: 使用位写操作并配置合适的掩码,确保只修改目标位而不影响其他位
- Q: 块读写和位读写如何选择?
- A: 需要精确控制特定位时使用位读写,需要处理完整数据时使用块读写