基于ARM9+Linux的DS18B20驱动程序设计
如果是1,则向总线发送一个上升沿,保持高电平;如果是0,则保持总线低电平不变;
④延时60 ms,设总线为高电平,再延时15 ms;
⑤循环操作步骤②~④;
⑥设总线为高电平。
(3)读操作流程
①设循环次数为8;
②设总线为输出,向总线发送一个下降沿,保持低电平,并延时1 ms;
③向总线发送一个上升沿,并设为输入;
④读总线状态,并保存为1位,并延时60 ms;
⑤循环操作步骤②~④,读取1个字节数据。
(4)温度读写过程
①循环判断DS18B20直到复位,延时120ms;
②写入CCH命令,跳过读序列号过程;
③写入44H命令,开始温度转换,延时5 ms;
④循环判断DS18B20直到复位,延时200 ms;
⑤写入CCH命令,跳过读序列号过程;
⑥写入BEH命令,读取寄存器;
⑦读温度整数部分;
⑧读温度小数部分。
(5)驱动程序编写
选定S3C2440一个GPIO引脚作为连接DS18B20的数据线,经过查电路图和S3C2440的芯片手册,选择GPF3为连接引脚;
主要对GPF的控制寄存器GPFCON和数据寄存器GPFDAT进行操作,GPF3主要对应GPFCON第6位和第7位,以及GPFDAT的第3位进行操作;对GPFCON[7:6]设00为输人,设01为输出;GPFDAT[3]设为输入时,相应的位即为引脚的状态,设为输出则可以对引脚进行置1和置0操作;
结合S3C2440的寄存器GPFCON和GPFDAT,以及DS18B20时序,可以利用C语言编写Linux下驱动程序,本驱动程序采用实现read接口函数的字符设备驱动。
3 部分代码
最后将data通过read接口函数发送到用户层——copy_to_user(buf,data,2),即将8位整数和8位小数部分送到用户层,完成一次数据读取过程。
4 系统运行与测试
加载驱动后,通过用户层调用驱动程序,图4为通过串口调试测试结果。
结语
完成了基于ARM9和Linux2.6.30的DS18B20驱动程序编写,实现了温度数据的采集以及传输。以ARM9为平台,基于Linux2.6.30开发DS18B20的驱动程序,以模块的形式加载到内核,最后通过应用层调用驱动,获得温度数据。
linux操作系统文章专题:linux操作系统详解(linux不再难懂)
- REDIce-Linux--灵活的实时Linux内核(11-12)
- linux文件系统基础(02-09)
- Linux标准趋向统一(11-12)
- linux基础技术(02-09)
- LINUX的目录树(02-09)
- 在Windows下启动Linux(02-09)