温度传感器 介绍以及驱动实现原理
- 2019 年 10 月 5 日
- 笔记
以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 |