|
1、 在arch/arm/mach-s3c2440/mach-smdk2440.c文件中构建DS18B20设备
添加头文件
#include <linux/w1-gpio.h>
#include <plat/gpio-cfg.h>
构建DS18B20设备的平台数据结构:
/* DS18B20 */
static void w1_enable_external_pullup(int enable)
{
if (enable)
s3c_gpio_setpull(S3C2410_GPG(14), S3C_GPIO_PULL_UP);
else
s3c_gpio_setpull(S3C2410_GPG(14), S3C_GPIO_PULL_NONE);
}
static struct w1_gpio_platform_data ds18b20_w1_gpio = {
.pin = S3C2410_GPG(14),
.is_open_drain = 0,
.enable_external_pullup = w1_enable_external_pullup,
};
static struct platform_device tq2440_ds18b20_device = {
.name = "w1-gpio",
.id = -1,
.dev = {
.platform_data = &ds18b20_w1_gpio,
},
};
在smdk2440_devices[]中加入
&tq2440_ds18b20_device
2、 配置内核支持w1-gpio和ds18b20驱动
Device Drivers --->
{*} Dallas's 1-wire support --->
1-wire Bus Masters --->
<*> GPIO 1-wire busmaster
1- wire Slaves --->
<*> Thermal family implementation
3、 重新编译
[root@tq2440 /]# ls sys/devices/w1\ bus\ master/
28-0000032121a3 w1_master_name
bus w1_master_pointer
driver w1_master_pullup
power w1_master_remove
subsystem w1_master_search
uevent w1_master_slave_count
w1_master_add w1_master_slaves
w1_master_attempts w1_master_timeout
w1_master_max_slave_count
这个目录下有一个以“28-”开头的目录,这个就是你的DS18B20设备的目录,28代表你使用的温度传感器是DS18B20,后面接的一串数字和字母是它的ID号(用来识别不同设备,也是独一无二的)
进入这个目录,里面的w1_slave文件就是它的设备文件:
[root@tq2440 28-0000032121a3]# ls
bus id power uevent
driver name subsystem w1_slave
获取温度值:
查看w1_slave设备文件中的内容,便可得到温度值,执行命令cat w1_slave
[root@tq2440 28-0000032121a3]# cat w1_slave
fe 00 4b 46 7f ff 02 10 8a : crc=8a YES
fe 00 4b 46 7f ff 02 10 8a t=15875
“t=”后面的数字就是温度值,要在千位的后面加上小数点,此时温度为:15.875摄氏度
十八、
|
|