imx6ul linux读取DS18B20温度

首先尝试加载模块

root@imx6ulevk:~# modprobe w1-gpio
modprobe: FATAL: Module w1-gpio not found in directory /lib/modules/4.1.15-2.1.0+g30278ab

imx6ul 内核默认没有开启W1的内核选项所以没有这个模块。

1.驱动源码

源码目录:~/freescale/linux-imx/drivers/w1
w1-gpio.c是单总线的IO操作方法,用于模拟单总线时序;
w1_therm.c是DS18B20的寄存器操作方法,和IO时序无关;
可以将驱动结构看成是将“w1_therm”挂接到“w1-gpio”总线上,由w1-gpio控制w1_therm工作。

2.编译模块

开启内核选项

wujun@wj-vBox:~/freescale/linux-imx$ make menuconfig
CONFIG_W1=m
CONFIG_W1_CON=y
CONFIG_W1_MASTER_GPIO=m
CONFIG_W1_SLAVE_THERM=m

编译

wujun@wj-vBox:~/freescale/linux-imx$ make modules
CC [M] drivers/w1/w1.o
CC [M] drivers/w1/w1_int.o
CC [M] drivers/w1/w1_family.o
CC [M] drivers/w1/w1_netlink.o
CC [M] drivers/w1/w1_io.o
LD [M] drivers/w1/wire.o
CC [M] drivers/w1/masters/w1-gpio.o
CC [M] drivers/w1/slaves/w1_therm.o
Building modules, stage 2.
MODPOST 70 modules
CC drivers/w1/masters/w1-gpio.mod.o
LD [M] drivers/w1/masters/w1-gpio.ko
CC drivers/w1/slaves/w1_therm.mod.o
LD [M] drivers/w1/slaves/w1_therm.ko
CC drivers/w1/wire.mod.o
LD [M] drivers/w1/wire.ko

拷贝出内核模块到tftp共享目录

wujun@wj-vBox:~/freescale/linux-imx$ cp drivers/w1/wire.ko ~/share-doc/
wujun@wj-vBox:~/freescale/linux-imx$ cp drivers/w1/masters/w1-gpio.ko ~/share-doc/
wujun@wj-vBox:~/freescale/linux-imx$ cp drivers/w1/slaves/w1_therm.ko ~/share-doc/

把下面三个内核模块放在EVB /lib/modules/4.1.15-2.1.0+g30278ab/kernel路径下.
./drivers/w1/wire.ko
./drivers/w1/masters/w1-gpio.ko
.drivers/w1/slaves/w1_therm.ko

这种情况下还是不能用modprobe加载的,只能用insmod手动加载。因为没有生成依赖文件。
可以用make modules_install命令,这个命令会把模块都放到/lib/modules下,需要超级用户权限。
查看生成的模块依赖文件的内容。
在虚拟机/lib/modules/4.1.15-00158-g30278ab/modules.dep
61:kernel/drivers/w1/masters/w1-gpio.ko: kernel/drivers/w1/wire.ko
62:kernel/drivers/w1/slaves/w1_therm.ko: kernel/drivers/w1/wire.ko
63:kernel/drivers/w1/wire.ko:

可以看到w1-gpio.ko和w1_therm.ko依赖wire.ko.
wire.ko不依赖其他的模块.

3.加载模块

我这边暂时使用手动加载的方式,不更新模块了。

root@imx6ulevk:~# insmod /lib/modules/4.1.15-2.1.0+g30278ab/kernel/drivers/w1/wire.ko
Driver for 1-wire Dallas network protocol.
root@imx6ulevk:~# insmod /lib/modules/4.1.15-2.1.0+g30278ab/kernel/drivers/w1/masters/w1-gpio.ko
root@imx6ulevk:~# lsmod
Module Size Used by
w1_gpio 3113 0
wire 28158 1 w1_gpio
root@imx6ulevk:/sys/bus/w1# ls
devices drivers drivers_autoprobe drivers_probe uevent

device下没有文件。应该是DTS里没有定义IO的原因。

4.根据驱动修改dts

查找驱动要查找的节点名称

wujun@wj-vBox:~/freescale/linux-imx/drivers/w1$ grep -rn “compatible” .
./masters/w1-gpio.c:72: { .compatible = “w1-gpio” },

