imx6ul linux读取DS18B20温度
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温度相关推荐
- STC15F2K60S2读取DS18B20温度串口显示
为方便大家调试,特附该程序的项目下载地址 STC15F2K60S2读取DS18B20温度实例下载地址 //************************** //程序说明:stc15f2k60s2采 ...
- ATMEGA16读取DS18B20温度,1602显示,并用proteus仿真,成功。
ATMEGA16单片机读取DS18B20的温度数据,用lcd1602显示,并用proteus实现仿真. 实现温度的实时读取,程序中设定温度的上下限,当温度超限时报警,用led小灯进行 指示. 开发环境 ...
- 华大单片机HC32L136J8TA读取DS18B20温度(源码+时钟配置)
免费的C语言和linuxPDF文档:传送门 有一点C语言基础和华大单片机开发经验,应该就能看得懂就不多介绍了,有疑问可以留言,看到就回了; 关于协议具体解析:传送门@不脱发的程序猿 注(2021-05 ...
- 树莓派3 读取DS18B20 温度
突然想玩一玩那一块闲置了N久的树莓派3B. 买的时候就介绍说这个是做物联网等东西的神器,于是我就想,第一个还是把现有的DS18B20温度传感器的数值读回来吧.搞了一晚上都没有找到合适的答案,于是一早G ...
- STM32读取DS18B20温度,并在OLED上显示
部分代码来源于网络,侵权删 本文使用硬件:STM32F103C8T6最小系统板.IIC协议0.96寸OLED屏幕显示.DS18B20传感器 实现功能:在OLED上显示出DS18B20采集到的温度,精确 ...
- STM32入门开发: 编写DS18B20温度传感器驱动(读取环境温度、支持级联)
一.环境介绍 编程软件: keil5 操作系统: win10 MCU型号: STM32F103C8T6 STM32编程方式: 寄存器开发 (方便程序移植到其他单片机) 温度传感器: DS1820 DS ...
- 基于wemos d1开发版读取 DS18B20 传感器的温度及-127度问题
在使用wemos的过程中,发现对于DS18B20的文章很少,大多数都是Arduino板的文章,虽然代码通用.但是还是有一些坑的.在这里就不讨论代码了,主要记录一下那几点坑及和Arduino板的一些区别 ...
- Arduino 读取 DS18B20 通过315/433 收发温度
描述等在论坛 https://www.mydigit.cn/forum.php?mod=viewthread&tid=295676 发送端:arduino uno + DS18B20 + 31 ...
- ESP8266_RTOS_SDK v3.x 读DS18B20温度数据
陈拓 2021/05/05-2021/05/05 1. 概述 在本文中我们使用ESP8266_RTOS_SDK 3.x读取DS18B20的数据. 开发环境: Win10 Linux子系统Ubuntu ...
最新文章
- C++的 STL堆 实现获取中位数
- 音乐网站购买服务器,怎么样去做一个音乐网站
- 在NOILINUX下的简易VIM配置
- C++构造函数调用虚函数的后果
- 准备写个nhibernate的学习笔记
- 大数据领域的专精特新“小巨人”中科闻歌
- 携带token的ajax请求方法封装
- 上传jar到本地仓库
- java的Random类
- redis的zset类型(有序集合)
- php中get结合mysql_php中,$_GET中的数值能被mySQL读到么?
- 修改 “嗨加游-Prefix.pch” 或者 “嗨加游-Info.plist ” 方法
- 【Spring】bean的作用域
- linux上容器端口映射,MacOS下的docker端口映射
- 机器学习--python代码实现基于Fisher的线性判别(鸢尾花数据集的分类)
- 1x pcie 速度_usb 3.0 速度 pciex1 pci 速度 各总线的速度
- [状压dp][BZOJ3717][PA2014]Pakowanie
- 【操作系统原理-陈渝老师】第七章 进程与线程
- 【裸SPFA】星门跳跃
- 歌词欣赏《一程山水一程歌》
热门文章
- 2021腾讯春季校招面经
- linux su命令_Linux Su命令示例教程
- BZOJ3521: [Poi2014]Salad Bar
- FPGA:程序的固化和下载(Vivado为例)
- 收集一些感觉不错的旅游圣地吧
- Vant- Dialog按钮确认和取消事件(配合van-swithc)
- 算法与数据结构1800题 之栈和队列 (一)
- Ubuntu16.04 U盘安装Ubuntu16.04制作 光盘刻录 安装与简介
- python云盘搭建教程_超简单!基于Python搭建个人“云盘”,目前最好用的个人云盘...
- ddr2是几代内存_教你区分DDR1 DDR2 DDR3内存条的方法