[嵌入式Linux驱动]S5PV210的DHT11温湿度传感器Linux驱动

智能家居温湿度传感器驱动程序:
1. 本驱动使用platform模型进行设计,分为Temp_And_Humidity_device和Temp_And_Humidity_driver两个文件

2. 注册杂项设备(misc),主设备号固定是10(misc),从设备号由系统自动分配,加载成功后使用lsmod可以看到:
    Temp_And_Humidity_device
    Temp_And_Humidity_driver

3. 加载driver驱动模块之后自动对gpio进行初始化,初始化成功会输出:
 [   36.605575] entering Temp_And_Humidity_driver_init
 [   36.605702] entering Temp_And_Humidity_dirver_probe
 [   36.609147] Temp_And_Humidity_dirver_probe: gpio init finished!!!    //GPIO初始化成功
 
4. 本驱动注册成功后生成 /dev/smarthome_temphumi_sensor_control 节点

5. 对 smarthome_lightcontrol 设备节点的操作主要有:
   1)打开操作open
   2)关闭操作close
   3)读操作read,操作方法:
  
 声明一个结构体:  
 struct DHT11_Data{
         unsigned short humi_int;  //8bit湿度整数数据
         unsigned short humi_float;  //8bit湿度小数数据
         unsigned short temp_int;  //8bit温度整数数据
         unsigned short temp_float;  //8bit温度小数数据
         unsigned short check_sum;  //8bit校验和
  
  //校验和 = (8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据)(取低8位)
  //驱动程序里面已对数据进行校验处理,处理结果会以错误类型代码的形式发送给用户空间应用程序。
 
        unsigned short error_code;  //错误类型代码
 };

 然后使用read函数读取驱动,将结构体的地址作为缓冲区的首地址。
 
 读取完成后,请先对结构体里面的错误代码进行检查。以下是错误代码表:
 
 #define DHT_NO_ERROR      0  //没有错误,可以直接使用结构体里面的数据
 #define DHT_ERROR_NO_RESPOND    1  //温湿度传感器没有响应,数据异常
 #define DHT_ERROR_RESPOND_TIMEOUT   2  //温湿度传感器响应超时,数据异常
 #define DHT_ERROR_AFTERRESPOND_TIMEOUT  3  //温湿度传感器后响应超时,数据异常
 #define DHT_ERROR_PROBEBIT_TIMEOUT   4  //温湿度传感器前导信号异常,数据异常
 #define DHT_ERROR_DATABIT_TIMEOUT   5  //温湿度传感器数值传送异常,数据异常
 #define DHT_ERROR_CHECK_SUM_FAIL   10  //温湿度传感器数据校验失败,数据异常
 
 请不要在数据异常情况下使用结构体的数据。
 
 读操作所用总时间约为2秒(由传感器本身决定)。由于数据有时会波动,请酌情考虑在应用程序中使用算法去抖。
 
 其它详见例程。
 
6. 在打开驱动文件后,会对设备驱动使用互斥锁进行上锁操作。避免其他进程或线程同时访问驱动文件,打乱通信时序。直到关闭驱动文件才解锁。

7. 重构了整个室内机驱动的框架
         模块单独调试时请将driver文件里面的SINGLE_MODULE宏修改为1(独立申请内存)
         整体调试时请将driver文件里面的SINGLE_MODULE宏修改为0(内存由框架代码统一申请)
 
8. 开启模块调试信息请将driver文件里面的DEBUG宏修改为1,关闭设为0。

9. 温湿度传感器测量范围(以25摄氏度环境下测量为准)
   湿度:20%RH  ---  90%RH
   温度:0℃  ---  50℃




DHT11工作时序图



Temp_And_Humidity_device.c

#include <asm/uaccess.h>

#include <linux/kernel.h>
#include <linux/module.h>

#include <linux/platform_device.h>
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值