嵌入式爱好者

嵌入式爱好者 门户 知识库 查看内容

imx6ull读取DS18B20温度

2023-11-30 17:44| 发布者: Espoir| 查看: 153| 评论: 0

类目:  >  知识库     文档编号: 1229

6ull读取DS18B20温度

一、编译驱动

源码路径:drivers/w1/

打开.config文件:

$ vi .config

打开内核选项:

CONFIG_W1=y
CONFIG_W1_CON=y

# 1-wire Bus Masters
CONFIG_W1_MASTER_GPIO=y

# 1-wire Slaves
CONFIG_W1_SLAVE_THERM=y

在设备树跟节点下,创建ds18b20节点,内容如下:

onewire@0 {
compatible = "w1-gpio";
gpios = <&gpio1 23 GPIO_ACTIVE_HIGH>;
linux,open-drain;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_onewire>;
status = "okay";
};

在iomuxc下添加引脚复用:

pinctrl_onewire: onewire@0 {
fsl,pins = <
MX6UL_PAD_UART2_RTS_B__GPIO1_IO23       0x4001b8b0/*ds18b20_1*/
>;
};

编译并更新内核和设备树。

二、测试方法

驱动加载后,ds18b20会在/sys/bus/w1/devices/路径下注册一个28开头的路径,里面存放着ds18b20给应用层的接口文件。例如:/sys/bus/w1/devices/28-3c01e0763912/

可以用如下命令读取温度:

root@imx6ulevk:~# cat /sys/bus/w1/devices/28-3c01e0763912/w1_slave
bf 01 4b 46 7f ff 0c 10 61 : crc=61 YES
bf 01 4b 46 7f ff 0c 10 61 t=27937

但是这种方法也有局限性,每个DS18B20会有不同的的id,我们可以写一个脚本,读取指定W1总线上的DS18B20的ID,脚本内容如下:

#!/bin/sh

ds18b20=`cat /sys/bus/w1/devices/w1_bus_master$1/w1_master_slaves`

if [ ${ds18b20:0:3} = "28-" ]
then
cat /sys/bus/w1/devices/$ds18b20/w1_slave
fi

脚本执行后效果如下:

$ ./ds18b20.sh 1
a2 01 55 05 7f a5 81 66 34 : crc=34 YES
a2 01 55 05 7f a5 81 66 34 t=26125


已解决

未解决

只是看看

最新评论

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

GMT+8, 2025-5-9 15:30

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

返回顶部