嵌入式爱好者

RK3588 SARADC设备应用

2023-11-30 17:06| 发布者: C.S151| 查看: 457| 评论: 0

类目: RK3588系列产品  >  Linux     文档编号: 1221

概述

RK3588内置的ADC设备有两种一种是温度传感器(Temperature Sensor),一种是逐次逼近传感器(Successive Approximation Register)。

TSADC支持7个通道,分别用于监控A76_0/1核,A76_2/3核,DSU,A55_0/1/2/3核,PD_CENTER,NPU,GPU的温度。在初始化后默认使能每个通道进行循环转换。如果在一段时间内温度过高则会产生中断信号,可以用于触发降温措施,如果一段时间内超过设定温度后,会发送一个TSHUT信号给CRU模块用于复位SOC或者使用GPIO复位PMIC,目前设备树中描述的是采用前者。

SARADC是一个8通道单端12位逐次逼近A/D转换器,在20MHz时钟下,最大转换率位1MSPS。输入范围通常是0v~1.8v。

驱动文件

驱动文件在drivers/iio/adc/rockchip_saradc.c

DTS节点配置

DTS 配置参考文档为Documentation/devicetree/bindings/iio/adc/rockchip-saradc.txt

DTS节点所在文件kernel/arch/arm64/boot/dts/rockchip/rk3588.dtsi

examples:
- |
  #include <dt-bindings/clock/rk3288-cru.h>
  #include <dt-bindings/interrupt-controller/arm-gic.h>
  saradc: saradc@2006c000 {
    compatible = "rockchip,saradc";
    reg = <0x2006c000 0x100>;
    interrupts = <GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>;
    clocks = <&cru SCLK_SARADC>, <&cru PCLK_SARADC>;
    clock-names = "saradc", "apb_pclk";
    resets = <&cru SRST_SARADC>;
    reset-names = "saradc-apb";
    vref-supply = <&vcc18>;
    #io-channel-cells = <1>;
  };
  • interrupts 表示当转换完成时产生的中断描述。

  • io-channel-cells这个属性在iio-bindings.txt文档中有描述,当设备可以有多个iio输出时,设为1。

  • vref-supply 表示saradc值对应的参考电压,需要根据具体的硬件环境设置,最大为1.8V,对应的saradc值为

1024,电压和adc值成线性关系。

SARADC使用

Linux内核采用IIO子系统来控制SARADC,目前OK3588内核中默认配置了IIO子系统对SARADC的支持,与TSADC的情况相同,在初始化后八个通道会循环转换。

可以参考/drivers/input/keyboard/adc-keys.c 在驱动程序中使用iio_read_channel_raw()获取ADC通道转换后的数据,不过在设备树中需要编写相关节点,并引用对应的IIO通道。


adc_keys: adc-keys {
compatible = "adc-keys";
io-channels = <&saradc 1>; //作为消费者描述iio通道的生产者,占用的是通道1
io-channel-names = "buttons";//在驱动中获取iio通道的句柄
keyup-threshold-microvolt = <1800000>;
poll-interval = <100>;
        ···
}

或者可以直接通过用户态接口获取ADC的值,其中*表示ADC第多少通道:

cat /sys/bus/iio/devices/iio\:device0/in_voltage*_raw


已解决

未解决

只是看看

最新评论

QQ|小黑屋| 飞凌嵌入式 ( 冀ICP备12004394号-1 )

GMT+8, 2024-11-22 09:52

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

返回顶部