S3C2440 温度传感器ds18b20的驱动编写与测试

本文介绍了如何在S3C2440上编写和测试DS18B20温度传感器驱动。首先,通过Linux内核3.0自带的Dallas 1-wire设备驱动进行移植,验证硬件的正常工作。接着,详细说明了在mach-smdk2440.c中添加DS18B20支持的步骤,包括配置内核和解决GPIO端口复用导致的警告。最后,对比了驱动代码中操纵GPIO管脚的两种方式,并总结了驱动编写过程中的经验教训。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ds18b20的详细信息百度百科都有比较详细的介绍:

http://www.baidu.com/link?url=tgDW0RZumyv2JQbC7ohrnKj_jtFZmqkrnJd7vp3V24KCiG8bkOHqD7vRoQev3OjBPFgIGUvUyVpfdtgSzJUwm_&wd=&eqid=cb79eb5b0000da5a0000000555e061f4

再有就是特别感谢这位提供datasheet时序的博主:http://www.cnblogs.com/wangyuezhuiyi/archive/2012/10/12/2721839.html

=================================================================================================

因为Linux内核3.0自带Dallas 1-wires设备驱动,路径为:drivers/w1,所以在写驱动之前我首先进行了内核自带的单总线设备通用驱动移植(其实主要原因是温度传感器是我自己刚刚焊接上去的,想确认下其能否正常工作);此类驱动为Master/Slave模式:Master目录下为主控制器驱动,我们用到的是w1-gpio.c;Slave目录下是从设备驱动,我们使用的DS18B20属于温度传感器,所以使用w1_therm.c这个驱动。w1-gpio.c是单总线的IO操作方法,用于模拟单总线时序;w1_therm.c是DS18B20的内部操作方法(读写寄存器),和IO时序无关;我们可以将驱动结构看成是将“w1_therm”挂接到“w1-gpio”总线上,由w1-gpio控制w1_therm工作

=================================================================================================

一、在mach-smdk2440.c中添加对设备DS18B20的支持:

加入w1-gpio.h头文件,以使用w1_gpio_platform_data结构体:
#include <linux/w1-gpio.h>

smdk2440_devices[ ]结构体中加入:
&s3c_ds18b20_device,

构建DS18B20设备的平台数据结构:

#if 1 
/* DS1820B add by Handy 2015.8.17*/
static void w1_enable_external_pullup(int enable)
{
    if(enable)
        s3c_gpio_setpull(S3C2410_GPG(0), S3C_GPIO_PULL_UP);
    else
        s3c_gpio_setpull(S3C2410_GPG(0), S3C_GPIO_PULL_NONE);
}


static struct w1_gpio_platform_data ds18b20_w1_gpio = {
    .pin = S3C2410_GPG(0),
    .is_open_drain = 0,
    .enable_external_pullup = w1_enable_external_pullup,
};


static struct platform_device s3c_ds18b20_device ={
    .name     = "w1-gpio",
    .id       = -1,
    .dev      = {
        .platform_data  = &ds18b20_w1_gpio,
    },
};
#endif
说明:设备名称是“w1-gpio”,这个和w1-gpio.c驱动中的驱动名称一致,才能注册这个设备驱动。通过FL2440开发板底板原理图可以看到只用到了GPG(0)这个管脚。


好了我们接下来配置内核,支持W1-gpio和ds18b20驱动:


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值