目录
4.14Linux
Itop4412开发板
1、传感器介绍
DS18B20是 DALLAS公司生产的一线式数字温度传感器,具有3引脚TO-92小体积封装形式;温度测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字量方式串行输出;其工作电源既可在远端引入,也可采用寄生电源方式产生;多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。以上特点使DS18B20非常适用于远距离多点温度检测系统。
操作指令:
2、硬件连接
2.1、DS18B20 引脚定义:
① DQ 为数字信号输入/输出端(电压范围:3.0~5.5V);
② GND 为电源地;
③ VDD 为外接供电电源输入端(在寄生电源接线方式时接地)。
由于 iTOP-4412 开发板的引脚输出电压是 1.8V。
2.2、查找底板原理图:
J38 接口我们使用 :
4 号共地引脚,11 号 3.3V 电源引脚。
连接情况为:
4 号引脚接 DS18B20 模块的 GND,11 号接 DS18B20 模块的 VDD。
13号引脚接到 DS18B20 模块的 DQ 引脚。
2.3、找到引脚的名字:
找到XURTS1叫做GPA0_7
3、配置平台文件
在内核源码目录,使用“vi arch/arm/mach-exynos/mach-itop4412.c
”命令打开平台文件。搜索关键词“struct platform_device s3c_device_buzzer_ctl
”找到 buzzer 配置。然后在它的上面添加如下信息
#ifdef CONFIG_DS18B20_CTL
struct platform_device s3c_device_ds18b20_ctl = {
.name = "ds18b20",
.id = -1,
};
#endif
添加完如图:
保存,退出。
再次使用“vi arch/arm/mach-exynos/mach-itop4412.c
”命令打开平台文件。搜索关键词“&s3c_device_buzzer_ctl
”,在这一行上面添加:
#ifdef CONFIG_DS18B20_CTL
&s3c_device_ds18b20_ctl,
#endif
如图:
保存,退出。
使用“vi drivers/char/Kconfig
”命令打开 Kconfig 配置文件。搜索关键词“BUZZER_CTL”,在该段的上面添加如下信息。
config DS18B20_CTL
bool "Enable DS18B20 config"
default y
help
Enable DS18B20 config
如图:
保存,退出。
在内核源码目录使用“cp config_for_linux_scp_elite .config
”命令配置缺省信息。(用户要根据自己板子修改配置命令)
在内核目录下使用“make menuconfig
”命令打开内核配置界面,如下图。
进入到 Device Drivers —>Character devices 目录。如下图。
可以看到 DS18B20 设备已经被选中。
然后保存退出内核配置界面。使用“make zImage
”命令编译内核。如下图。
编译完成后如下图。
然后把编译生成的 zImage (在 arch/arm/boot 目录下)烧写到 iTOP-4412 开发板上,烧写完成后启动开发板。
开发板启动之后,使用命令“ls /sys/devices/platform/
”可以查看到新注册的ds18b20 设备,如下图所示。
设备注册完成。
4、驱动应用程序
当主机需要对多个DS18B20中的某一个进行操作时,主机首先逐个与DS18B20挂接-搜索ROM(FOH),读出其序列号-读ROM(33H),然后发出匹配ROM(55H),紧接着提供64位序列号,之后的操作就是针对DS18B20的了。
如果只有一个DS18B20测温,就不需要搜索ROM、读ROM以及匹配ROM等操作了,只要用跳过ROM(CCH),就可进行如下温度转换(44H)和读取操作(BEH)了。
4.1、驱动程序
了解了上述指令之后,要想编程使用DS18B20的测温功能,还需要进一步知道如何进行初始化以及如何进行指令的发送与温度的接收,这就需要深入理解初始化和读与写的时序图。
相对于之前的编程实践,在对DS18B20进行操作时,对时间的要求比较严格,且单总线协议理解起来相对困难,如果把握不好,往往不能正确实现测温功能。为此,需要深入掌握其时序要求。
所有与DS18B20的通信过程都是以初始化开始,下面首先介绍DS18B20的初始化时序图。
4.1.1、初始化时序:
主机首先发出一个480 ~ 960us
的低电平脉冲(复位),然后释放总线变为高电平,并在随后的480微秒时间内,对总线进行检测,如果有低电平出现说明总线上有器件已做出应答。若无低电平出现一直都是高电平说明总线上无器件应答。
作为从机的DS18B20上电后就一直检测总线上是否有480 ~ 960微秒的低电平出现,如果检测到该复位脉冲则在总线变为高电平后,等待15~60微秒
,之后将总线电平拉低60 ~ 240微秒
(响应存在脉冲),告诉主机本器件已做好准备。若检测不到复位脉冲则一直处于检测等待。
主机将DQ拉成低电平保持最少480us后释放总线,延时15 ~ 60us后的60 ~ 240us时间内检测DQ是否为低电平,再延时240us保持起始时序的完整。
(从主机角度看进行初始化的过程)
unsigned char init_ds(void)//ds18b20复位,返回