CSR配置字典之ClockChipFirmware类
更新时间: 2026/08/28
在AtomGit上查看源码📋 文档信息
| 字段 | 值 |
|---|---|
| 文档标题 | CSR配置字典之ClockChipFirmware类 |
| 创建日期 | 2026-08-28 |
| 最后更新 | 2026-09-02 |
| 文档版本 | v1.0 |
| 维护人员 | Hardware SIG |
| 审核状态 | ✅ 已审核 |
📋 变更历史
| 版本 | 日期 | 变更内容 | 变更人 | 审核人 | 备注 |
|---|---|---|---|---|---|
| v1.0 | 2026-08-28 | 初始版本创建 | 开发团队 | 技术负责人 | 首次发布 |
🎯 类概览
ClockChipFirmware类 是BMC固件中用于配置主板时钟芯片的配置类。该类提供时钟芯片类型识别、配置文件关联和芯片寄存器批量写入等功能。
状态: 🟢 活跃维护中
适用范围: 需要在主机首次上电前配置时钟芯片寄存器的单板
依赖组件: general_hardware、fructrl、支持bmc.kepler.Chip.BlockIO接口的芯片对象
📊 属性定义详表
必选属性
| 属性名 | 类型 | 默认值 | 取值范围 | 动态关联 | 描述 | 使用场景 | 举例 | 来源 |
|---|---|---|---|---|---|---|---|---|
Id | U8 | - | 0~255,同一CSR内必须唯一 | - | ClockChipFirmware对象的唯一主键,用于区分相同芯片类型和通信协议的多个实例 | 唯一标识时钟配置对象 | 0 | CSR配置 |
ChipType | U8 | - | 当前支持0 | - | 时钟芯片类型;0表示当前适用于厂商代号HY的TYPE0时钟芯片 | 选择时钟芯片驱动 | 0 | CSR配置 |
RefChip | U8[] | - | 实现bmc.kepler.Chip.BlockIO接口的芯片对象引用 | Chip对象 | 关联实际执行BatchWrite寄存器写入的芯片对象 | 写入时钟芯片寄存器 | "#/Chip_Clock" | CSR配置 |
ConfigFileName | String | - | BMC文件系统中的完整文件路径 | - | 时钟芯片配置文件的完整路径,直接使用字符串配置 | 加载寄存器配置数据 | "/opt/bmc/clock/type0_config.txt" | CSR配置 |
可选属性
| 属性名 | 类型 | 默认值 | 取值范围 | 动态关联 | 描述 | 使用场景 | 举例 | 来源 |
|---|---|---|---|---|---|---|---|---|
Protocol | String | "I2C" | 枚举值:"I2C" | - | 时钟芯片通信协议,参与驱动模块名拼接;当前仅允许I2C | 选择通信方式和芯片驱动 | "I2C" | CSR配置 |
运行时属性
| 属性名 | 类型 | 默认值 | 持久化方式 | 描述 | 配置要求 |
|---|---|---|---|---|---|
ConfigSuccessFlag | Boolean | false | protect_reset(ResetPer语义) | 时钟芯片配置成功后由服务置为true;BMC复位时保留,整机掉电后清除 | 由软件维护,无需在CSR中配置 |
🔗 动态关联机制
RefChip关联
json
{
"RefChip": "#/Chip_Clock"
}RefChip必须引用支持bmc.kepler.Chip.BlockIO接口的芯片对象。时钟芯片驱动通过该对象的BatchWrite方法批量写入页选择寄存器和配置寄存器。
📂 分类标准
硬件属性
- ChipType: 标识时钟芯片类型,决定适用的寄存器配置方式。
- Id: 唯一标识一条时钟芯片配置,同类型、同协议的多个实例使用不同Id。
- RefChip: 关联实际访问时钟芯片的硬件对象。
- Protocol: 标识访问时钟芯片所使用的通信协议。
软件属性
- ConfigFileName: 指定由软件读取的时钟芯片配置文件。
- ConfigSuccessFlag: 记录当前整机掉电周期内的配置结果,由软件维护。
📝 配置示例
TYPE0 I2C时钟芯片配置
json
{
"ClockChipFirmware_0": {
"Id": 0,
"ChipType": 0,
"Protocol": "I2C",
"RefChip": "#/Chip_Clock",
"ConfigFileName": "/opt/bmc/clock/type0_config.txt"
}
}ConfigSuccessFlag是运行时属性,不应写入上述CSR配置。
TYPE0配置文件示例
text
// page 0x00, register 0x10, data 0x55
0x0010,0x55
delay 100
// page 0x01, register 0x20, data 0xAA
0x0120,0xAA配置文件支持以下内容:
- 空行或
//开头的注释行。 delay <毫秒数>格式的延时行,取值范围为0~60000,且之前必须至少存在一条寄存器写入。0x<页号><寄存器偏移>,0x<数据>格式的写入行,其中页号、寄存器偏移和数据均为1字节十六进制数;除首尾空白及逗号两侧空白外,不允许尾随内容或非十六进制字符。- 配置文件必须至少包含一条寄存器写入,空文件或仅包含注释的文件视为配置失败。
🔧 使用指南
配置步骤
- 创建芯片对象: 配置支持
bmc.kepler.Chip.BlockIO接口的时钟芯片访问对象。 - 设置对象标识: 为每个ClockChipFirmware对象配置唯一的
Id。 - 准备配置文件: 按驱动支持的格式生成寄存器配置文件,并部署到BMC文件系统。
- 选择芯片类型: 将
ChipType配置为对应的U8整数。当前TYPE0类型配置为0。 - 配置通信协议: 当前使用I2C通信,
Protocol配置为"I2C"或使用默认值。 - 关联芯片及文件: 通过
RefChip引用芯片对象,并通过ConfigFileName填写配置文件完整路径。
最佳实践
Id是唯一主键;同一CSR中的每个ClockChipFirmware对象必须使用不同的U8值。ChipType必须直接配置为U8整数,不应填写厂商名称或具体芯片型号。ConfigFileName必须直接配置为完整路径字符串,不应使用FirmwareFileName或其他字典结构封装。- 配置文件应随产品软件包部署,并确保general_hardware服务具有读取权限。
- 新增芯片类型时,应分配新的
ChipType值,并提供type<ChipType>_<协议小写>命名的配套驱动。
注意事项
- 当前仅支持
ChipType=0、Protocol="I2C",对应驱动模块clock.chip.type0_i2c。 - 时钟芯片仅在主机处于下电状态且
ConfigSuccessFlag=false时进行配置。 - 配置前服务会设置永久禁止上电锁;对象发现完成且所有时钟配置处理结束后释放,不以配置成功或失败作为解锁条件。
- TYPE0驱动使用寄存器
0x01切换页,每条寄存器配置写入前都会先写入页号。 - 每批最多包含128条底层写记录(64条配置写入);单批写入失败时最多尝试20次,最终失败时不会将
ConfigSuccessFlag置为true,但全部配置处理结束后仍会释放禁止上电锁。 Protocol当前仅允许"I2C",不支持任意字符串或其他协议值。
故障排除
- 提示ChipType不支持: 检查
ChipType是否为当前已登记的整数值,并确认对应驱动已随组件部署。 - 提示驱动不支持: 检查
Protocol拼写以及clock.chip.type<ChipType>_<协议小写>驱动文件是否存在。 - 提示配置文件不存在: 检查
ConfigFileName是否为完整路径,并确认文件存在且服务具有读取权限。 - 寄存器写入失败: 检查
RefChip引用、I2C链路、配置文件行格式及错误日志中的失败行号。 - 未执行配置: 检查主机是否处于下电状态,以及
ConfigSuccessFlag是否已经为true。