前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >zynq-7000 获取CPU片内温度

zynq-7000 获取CPU片内温度

作者头像
咖啡走糖
发布2022-11-05 16:40:25
1.6K0
发布2022-11-05 16:40:25
举报
文章被收录于专栏:咖啡走糖

XADC是zynq芯片内部进行温度和电压检测的模块,通过(https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842132/XADC)这篇wiki可以知道,XADC控制器有两种表现形式,一种是位于PS内部,即文档中提到的the PS-XADC interface for the PS software to control the XADC,另一种是位于PL内部,通过IP核的方式实现。目前常用的是第一种。这里也采用第一种PS自带的xadc来获取CPU片内的温度。

查看内核是否支持XADC,勾上CONFIG_XILINX_XADC

代码语言:javascript
复制
<*> Xilinx XADC driver

查看dts,文件为linux-xlnx/arch/arm/boot/dts/zynq-7000.dtsi,可以看到dts已经支持XADC

代码语言:javascript
复制
  amba: amba {
                u-boot,dm-pre-reloc;
                compatible = "simple-bus";
                #address-cells = <1>;
                #size-cells = <1>;
                interrupt-parent = <&intc>;
                ranges;

                adc: adc@f8007100 {
                        compatible = "xlnx,zynq-xadc-1.00.a";
                        reg = <0xf8007100 0x20>;
                        interrupts = <0 7 4>;
                        interrupt-parent = <&intc>;
                        clocks = <&clkc 12>;
                };

系统起来后在/sys/bus/iio/devices/iio:device0目录下看到以下信息

in_temp0_raw 是温度原始值,要经过转换,网上查了资料,转换代码如下

代码语言:javascript
复制
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <dirent.h>
#include <stdlib.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <ctype.h>
#include <pthread.h>
#include <assert.h>
#include <termios.h> 
#include <signal.h>
/**IIO获取温度原始值文件**/
#define SYS_PATH_TEMP_IIO_VALUE    "/sys/bus/iio/devices/iio:device0/in_temp0_raw"
static const int multiplier = 1 << 12; //4096
 
int main(int argc, char *argv[])
{
    FILE *stream;
    float val;
    float temp_value;
     unsigned  char buf[20];
       if ((stream = fopen(SYS_PATH_TEMP_IIO_VALUE, "w+"))== NULL)
       {
          fprintf(stderr,"Cannot open output file.\n");
            return 1;
        }
     fseek(stream, SEEK_SET, 0);
        fread(buf, sizeof(char), sizeof(buf), stream);
     val=atof(buf);
     temp_value=((val * 503.975)/multiplier )-273.15;
     printf("The cpu temp is %.2f\r\n",temp_value);
     fclose(stream); 
     return 0;
}

编译之后运行得到正确的片内温度值

代码语言:javascript
复制
root:~/test/temp# ./temp 
The cpu temp is 74.07

因为没有加散热片,可以看到温度还是比较高的,有74℃了。

版权属于:咖啡走糖

本文链接:https://cloud.tencent.com/developer/article/2152388

若无注明,本文皆咖啡走糖原创,转载时必须注明出处及本声明!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020 年 09 月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档