江西理工大学应用科学学院
嵌入式系统开发技术
课程设计
专 业: 电子信息工程
班 级: 电信121
学 号: 08060312109
姓 名: 贺佳
设计题目:Linux温度传感器驱动程序
2015年11月24日
姓 名 | 贺佳 | 班 级 | 电信121 | 学 号 | 08060312109 |
课设题目 | 基于嵌入式Linux温湿度传感器驱动程序 | 指导教师 | 王苏敏 | ||
评分项目 | 满分分值 | 得分 | |||
设计文档(30分) | 文档格式 | 封面 | 2 | ||
页面布局 | 4 | ||||
目录格式 | 3 | ||||
图表质量 | 2 | ||||
页眉页脚 | 2 | ||||
文档内容 | 内容完整性 | 6 | |||
内容逻辑性 | 5 | ||||
内容正确性 | 6 | ||||
程序代码(30分) | 程序功能 | 15 | |||
编程规范 | 7 | ||||
编程文档 | 8 | ||||
答辩(20分) | 课题陈述 | 7 | |||
问题答辩 | 10 | ||||
是否超时 | 3 | ||||
考勤(20分) | 20 | ||||
总评成绩 | |||||
指导教师评语 | 签名: 年 月 日 | ||||
教研室意见 | 签名: 年 月 日 | ||||
基于嵌入式Linux温湿度传感器驱动程序
2.需求分析
在工业控制和工业生产领域中, 传感器对于工业控制和生产环境的监控作用不言而喻。传统的传感器监控系统大都采用单片机控制, 其监控的准确度和实时性不太令人满意。本文寻到一套切实可行的传感器设计方案,其利用温湿度传感器芯片,,基于PXA310硬件平台和操作系统,能有效监控现场温湿度Linux变化。在周围环境发生变化, 不能满足工作要求时,可以获取监控数据并提出预警, 提高生产和工作环境检测的可靠性及实时性。
温度设计传感器电路设计
比较了一些传感器应用设计方案后 ,选用SHTl O 芯片为嵌入式温湿度传感器的 printf输出格式linux核心部件。它外围电路简 便,相比其他传感器芯片(DSl 8820)有其独到优势[1]。 STHlO 每秒可进行 3 次温湿度测量 ,数据精度 14 bit 并且工作稳定。其测量采用 CMOSens 专利[2] ,所以在 测量效率和精度上要好于 0518820。0518820 采用 单单、线控制方案( l-wire) ,
大约每秒测量一次,9 位数 字式温度数据;只提供温度测量
需求概述
SHTlO 是一款高度集成的温湿度传感器芯片 ,提供全量程标定数字输出 。传感器包括一个电窑 性聚合 体湿度敏感元件和一个用能隙材料制成的温度 敏感元 件,他们与 个 14 位 AI D 转换器以及一个串行接 口电路设计在同一个芯片上面。其通过标定得到校 准 系数以程序形式储存在芯片 OTP 内存中,并利用两 线制串行接口与 内部电压调整 ,使外国系统集成变得 快速而简单。。其在生产环境检测要 求严格时,就显得精度和功能有些不足.SHTl O 芯片 电源 3.3V 。传感器上 电后,等待 门ms 来完成 “休眠” 状态。通信复位和启动传输命 令后,发送 组测量命令( '00000101 ’ 表示相对湿 度 RH, '000000 门’ 表示温度 T) ,控制器要等待测 量结束。这个过程需要大约 ll/5 5 / 210ms ,分别对 应 8/12 /14bit 测量。SHTlO 通过下拉 DATA 至低 电平,表示测量结束。控制器触发 SCK 时钟前,必须等待这个 “数据备妥” 信号才能将测量数据正确读 入。 测量和通讯结束后 ,SHTlO 自动转入休眠模式。数据 传送采用两线制串行接 口(与 12( 接口不兼容)。
3.总体设计
SHTl O 采用 LCC 封装,其DATA 和 SCK 号| 脚分
别连接到 PXA310 的 GP1078 和 GP.气 79。PXA3 lO
通过模拟时序方式实现对外 国温湿度传感器的控制和 数据读写操作。由于 SHTl O 对于温湿度灵敏度很高 ,在系统集成时应尽量远离发热源(如 MCU、LCD 等), 否则测量结果会有所偏离 ;为 SHTlO 布线时,周围应 尽量铺地减少周围器件对其 的干扰。SHTlO 电路原理 图如图 1 所示。
4
”
-
--
t
-
JV
、
i
F
『 『
·
G
图 1 SHTl O 电路原理图Linux温湿度传感器驱动程序 实现
单片机控制的传感器设备中 ,单片机通常是单线 程运行。在进行温湿度测量时 ,单片机需要等待测试 结果返回,其方法阻碍了其他测试和操作的罔步执行。 在嵌入式 Lim』X 系统中,
驱动程序将测试任务送入任 务队列,交出CPU 控制权,继而进行其他实时任务运 行,待内核空闲再进λ任务队列完成传感器的测量 , 以此提高系统执行的效率和实时性。
Linux 温湿度传感器设备加载
温湿度传感器使用Linux 内核的 Miscdevice 数据结构在驱动程序初始化时将设备注册到内核 。 Miscdevice 是字符设备 ,其主设备号为 10,设备及 设备接口函数定义如下所示。
static struct file_operations shtl O_fops = { owner:THIS_MODULE, // 所 属 的 设 备 模块
read: shtl O_ read, //数据读取操作
static struct miscdevice my_shtl O ={
.minor=4, //设备号为4
.name="SHTl O" //设备名称为SHTl O
.fops=&shtl O_fops, //设备可用相关操作
驱动程序加载设备时将调用
内核的注册函数。在Linux2.4 和 2.6 内核申,几乎所有 Linux 驱动程序都依靠如下函数加载模块.
static int init shtl
O_init(void)
misc_register(&my_shtl O); //注册设备SHTl O
return O; //返回成功操作0
驱动程序初始化完成后 ,上层应用程序可以调用 shtl O_fops 中的 shtl O_read 函数进行温湿度的读 取操作。
Linux 温湿度传感器设备操作
进行数据读取前,首先要在驱动程序 甲开辟 4 个 字节的数据空间,用于存放温度和湿度测量值 。这里 定义全局变量数据缓冲区为 unsigned char bu例。
读取 SHTl O 温湿度数据前 ,需要进行端 口初始化 和 SHTlO 复位操作,然后将任务送于任务队列 并阻塞 线程[SJ ,当任务完成返回后再唤醒线 程,将读到数据 传递给上层应用程序做进一步处理 。程序流程图和实 现函数如图 2 所示。
内核空间数据送往用户空间处理
图 2 驱动程序流程图
static int measure_ shtl O(u8 checksum,u8 mode)
unsigned char error=O; //设备无应答 ,标识清 O
int i=O; //用来指示数据存放位置
start_trans(); //模拟时序,启动传输
switch(mode) //选择 测 量 方式
case TEMP:error+ =write_ byte (MEASURE_ TEMP);
i= l;break; //测量温度 ,指示存放位置
case HUMl:error+=w「ite_byte(MEASURE_ HUMI);
break; //测量湿度
while(]){ //等待 SHTlO 应答 ,退出
if(read_data0==0) break;
if(i){ //查看 i,存放数据
buf[O]=read_byte(ACK); //将测量温度数据 存放于
buf[l ]=read_byte(ACK); / /buf[O]和 buf[1],并应答
else{
buf[2]=read_byte(ACK); //将测量湿度数据 存放于
buf[3]=read_byte(ACK); / / buf[2]矛日 buf[3]并应答
} //最后读效验 ,无应答
checksum= read_byte(noACK);
return error; //返回错误标识
上 述函数中 start_trans; write_byte; read_data; read_byte 分别利用 PXA310 sl脚模拟时序 完成启动传输、写字节,读一位数据和读字节的操作。
static ssize_t sht lO_read(struct file吁ile,char *buffer,size_t count,loff_t *ppos)
porUnit(); //初始化 PXA310 端口
reset_sht100; //复位 SHTl O
tasklet_schedule(&shtl O_tasklet); //将任务送于任务队列
wait_for_completion(&comp); //阻塞线程 ,等待完成
copy_to_user(buffer, (char *)&buf,sizeof(buf)); //将读到的数据返 回用户
return O; //空间,退出
内 核 tasklet_sched ule() 调 度 执 行 指 定 的tasklet ,在获得运行机会之前 只会调度一次 ,如果在 运 行 时被 调 度 ,则 完 成 后 会 被 再 次 运 行 [6) 0 wait_for_completion ()这个函数进行 个不可打断 的等待,如果有代码调用它 ,并且没有完成这个任务 , 结果会是一个不可杀死的进程 。copy_to_user ()将内 核空间数据传向上层用户空间 ,并让上层测试程序做 进一步处理。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论