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

发布者:532829319hmk最新更新时间:2011-09-28 关键字:DS1621  Linux  IIC接口驱动 手机看文章 扫描二维码
随时随地手机看文章

  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所示。


图4 驱动程序设计流程图

  3.1 设备驱动的主要函数

  对于字符设备,Linux内核对这些操作进行了统一的抽象,把它们定义在结构体file-operation中。通常,字符设备提供给应用程序的是一个流控制接口,主要包括open、release、read、ioctl等。


  3.2 从器件,设备DS1621的初始化代码


  3.3 IIC总线的初始化

  对S3C2440的IIC控制器进行配置时需要用到的寄存器有:IICCON、IICSTAT、IICDS、IICADD。

  IICCON:IIC总线控制寄存器;IICSTAT:IIC总线控制状态寄存器;HCDS:IIC总线接收/发送数据移位寄存器;IICADD:IIC总线地址寄存器。

  1)S3C2440的GPE15为HCSDA,是串行数据线端口,GPE14为IICSCL,是串行时钟线;

  2)将IICCON设置为:0xA7,表示传输过程中ACK应答使能,IIC的工作时钟为:HCCLK=fpclk/512,IlC总线中断使能,数据传输的时钟为:Tx clock=IICCLK/(IICCON[3:O]+1),约为400 k/s;

  3)将IICSTAT置为:0x10,即使用从器件接收数据模式,数据输出/接收使能。


  3.4 主器件从HC总线读数据

  对于DS1621的寄存器配置,当通过IIC读取从器件DS1621的数据时,需要切换数据收发的方向,S3C2440先在主机发送数据模式下,向从器件DS1621发送从地址、DS1621内部寄存器的子地址和写信号位,然后在主机接收数据模式下,再次向从器件发送从地址和读信号位,并将子地址内的数据读回,其读数据操作如图5所示。


图5 IIC总线读数据操作

  其中S为发送开始标志START,W为写信号位,R为读信号位,A为ACK应答信号,RS为重复开始信号REPEATED START,NA为主机收回数据后发送的NACK信号,P为停止信号STOP。


  3.5 主器件向IIC总线写数据


  3.6 S3C2440从DS1621获得温度数据,保存在内核空间并传送到用户空间


  4 驱动的加载以及测试

  应用程序将驱动从内核空间获得的数据保存下来,首先根据传回的DONE比特位判断温度传感器是否正在数据转换的过程中,如果是,则抛弃该数据,并打印数据不可用的信息;如果否,则接下来根据精度位判断小数点后的数据值,并将结果打印出来。


  最后将驱动程序编译成模块,可以动态地加载、卸载设备驱动,不用重新启动系统就能查看驱动程序结果,方便了驱动的编写与调试工作。

  经过动态编译后,得到目标文件iic.o、1621.o以及应用程序1621_iic_test,将文件下载到S3C2440中,通过#insmodiic.o、#insmod 1621.o加载模块,#./1621_iic_test运行测试程序,如图6所示。


图6 运行测试程序并打印信息

  5 结论

  本文以ARM920T内核的S3C2440为MCU与数字温度传感器模块DS1621搭建成多点数字测温电路。MCU通过IIC总线与DS1621进行通信,通过编写linux2.4版本下的IIC驱动程序,完成了S3C2440与带有IIC接口的外围芯片的通信,并实现了DS1621的配置和测温工作,正常工作中DS1621的典型温度转化时间为1 s,数据精度为0.5℃,典型的工作电压和电流值仅为3 V、10μA,具备较高的精度,且自身工作功耗小。通过增加DS1621的使用片数,还可扩展为一个低电压、低功耗的多点数字测温系统,可以广泛地应用在各种嵌入式系统中。驱动程序可使用于其他具有IlC接口的外围芯片的工作,也可将驱动应用于其他具有IIC接口的外围设备通信。


关键字:DS1621  Linux  IIC接口驱动 引用地址:DS1621在Linux下的IIC接口驱动设计

上一篇:DS1621在Linux下的IIC接口驱动设计
下一篇:基于DSP和CAN总线的RTU的设计

推荐阅读最新更新时间:2024-05-02 21:37

