1.需求描述
在ZYNQ芯片PS侧,基于嵌入式linux系统,读取PS芯片温度及电压。对于读取到的数值,通过JSON上报给前端界面。
我发现网上关于ZYNQ芯片读取温度、电压的讲解很多,但没找到linux系统下,温度电压数值文件与用户手册中计算公式的对应关系。于是计算一下,找规律,做记录。
2.实现方案
1)文件位置
/sys/bus/iio/devices/iio:device0
进入该位置,可以看到温度、电压相关的文件。通过读取这些文件,并进行计算,即可得到温度、电压相关参数。
注意,内核需包含xadc驱动。
2)计算方法
①温度:
在”/sys/bus/iio/devices/iio:device0”位置,可以看见关于温度的文件有三个:
in_temp0_raw、in_temp0_offset、in_temp0_scale
在xilinx的官方文档(ug480)中,ADC数值与温度的转换关系是:
temperature(℃)=ADC_Code×503.975/4096-273.15
可以直接读取in_temp0_raw文件,把读取到的数值带入上式计算;也可以使用另一公式:
Temp = (temp_scale * (temp_raw + temp_offset))/1000
计算发现两个公式的对应关系是:
in_temp0_scale=503.976/4096×1000;
in_temp0_scale=-273.15×1000/in_temp0_scale
由此,in_temp0_raw、in_temp0_offset、in_temp0_scale三个文件的含义清楚了。
②电压
在”/sys/bus/iio/devices/iio:device0”位置,关于电压的文件较多,我个人分为raw文件和scale文件两种。
在xilinx的官方文档(ug480)中,ADC数值与温度的转换关系是:
Voltage(V)=ADC_Code/4096×3V
raw文件数值即ADC_Code,scale文件的数值即1/4096×3
由此,将读取到的数值带入公式计算即可。
3.特别感谢博主
https://blog.csdn.net/mad_orange/article/details/137272609
https://blog.csdn.net/jin787730090/article/details/118357511