新增文件arch/arm/boot/dts/imx6ul-14×14-evk-w1.dts
#include “imx6ul-14×14-evk.dts”
/ {
onewire@0 {
compatible = “w1-gpio”;
gpios = <&gpio1 0 GPIO_ACTIVE_HIGH>;
linux,open-drain;
pinctrl-names = “default”;
pinctrl-0 = <&pinctrl_onewire>;
status = “okay”;
};
};

修改文件arch/arm/boot/dts/imx6ul-14×14-evk.dts

pinctrl_onewire: onewire@0 {
fsl,pins = <
MX6UL_PAD_GPIO1_IO00__GPIO1_IO00 0x4001b8b0

;
};

重新编译内核,拷贝出编译结果,实际上可以只编译dtbs.

wujun@wj-vBox:~/freescale/linux-imx$ cp arch/arm/boot/zImage ~/share-doc/
wujun@wj-vBox:~/freescale/linux-imx$ cp arch/arm/boot/dts/imx6ul-14×14-evk-w1.dtb ~/share-doc/

5.uboot下载内核

tftp 0x81000000 zImage;tftp 0x81A00000 imx6ul-14×14-evk-w1.dtb;bootz 0x81000000 – 0x81A00000;

上传模块到文件系统
root@imx6ulevk:/lib/modules/4.1.15-2.1.0+g30278ab/kernel/drivers/w1# ls
masters slaves wire.ko

6.加载模块


root@imx6ulevk:~# insmod /lib/modules/4.1.15-2.1.0+g30278ab/kernel/drivers/w1/wire.ko
Driver for 1-wire Dallas network protocol.
root@imx6ulevk:~# insmod /lib/modules/4.1.15-2.1.0+g30278ab/kernel/drivers/w1/masters/w1-gpio.ko
root@imx6ulevk:~# insmod /lib/modules/4.1.15-2.1.0+g30278ab/kernel/drivers/w1/slaves/w1_therm.ko
root@imx6ulevk:~# lsmod
Module Size Used by
w1_therm 3493 0
w1_gpio 3113 0
wire 28158 2 w1_gpio,w1_therm

查看内核log
[ 42.363031] Driver for 1-wire Dallas network protocol.
[ 49.544609] w1_master_driver w1_bus_master1: Family 28 for 28.04170349c8ff.20 is not registered.
[ 49.621696] ci_hdrc ci_hdrc.0: there is a vbus glitch
查看设备
root@imx6ulevk:~# ls -l /sys/bus/w1/devices/
total 0
lrwxrwxrwx 1 root root 0 Jan 1 00:09 w1_bus_master1 -> ../../../devices/w1_bus_master1

接入DS18B20后可以看到有个新的设备
root@imx6ulevk:~# ls /sys/bus/w1/devices/
28-04170349c8ff w1_bus_master1

7.查看温度


root@imx6ulevk:~# cat /sys/bus/w1/devices/28-04170349c8ff/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

8.用脚本读取温度

root@imx6ulevk:~/rd_temp# ./rd_temp.sh
e1 01 4b 46 7f ff 0c 10 c5 ; 01-01-1970-00:15:15 ; 30.062
e1 01 4b 46 7f ff 0c 10 c5 ; 01-01-1970-00:15:18 ; 30.062
e0 01 4b 46 7f ff 0c 10 86 ; 01-01-1970-00:15:22 ; 30.000
e0 01 4b 46 7f ff 0c 10 86 ; 01-01-1970-00:15:26 ; 30.000
df 01 4b 46 7f ff 0c 10 80 ; 01-01-1970-00:15:30 ; 29.937
df 01 4b 46 7f ff 0c 10 80 ; 01-01-1970-00:15:34 ; 29.937
de 01 4b 46 7f ff 0c 10 c3 ; 01-01-1970-00:15:37 ; 29.937
de 01 4b 46 7f ff 0c 10 c3 ; 01-01-1970-00:15:41 ; 29.875