基于S3C2440在Linux上实现视频监控系统的FFmpeg编解码设计
引言 随着视频编解码技术、计算机网络技术、数字信号处理技术和嵌入式系统的发展,以嵌入式网络视频服务器为核心的远程视频监控系统开始在市场上崭露头角。该系统把摄像机输出的模拟视频信号通过内置的嵌入式视频编码器直接转换成视频流,通过计算机网络传输出去。嵌入式网络视频服务器具备视频编码处理、网络通信、系统控制等强大功能,直接支持网络视频传输和网络管理,使得监控范围达到前所未有的广度。在远程视频监控系统中,摄像头获取的原始视频流在传输之前需要压缩,而FFmpeg可以将原始视频压缩为H264格式视频流,H264是一种被广泛使用的高精度视频的录制、压缩和发布格式,因此采用FFmpeg来实现。 1、系统方案 系统是在S3C2440平台上运行嵌
[单片机]
基于S3C2440在<font color='red'>Linux</font>上实现视频监控系统的FFmpeg编解码设计
嵌入式数据采集系统中的ADS8364驱动程序设计
1 引言 数据采集系统的工作原理就是将被测对象(外部世界或现场)的各种参量(可以是物理量,也可以是化学量,生物量)通过各种传感元件做适当转换后,再经信号调理、采样、量化、编码、传输等步骤,最后送到服务器进行数据处理和存储记录的过程。用于数据采集的成套设备称为数据采集系统(Data Acquisition System,DAS)。 数据采集系统一般包括传感器、放大器、滤波器、A/D采样转换电路、微处理器等元件。数据采集系统基本组成示意图如图1所示。A/D转换电路在数据采集系统中起着至关重要的作用,它的转换精度和工作可靠度直接关系着整个采集系统的工作性能。由于篇幅有限,本文仅就该数据采集系统中的A/D转换芯片ADS8364的驱动
[单片机]
嵌入式数据采集系统中的ADS8364<font color='red'>驱动</font>程序设计
linux2.6.32.2 mini2440平台移植-- ADC 驱动移植
1.2.1 关于 S3C2440 的 ADC 和触摸屏接口 Linux-2.6.32.2 内核并没有提供支持 S3C2440 的 ADC 驱动程序,因此我们自行设计了一个,这个驱动比较简单,属于字符设备,。在 S3C2440 芯片中,AD 输入和触摸屏接口使用共同的 A/D 转换器,见S3C2440芯片手册第 16 章节,如图。 1.2.2 在内核中添加 ADC 驱动 在 S3C2440 芯片中,AD 输入和触摸屏接口使用共同的 A/D 转换器,因此,ADC 驱动和触摸屏驱动若想共存,就必须解决共享 A/D 转换器 资源这个问 题,因此在 ADC 驱动程序中声明了一个全局的 ADC_LOCK 信号量。 (1)将
[单片机]
<font color='red'>linux</font>2.6.32.2 mini2440平台移植-- ADC <font color='red'>驱动</font>移植
arm linux 启动流程之 进入内核
还是从编译链接生成vmlinux的过程来看吧,由一大堆.o文件链接而成,第一个就是 kernel/arch/arm/kernel/head-armv.o ,而且我们还看到了 lds链接文件kernel/arch/arm/vmlinux.lds,先把它分析一下 ENTRY(stext) //入口点是stext 应该就在head-armv.s中了 SECTIONS { . = 0xC0008000; //基址,是内核开始的虚拟地址 .init : { /* Init code and data */ _stext = .; __init_begin = .; *(.text.init) __proc_info_begin
[单片机]
arm <font color='red'>linux</font> 启动流程之 进入内核
基于Linux的嵌入式工业测控系统
1 、前言 随着网络控制技术的快速发展,工业以太网得到逐步完善,在工业控制领域获得越来越广泛的应用。工业以太网使用了TCP/IP协议,便于联网,并具有高速控制网络的优点。随着32位嵌入式CPU价格的下降,性能指标的提高,为嵌入式系统的广泛应用和Linux在嵌入式系统中的发展提供了广阔的空间。由于Linux的高度灵活性,可以容易地根据应用领域的特点对它进行定制开发,以满足实际应用需要。 2 、基于Linux的嵌入式系统在测控系统中的设计 计算机测控系统本质上就是计算机控制系统,为了对被控对象实施控制,对其参数和状态进行检测是必不可少的。 2.1 测控系统整体设计 测控系统以基于Linux的嵌入式系统为核心,应用程序可通过
[嵌入式]
OK6410A 开发板 (八) 50 linux-5.11 OK6410A 基于VMA的sys_mmap与sys_brk
前提 A 用户空间虚拟内存的管理机制VMA B 用户空间物理内存的管理机制(CONFIG_FLATMEM内存模型下的struct page的管理) mmap 和 brk 通过封装 A 和 B , 完成了 对 用户空间虚拟物理内存的管理 代码流程 mm/mmap.c:190:SYSCALL_DEFINE1(brk, unsigned long, brk) mm/mmap.c:1641:SYSCALL_DEFINE6(mmap_pgoff, unsigned long, addr, unsigned long, len, mm/mmap.c:2953:SYSCALL_DEFINE2(munmap, unsigned long, a
[单片机]
意法半导体(ST)通过简化与Linux系统的连通,提高MEMS运动传感器的易用性
中国,2013年5月3日 —— 横跨多重电子应用领域、全球领先的半导体供应商,全球最大的MEMS产品制造商及消费电子和便携MEMS传感器供应商意法半导体 (STMicroelectronics,简称ST;纽约证券交易所代码:STM)发布可支持Linux系统的MEMS传感器驱动软件,进一步简化MEMS传感器的使用,并扩大其应用范围。 意法半导体的新驱动软件架构支持最新版的 Linux Kernel(自3.9版),即日上市,为Linux开源软件开发人员使用意法半导体的MEMS器件提供更大的便利,以便开发用于远程监控、测试和测量、机器人控制、机器视觉和监测的消费电子、工业、科学研究、医疗保健应用,这些设备要求具有精确运动和位置多轴感
[半导体设计/制造]
奇趣科技推出Qtopia Core,拓展嵌入式Linux应用
奇趣科技公司日前推出了一款基于嵌入式Linux的面向单一应用嵌入式产品的开发平台Qtopia Core,可用于汽车自动化、医疗设备、POS机、办公设备以及图象处理设备的开发等。 Qtopia Core作为独立式的技术,是为基于嵌入式Linux的单应用设备开发的稳定、可定制的开发平台。为高价值应用设计的Qtopia Core包含一整套数据库和绘图工具,用以帮助企业快速经济的开发基于嵌入式Linux的产品。目前,众多国际大型企业都已经设计出基于可定制的Qtopia Core开发平台的产品,其中包括沃尔沃和戴姆勒-克莱斯勒等公司。 Qtopia Core在桌面提供了与Qt4相同的应用编程接口(APIs)支持,Qtopia Core包
[新品]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved