微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > MCU和DSP > DS1621在Linux下的IIC接口驱动设计

DS1621在Linux下的IIC接口驱动设计

时间:03-24 来源:互联网 点击:
  摘要: 针对目前IIC总线以及具有IIC接口的芯片在嵌入式系统中的广泛应用,设计了一种基于ARM9平台S3C2440的, Linux操作系统下的IIC接口设备驱动程序。通过IIC总线协议,驱动程序实现了在内核状态下对数字温度传感器DS1621的配置和获取其温度信息,并将其传回用户空间并打印显示。实验结果表明,工作时典型数据更新时间为1 s,精度为小数点后一位。且利用多片DS1621可扩展一个低电压、低功耗的多点数字测温系统,在嵌入式设备的温度监测方面将有着广泛应用。
  IIC总线作为一种申行传输总线,其使用连线少,结构简单,是一种应用广泛的高性能总线方式。而Linux作为一个源代码公开、易于裁剪的操作系统,非常适合于嵌入式系统的应用。Linux操作系统下的嵌入式设备驱动,通过IIC总线,实现ARM与外围模块间的协同工作,有着广泛的应用。
  1 IIC总线协议以及选用芯片功能
  1.1 IIC总线的特点以及工作协议
  IIC串行总线由两根信号线组成:一根双向传输的数据线SDA;另一根是时钟线SCL。IIC总线通过简单的结构即能实现半双工的同步数据传输。
  IIC总线采用一主多从的运行机制,在同一时间只能有一台设备作为主设备,总线的运行由主设备控制,主设备控制数据的传送起始信号、发出时钟信号、从机地址信号、数据信号,由接收数据方在传送结束时发出应答信号,每个IIC总线上的设备都有一个唯一的地址,和主设备进行通信。
  IIC总线时序如图1所示,在IIC总线使用过程中,传输开始和停止的条件如下:当SCL持续为“1”而SDA从“1”变为“0”时表示将要开始发送数据;而当SCL持续为“1”而SDA从“0”变为“1”表示停止发送数据。其中SDA线上的数据在时钟线SCL为“1”期间必须是稳定的,只有当SCL线上的时钟信号为低时数据线上的状态才能改变。

  
图1 IIC总线时序图


  SDA线上的每个字节必须为8位,每次传输的字节数不限制,每发送1个字节都有1个ACK应答位。
  1.2 选用ARM9芯片功能介绍
  MCU采用某公司的S3C2440芯片,S3C2440A是某公司的一款基于ARM920T内核的16/32位RISC嵌入式微处理器,主要面向手持设备以及高性价比、低功耗的应用,且集成了1个IIC总线控制器,能够方便的与带有IIC接口外设的通信。
  1.3 数字温度传感器DS1621的芯片功能介绍
  DS1621是DALLAS公司生产的一种功能强大的数字式温度传感器和恒温控制器。接口与IIC总线兼容,一片控制器控制可控制多达8片的DS1621,工作电压为2.7~5.5 V,适用于低功耗应用系统。
  DS1621可作为恒温控制器单独使用,也可通过2线接口在ARM的控制下完成温度的测量及计算。可以通过寄存器设置调整。DS1621无需外围元件即可测量温度,结果以9位数字量(两字节)给出,测量范围为-55~+155℃,精度为0.5℃:典型转换时间为1 s。
  2 电路结构设计
  设计采用了S3C2440作为电路中的主设备,控制IIC总线上从器件,由主设备控制IIC总线上的时钟信号以及各种数据信号。采用2片DS16 21作为IIC总线上的从设备,由于DS1621具备IIC总线接口,可直接与S3C2440的SDA和SCL脚相接,通过对DS1621的A2、A1、A0脚(5、6、7脚)组合输入不同的片选信号,可以确定其在IIC总线下工作的从机地址。因为IIC从设备一般都是MOS工艺,所以总线都有上拉电阻。工作时,通过IIC总线将DS1621设置为温度传感器功能和逐次获取数据的工作方式,电路的原理图设计如图2所示。

  
图2 电路的原理图


  3 驱动程序设计
  在Linux下的驱动程序将所有设备看作文件,驱动程序则为应用程序和硬件设备之间提供了操作访问的接口,使应用程序可以像操作普通文件一样对硬件设备操作访问。Linux内核把驱动程序划分为3种类型:字符设备、块设备和网络设备。其中,字符设备和块设备可以像文件一样被访问。DS1621的IIC驱动属于字符设备。
  开始工作时,DS1621的工作方式是由片上的设置/状态寄存器来决定的:1)当通过IIC总线向DS1621写入读写设置命令ACh之后ARM发出的一字节将设置DS1621的工作方式,然后发出温度转换命令EEh,读温度命令AAh;2)DONE比特位表示工作在测温功能时,温度数据已转换完毕,保存在非易失性寄存器中;3)THF、TLF是DS1621作为恒温器时的状态标识位,当超过TH预置值或低于TL预置值时被置为1;4)1SHOT为一次模式位,该位为1时每次收到温度转换命令就执行一次温度转换,为0时将执行连续温度转换。DS1621寄存器配置如图3所示。

  
图3 DS1621寄存器配置


  在调试过程中发现,若使用连续转换模式时,在极少数情况下出现数据明显不正确,故采用了逐次读取数据模式,即逐次配置DS1621的温度转换,逐次获取数据,并每次判断DS1621工作状态、数据范围和精度,从而获得了更加稳定、精确的实验结果。
  驱动程序的功能包括:初始化以及释放硬件设备;S3C2440通过IIC总线对DS1621的控制寄存器进行配置;S3C2440读取DS1621寄存器内的温度数据,通过接口函数,将数据从内核空间发送到用户空间。驱动程序设计流程图如图4所示。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top