首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >温度传感器 介绍以及驱动实现原理

温度传感器 介绍以及驱动实现原理

原创
作者头像
菜刀兔
修改2019-09-19 14:30:23
1.2K0
修改2019-09-19 14:30:23
举报
文章被收录于专栏:菜菜小屋菜菜小屋

以TMP102为例

1.厂商:

德州仪器公司

2.特点:

两种运行模式,12位精度/13位精度

精确度达0.5℃,芯片读到的值的精确度是0.0625℃

兼容SUMBus和I2C。

3.常见总线协议

(1)SPI:Serial Peripheral Interface

4条线:串行时钟线(SCLK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI、低电平有效的从机选择线NSS。

在CPU和外围低速器件之间进行同步串行数据传输,全双工通信,数据传输速度总体来说比I2C总线要快,速度可达到几Mbps。

(2)I2C:

2条线:SDA(串行数据线)、SCL(串行时钟线)

高效、简单

4.TMP102寄存器介绍

指针寄存器(Pointer Register)

配置寄存器(Configuration Register)

温度寄存器(Temperature Register)

低温阈值寄存器(T LOW Register)

高温阈值寄存器(T HIGH Register)

3.驱动实现原理

(1)结构体创建

sensor_private_data结构体:用于上报数据

misc设备结构体:用于常见ioctl

(2)注册

我们采用i2c协议,所以驱动类型为i2c_driver,注册的时候初始化结构体和芯片寄存器

TMP102芯片寄存器初始化过程如下:

读配置寄存器;写配置寄存器,将{0x70,0xA0}写入配置寄存器,开启温度转化功能;读配置寄存器;若读取成功,则初始化结束。

(3)i2c传输

寄存器读写通过I2C协议,需定义一个i2c_msg数组,并填充这个数组的地址,buffer等内容,通过i2c_transfer将这个msgs数组转发出去。

(4)上报数据

从寄存器中读到有效的数据

然后进行处理

最后直接使用input子系统中给出的标准接口input_report_abs把数据上报到input子系统中。

对于TMP102芯片而言,读取的数据格式如表所示。数据占了两个字节,第一个字节表示高八位的,第二个字节仅高四位为有效值,因此需要上报的数值应该经过x = (buffer[0]<<8|buffer[1])>>4处理以后在进行上报。

Temperature第一个寄存器

D7

D6

D5

D4

D3

D2

D1

D0

T11

T10

T9

T8

T7

T6

T5

T4

Temperature第二个寄存器

D7

D6

D5

D4

D3

D2

D1

D0

T3

T2

T1

T0

0

0

0

0

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档