范小烨
摘要:I2C总线协议是由Phlips公司研发并推行的一款高性能的串行总线。它具有多主机系统总线仲裁功能和高速设备与低速设备的同步功能。本篇文章的设计应用I2C串口协议对温度感应芯片LM75A进行正确的读写控制。以quartus 2为平台进行仿真,利用LB0学习板上的温度传感器LM75A和LED显示器,设计实现温度检测的控制电路,读出当前温度信息。
关键词:I2C总线协议;quartus 2;温度检测;
中图分类号:TP391 文献标识码:A 文章编号:1009-3044(2014)27-6536-03
Abstract:I2C bus protocol was developed and implemented by the company Phlips a high-performance serial bus. It has a multi-master system bus arbitration function devices and high-speed and low-speed device synchronization. This article is designed to use I2C serial protocol LM75A temperature sensor chip to read and write properly controlled. In quartus 2 simulation platform, using temperature sensors LM75A LB0 learning and LED display board, design temperature detection control circuit reads the current temperature information.
Key words: I2C; quartus 2; temperature detection
通信协议是一种通信双方必须服从的约定,其中包括的一系列问题有:数据格式的传输,同步模式,传输速率,传输程序,错误检测和校正模式,控制字符定义等。根据同步方式的不同分为同步协议和异步协议。串口通信是指主机和从机之间传输数据的一种通讯的形式。它通过数据传输线、地线和控制线等实现。这类通信方式的优点是数据线少,能够使系统的硬件设计大大简化,在远距离传输中可以降低开销,提高系统可靠性。缺点是传输速度没有并行传输快。
在工程设计中经常使用的串行通信总线有: I2C总线、SPI总线和Microwire/PLUS。该文只针对I2C串行通信总线进行讨论。
I2C串行通信总线是负责微控制器和外设电路之间的通信连接的高性能串口通信协议。
本文温度检测设计所用温度芯片LM75A 是一个集成了带隙温度传感器和模数转换器的温度检测芯片,可以直接输出当前环境温度的11位二进制值。该芯片可以提供过热检测输出。温度检测在日常生活中有非常广泛的应用,例如火灾报警,家用电器过热检测等等,简单的温度检测设计可以为我们的生活带来极大的方便,保护我们的生命财产安全。
1 I2C串行总线
1.1概述
PHILIPS公司从改善硬件工作效率的角度出发,开发了一种用于内部IC控制的简单双向两线串行总线I2C。支持任何一种IC制造工艺,并且具有品种众多的I2C可兼容芯片。强大的兼容性和可用性让该通信总线成为世界工业化的重要成员。两根双向信号线(数据线SDA和时钟线SCL)组成了I2C总线。
接收器收到一个完整的数据字节后只要将SCL时钟线置为低,就可以使主机进入等待状态,并且利用这段时间去完成一些必须的工作,如处理内部中断服务等。完成其他工作后释放SCL线接着进行数据传送的工作。
2 数据的传送格式
1) 字节传送不应答:在数据传输中,每个字节必须是8位,每个字节应该由对方反馈一个ACK信号代表对方在线。非应答信号正常情况下出现在所有字节的最后。这些一般会在通信双方约定的通信协议中规定。需要注意的是SCL必须由主机发送,否则会出现严重的后果。
2) 数据帧格式:I2C总线上传输数据信号和地址信号。第一个字节是"片选信号",由7位从机地址加1位方向控制位组成。从机接收到自己的地址时才可以发送应答信号且必须应答主机以表示自己在线可以进行通信。此时其他地址的从机不被允许通信。如果主机发起的是群呼时,外围从机设备不能发送数据。
其中传送方向的“读写”是站在主机的立场上定义的。“读”是主机收到从机的数据,“写”是主机对从机发送数据。
3) 总线的寻址:I2C总线通信协议中规定采用寻址字节为7位(即起始信号后的第一个字节)。 从地址的可编程部分确定总线最多可以访问设备目。7位的I2C总线可以连接127个不同地址的外围设备进行通信,其中0号是群呼的地址。
2 LM75A温度芯片
2.1 概述
LM75A 温度检测芯片有3位用户可选的逻辑地址,所以同一通信总线上可以不发生地址冲突的同时连接8个器件进行通信。
温度寄存器用来实现0.125℃一个跳度的温度变化精度是一个 11 位的二进制数的补码。芯片装置正常接通电源时,操作系统为比较模型的工作方式,起始温度为80℃,75℃滞后。在这个时候,LM75A芯片就可以当做一个能独立使用的温度控制器件,其温度临界值就是上述的预定义温度设定点。
2.2 功能特点
LM75A芯片最大的特点就是可以将检测到的环境温度转换为数字信号输出,设计者可以直接读取数字信息。而且可以对预定义的温度进行反应,可对温度临界值进行编程设置。
除此之外,该芯片低功耗,输出数据精度达到0.125,符合一般的设计要求。
2.3 OS输出与I2C接口
温度值将被存入芯片的寄存器Temp 中。I2C 总线可以随时随地根据主机运行需要从 Temp 寄存器中读取11位二进制的温度数值。并且温度的读取不影响模\数转换操作的进行。在正常工作模式下,温度值得模数转换每隔100ms 进行一次,并且每一次的转换都会更新寄存器的值。在关中断工作模式下,器件进入空闲状态,数据不进行转换,但是I2C 接口仍然有效,即temp中的数值可以被读取。
3 电路设计及仿真结果
用I2C串口通信协议编写程序读取LM75A的温度寄存器TEMP中的数据,并通过FPGA显示在数码管上。该程序是如前所述,默认设备在正常工作模式下,FPGA器件先发送“10100010”末位的0代表写数据,然后为字地址也就是寄存器指针地址00H”,然后再发送设备地址“10100011”末位代表读,两个连续读之后,屏蔽无效位数码管显示温度。。需要注意的是在inout口读数据之前,一定要设为三态释放总线,然后才能读出数据。
4 结束语
本次实验设计证明,通过I2C串口通信协议可以完成许多外围设备芯片的功能组合应用,实现强大的设计灵活性。在本设计基础上加入比较器,蜂鸣器等简单的原件功能即可以在FPGA上开发出温度报警器,过热检测装置等可以应用于实际生活中的各种器件。
本设计及仿真很好的完成了设计的目的和既定要求,并作为I2C串口通信协议的基础应用,为更高级的开发应用打下基础。
参考文献:
[1] 潘松,黄继业.EDA技术实用教程[M]——VHDL版.2013.
[2] 邹益民.FPGA/CPLD技术实用教程. 中国电力出版社,2010.
[3] LM75A Product data sheet Supersedes data of 2001 Jul 16.