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

以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

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

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

编辑于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券