imx6ul linux读取DS18B20温度相关推荐

  1. STC15F2K60S2读取DS18B20温度串口显示

    为方便大家调试,特附该程序的项目下载地址 STC15F2K60S2读取DS18B20温度实例下载地址 //************************** //程序说明:stc15f2k60s2采 ...

  2. ATMEGA16读取DS18B20温度,1602显示,并用proteus仿真,成功。

    ATMEGA16单片机读取DS18B20的温度数据,用lcd1602显示,并用proteus实现仿真. 实现温度的实时读取,程序中设定温度的上下限,当温度超限时报警,用led小灯进行 指示. 开发环境 ...

  3. 华大单片机HC32L136J8TA读取DS18B20温度(源码+时钟配置)

    免费的C语言和linuxPDF文档:传送门 有一点C语言基础和华大单片机开发经验,应该就能看得懂就不多介绍了,有疑问可以留言,看到就回了; 关于协议具体解析:传送门@不脱发的程序猿 注(2021-05 ...

  4. 树莓派3 读取DS18B20 温度

    突然想玩一玩那一块闲置了N久的树莓派3B. 买的时候就介绍说这个是做物联网等东西的神器,于是我就想,第一个还是把现有的DS18B20温度传感器的数值读回来吧.搞了一晚上都没有找到合适的答案,于是一早G ...

  5. STM32读取DS18B20温度,并在OLED上显示

    部分代码来源于网络,侵权删 本文使用硬件:STM32F103C8T6最小系统板.IIC协议0.96寸OLED屏幕显示.DS18B20传感器 实现功能:在OLED上显示出DS18B20采集到的温度,精确 ...

  6. STM32入门开发: 编写DS18B20温度传感器驱动(读取环境温度、支持级联)

    一.环境介绍 编程软件: keil5 操作系统: win10 MCU型号: STM32F103C8T6 STM32编程方式: 寄存器开发 (方便程序移植到其他单片机) 温度传感器: DS1820 DS ...

  7. 基于wemos d1开发版读取 DS18B20 传感器的温度及-127度问题

    在使用wemos的过程中,发现对于DS18B20的文章很少,大多数都是Arduino板的文章,虽然代码通用.但是还是有一些坑的.在这里就不讨论代码了,主要记录一下那几点坑及和Arduino板的一些区别 ...

  8. Arduino 读取 DS18B20 通过315/433 收发温度

    描述等在论坛 https://www.mydigit.cn/forum.php?mod=viewthread&tid=295676 发送端:arduino uno + DS18B20 + 31 ...

  9. ESP8266_RTOS_SDK v3.x 读DS18B20温度数据

    陈拓 2021/05/05-2021/05/05 1. 概述 在本文中我们使用ESP8266_RTOS_SDK 3.x读取DS18B20的数据. 开发环境: Win10 Linux子系统Ubuntu ...

最新文章

  1. C++的 STL堆 实现获取中位数
  2. 音乐网站购买服务器,怎么样去做一个音乐网站
  3. 在NOILINUX下的简易VIM配置
  4. C++构造函数调用虚函数的后果
  5. 准备写个nhibernate的学习笔记
  6. 大数据领域的专精特新“小巨人”中科闻歌
  7. 携带token的ajax请求方法封装
  8. 上传jar到本地仓库
  9. java的Random类
  10. redis的zset类型(有序集合)
  11. php中get结合mysql_php中,$_GET中的数值能被mySQL读到么?
  12. 修改 “嗨加游-Prefix.pch” 或者 “嗨加游-Info.plist ” 方法
  13. 【Spring】bean的作用域
  14. linux上容器端口映射,MacOS下的docker端口映射
  15. 机器学习--python代码实现基于Fisher的线性判别(鸢尾花数据集的分类)
  16. 1x pcie 速度_usb 3.0 速度 pciex1 pci 速度 各总线的速度
  17. [状压dp][BZOJ3717][PA2014]Pakowanie
  18. 【操作系统原理-陈渝老师】第七章 进程与线程
  19. 【裸SPFA】星门跳跃
  20. 歌词欣赏《一程山水一程歌》

热门文章

  1. 2021腾讯春季校招面经
  2. linux su命令_Linux Su命令示例教程
  3. BZOJ3521: [Poi2014]Salad Bar
  4. FPGA:程序的固化和下载(Vivado为例)
  5. 收集一些感觉不错的旅游圣地吧
  6. Vant- Dialog按钮确认和取消事件(配合van-swithc)
  7. 算法与数据结构1800题 之栈和队列 (一)
  8. Ubuntu16.04 U盘安装Ubuntu16.04制作 光盘刻录 安装与简介
  9. python云盘搭建教程_超简单!基于Python搭建个人“云盘”,目前最好用的个人云盘...
  10. ddr2是几代内存_教你区分DDR1 DDR2 DDR3内存条的方法