在非天池场景下如何使用adc驱动接口在sr文件中配置Scanner

如题,之前在 关于《BMC模组硬件指南》中ADC接口和PWM接口的问题 这篇帖子中提到了非天池场景下如何使用adc和pwm的接口。

这里有c接口和lua的接口,但这个是属于代码侧的。那如果要在sr文件中配置传感器,这部分的Scanner该如何去配置呢?有相应的配置示例吗?

首先需要将ADC作为一个bus,在root.sr中进行申明

root.sr添加对象Adc_xxx
Adc类定义如下:

prop type description
ScanRate U32 ADC采样频率,默认32768
VoltRefSrc U32 参考电压类型:0 外部参考电压;1 内部参考电压;默认1
VoltRefVal U32 参考电压值,单位毫伏,默认2400

拓扑中将Adc_1添加到bus中,并通过EXU连接器传递下去,传到你需要的板子的CSR。

在对应的板子CSR中,定义Adc器件

"Chip_Adc_xxx": {
    "Address": xxx,
    "AddrWidth": xxx,
    "OffsetWidth": xxx
}

并把Adc器件挂在ADC总线下:

"ManagementTopology": {
    "Anchor": {
        ...
        "Adc_xxx": {
            "Chips": [
                "Chip_Adc_xxx"
            ]
        }
        ...
    }
}

然后Scanner就按照正常器件配置即可:

"Scanner_Adc_xxx": {
    "Chip": "#/Chip_Adc_xxx",
    "Offset": xxx,
    "Size": xxx,
    "Period": xxxx
}

BMC Studio应该支持配置,可以考虑使用BMC Studio进行辅助开发

将ADC作为一个bus配置,这个好理解,后续的步骤也和平常的一致。
但是在这种情况下的"Chip_Adc_xxx""Address"又该是什么呢?一共16路adc,难道就是写0~15或者1~16这样吗?

当前配置Chip主要是为了能访问
具体的链路在Scanner上进行配置,即Offset: 0、1、2、3对应不同的adc每一路

1 个赞

感谢张工。刚刚又想到了个问题,这个Scanner要读取几个字节,读出来的数据又要通过什么公式换算得到实际的电压结果。

具体取决于硬件吧,可以从4字节尝试一下,然后公式就从毫伏转成伏即可

1 个赞

请问这个外部参考电压,是哪个管脚输入呀,BMC模组规格书上好像没有写