摘 要:本文介绍了I2C总线的概念、接口特性和传输时序,提出了一种用51系列单片机的C语言(C51)模拟I2C总线数据传输的软件方法,并给出了在数字高清晰度电视地面接收机中的应用。
,V%f| S9W$H44606关键词:I2C总线;单片机;C语言;高清晰度电视电子园51单片机学习网:I @P\?w
[$m(wA(z_#G446061 I2C总线概述电子园51单片机学习网E|hx%y/W#y7z
I2C(Intel-Integrated Circuit)总线是荷兰的Philips公司于八十年代初推出的一种芯片间串行总线扩展技术。它用两根线(数据线SDA、时钟线SCL)可完成总线上主机与器件的全双工同步数据传送,可极方便地构成多主机系统和外围器件扩展系统。I2C总线支持所有NMOS、CMOS、TTL等工艺制造的器件,其上所有的节点都连到同名的SDA、SCL上。I2C总方法,数据传送都有相同的操作模式,接口电器特性相同且独立,可在系统供电情况下从系统中移去或增加IC芯片,有I2C接口的外围器件都有应答能力,读写片内单元时有地址自动加1功能,易实现多个字节的自动操作。近年来,国际上有关公司制造了多达几百种的I2C总线器件,如8051系列单片机8XC752、LCD驱动器、RAM、I/O接口等芯片都使用了I2C总线接口。随着数字技术的发展,I2C总线控制系统已经应用于越来越多的电子产品。电子园51单片机学习网8i4T'_uYcVj'J
SOC开发平台360元豪华单片机开发系统498元单片机学习板138 无线nRF-9E5模块100元S3C44B0 ARM7开发板398元Genius NSP通用编程器260元Mini ARM Debugger330元LABTOOL-48UXP2800元S3C2410 ARM9开发板800
_ol K+K'Xp X+h!B446062 I2C总线的数据传输电子园51单片机学习网|5K6Re@
2.1 接口特性
EO`1]R44606 I2C总线接口的数据线SDA和时钟线SCL必须经过上拉电阻接到正电源VDD上,各个I2C接口电路输出端必须是漏极开路或集电极开路,以便完成“线与”的功能。I2C的SDA和SCL都是双向传输线,当总线空闲时,此两线都是“1”(高电平)。由于不同的器件都会接到I2C总线,逻辑的“0”(低)及“1”(高)的信号电平取决于VDD的电压。总线上能连接的最大器件数取决于其电容容限400PF。电子园51单片机学习网|_(w5Z8iJ%[
2.2 I2C总线上的传输时序
if^/_2C)bcV8d44606 I2C总线上每传输一位数据都有一个时钟脉冲相对应,在标准模式下可达100 kbit/s,高速模式下可达400kbit/s,总线上依据器件功能不同可建立简单的主/从关系(master/slave),只有带CPU的器件才可成主控器。图1为I2C总线一次完整的数据传输。SCL为高期间,SDA状态必须稳定,SCL为低时才允许SDA状态变化。SCL保持高电平期间,SDA出现由高至低的转换将启动I2C总线,出现由低至高的转换将停止数据传输。起始和终止信号通常由主控器产生。I2C总线的信号时序有严格规定,本应用采用标准模式,SCL低电平周期≥4.7μs,SCL高电平周期≥4.0μs,START和STOP之间的总线空闲时间≥4.7μs。
8i%i:V i [9x GI_44606 I2C 总线上传送的每个字节必须为8位,启动和停止之间可传输的数据字节数不受限制。采用串行传送,首先传送最高位,每传送一个字节后必须跟一个应答位。主控器产生应答所需的时钟脉冲期间,发送器必须释放数据线(SDA为高),以便接收器输出应答位。低电平为应答信号,高电平为非应答信号。非应答信号是当主控器作为接收器时,收到最后一个字节数据后,必须发送一个非应答信号给被控发送器,使被控发送器释放数据线,以便主控器发停止信号,终止数据传送。当从器件不能再接收字节时也会出现非应答
,OBa8`M8~&~`1{hQ}44606信号这种情况。
.gAk"J)Y X| _"H"A8T44606 I2C总线上的器件一般有两个地址:受控地址和通用广播访问地址,每个器件有唯一的受控地址用于定点通信,而相同的通用广播访问地址则用于主控方同时对所有器件进行访问。如图1所示,起始信号后主控器发送的第一个字节就是被读器件的受控地址,称作寻址字节。寻址字节由高7位地址和最低1位方向位组成,方向位为“0”表明主控器对被控器的写操作(W),方向位为 “1”表明对被控器的读操作(R)。总线上每个器件在起始信号后都把自己的地址与寻址字节的前7位相比较,如相同则器件被选中,产生应答,并根据读写位决定在数据传送中是接收还是发送。无论是主发、主收还是从发、从收,都是由主器件控制,数据传送完后,主控器都必须发停止信号。
-S$\L1ZwTh[6M44606电子园51单片机学习网1s.b IDSK/L1I)T5{
kp%M r*x1B*z$Ns,F z/}44606
(J,]_ k g44606电子园51单片机学习网0l Mp,bH1U8`9N
`Iu'lP ``446063 I2C总线的C51语言实现电子园51单片机学习网LwBCg
T$t+WS j1z44606 C51语言是针对Intel的8位单片机MCS-51系列而开发的、具有一般C语言特点的高级编程语言。从1985年至今,有许多公司推出 51系列的C语言编译器,其中以Franklin C51编译器在代码生成方面较为领先,它可生成最少的代码,支持浮点和长整数、重入和递归。头文件reg51.h中包含了51单片机的特殊功能寄存器(SFR)的字节定义与位定义。为了与具有I2C总线接口的51单片机兼容,可在程序开始处定义单片机的P1.6和P1.7作为I2C总线的SCL和SDA信号,实际中也可用其它的I/O引脚作为SCL和SDA信号。C51语言中只要用赋值语句”=”就可实现I/O口某位的数据输出和读入。现将I2C总线底层读写函数接口及功能列举如下,它可用于没有内部I2C接口的51系列单片机与I2C总线器件通信。
.BR,q_HO7e44606#include<reg51.h>
l&I-~&k&\VYY [44606/*全局符号定义*/电子园51单片机学习网&kwK.~ UJ'}
电子园51单片机学习网 z:|1q6_e `#define HIGH1电子园51单片机学习网{:q SQ0wD"@ ^_#eX
电子园51单片机学习网@1|,vNn_9yH2vv#define LOW 0电子园51单片机学习网:kJG,RX0\
电子园51单片机学习网,F+NMt,A)q/f)`cd#define FALSE0电子园51单片机学习网%J3g9E*M__[aX
k` I Y"JV44606#define TRUE1
d{lPK f2vxf:v44606{"]j _W7P+g44606#define time 1
A| zW6Ti_2}6N44606#define uchar unsigned char
5C&V2Q2E7S/g;`44606#define uint unsigned int电子园51单片机学习网1YM%V2G;K6`(xM
$}tFC GQE_ ]m\44606sbit SCL=P1^6;电子园51单片机学习网!uf;Se:~-SO
电子园51单片机学习网)](lRM8ZK{jsbie SDA=P1^7;电子园51单片机学习网 p8I [(p)I
FJtQS|.YpN446061)函数原型:void delay(uchar nu m) 电子园51单片机学习网cu*x S@kP8o
功 能:用for()循环提供延时。在实际应用中可依具体情况改变传入参数,但必须满足I2C总线时序中对SCL高、低电平周期的要求,本应用中取1,调用形式为delay(time)。
4M9PO"\4f]#F5B3ly446062)函数原型:void start(void)
3}4J {m'h3F?7{44606 功 能:提供I2C总线工作时序中的起始位,在SCL=HIGH期间,SDA出现由高到底的转变,返回前将SCL拉低,允许数据变化,准备传输。其中调用函数1。
UB#?%i.R%J+G446063)函数原型:void stop(void) 电子园51单片机学习网PT7e5X7| D`5r)ud
功 能:函数提供I2C总线工作时序中的起始位,在SCL=HIGH期间,SDA出现由低到高的转变。其中调用函数1。
%] |b"FX446064)函数原型:void sendbyte(uchar b,uchar*error) 电子园51单片机学习网(b!f8O2z"lb#fd
功 能:在时钟作用下,将入口参数b中8位数据由高至低通过SDA线发送,并读回应答信号,存于指针变量*error中。其中调用函数1、2、3。
om:[5A^qu1p446065)函数原型:void readbyte(uchar*b,bit Ack)
f s{g5Xv@D WC44606 功 能:函数在时钟作用下接收8位数据,存于*b中,先接收的为高位,并发送应答信号(Ack=0),当接收到最后一字节时发送非应答(Ack=1)。其中调用函数1、2、3。
Q!kPaT v$Y9M446066)函数原型:void send-n-byte(uchar*info,uint n,uchar address,uchar*fault) 功 能:向I2C器件连续发送n个数据字节,数据存于数组info[]中,address为器件受控地址,末位为0(写),n个数据的地址可作为数据字节发送,或设置地址自动加减功能。*fault存收到的应答位。其中调用函数1-4。电子园51单片机学习网DT?v;W4q|
7)函数原型:void receive_n_byte(uchar*info,uint n,uchar address,uchar*fault)
K_~u-D"vKV44606 功 能:从I2 C器件连续接收n个字节的数据,存于数组info[]中,address为器件地址,本函数保证器件地址末位是1(读),n个数据的器件内地址可作为数据字节发送,或设置地址自动加减功能。收最后一字节时发非应答信号1。*fault存收到的应答位。其中调用函数1-5。
1eB/P}On,N'Y44606 以下仅以sendbyte()函数原型为例说明C51如何具体实现I2C总线的发送:
*hP@A6H9iCl'v3pi44606void sendbyte(uchar b,uchar*error)电子园51单片机学习网*wM2i:Q)ohE v
{int count;电子园51单片机学习网,Hi(B0p%e*Z
bit data_bit;
(^U!zA?!Lm3`x]44606*error=0;
P?'F5g'a9V44606for(count=7;count>=0;count--)
{data_bit=(bit)(b&0x80);
*fj,`;hN8p44606b=b<<1;电子园51单片机学习网 Zjp1@~.G"cO
/*送数据位,产生时钟脉冲*/
CR3^-v,iR M z44606SDA=data_bit;电子园51单片机学习网c2i!WZ.e
SCL=LOW;delay(time);
SCL=HIGH;delay(time);电子园51单片机学习网vZVo.~3y0S-v0r
6O4nS6l2R$c}44606SCL=LOW;delay(time);
^tlDV@44606}电子园51单片机学习网b T&~#F/JK'au]
/*释放数据线,产生时钟脉冲,读回应答*/
SDA=HIGH;电子园51单片机学习网xUo-TR,Z,L~G
SCL=LOW;delay(time);电子园51单片机学习网X%d;J dW
电子园51单片机学习网Xp(yZXSCL=HIGH;delay(time);电子园51单片机学习网3Q os2^ J3p
wA.R!v\i4t&|o,D44606*error=(uchar)SDA;
LY V?n%g3f9Lp44606/*释放数据线,时钟置低*/
SDA=HIGH;
u]VoulUg#P B44606SCL=LOW;delay(time);}电子园51单片机学习网 r(A@ D0W.Lu2g b
电子园51单片机学习网 L8EJ m@P
4 I2C总线用于HDTV数字地面接收机
}A3h`+A8x@44606
GO4UdDH44606 数字高清晰度电视HDTV(High Definition Televi-sion)是继黑白电视和彩色电视之后的第三代电视系统,与目前市场上的电视相比,其水平和垂直两个方向的图像质量(分辨率)提高一倍以上,在使用大屏幕显示器或近距离观看时其图像细腻逼真,无闪烁感和粗糙感,质量与35mm电影相当,再配以数字环绕音响,使收视效果大幅度提高。HDTV 节目全部采用数字方式制作、发送和接收,使图像质量接近演播室。同时,数字电视系统还能够提供多种业务,实现交互、数据广播和计算机联网等功能。美国于 1998年11月率先正式开播数字HDTV信号。我国从1996年启动国家重大产业工程项目HDTV功能样机系统研究开发工程,已成功在50周年国庆时进行了数字电视试播。
#{&wZU8w7j/Fx)An`)x44606 本HDTV数字地面接收系统以欧洲的DVB-T (Digital Video Broadcasting Terrestrial)为标准,完成信道解调解码,输出标准的MPEG-2码流,由于采用了COFDM(Coded Orthogonal Frequency Division Multi-plexing)编码正交频分复用技术,能有效对抗多经传播和同频干扰。本接收机的主要特点是采用带有I2C总线接口的L64系列芯片,AT89C52通过I2C总线完成对L64芯片内寄存器的读写操作和监控,与PC配合实现基于参数配置、模式转换、状态读取的调试功能。结构简单,调试方便。信道解调解码的硬件基本组成如图2(未画出上拉电阻)。
*Gmo^jN_6UCjh44606电子园51单片机学习网2K6~!{@8t_
电子园51单片机学习网_`'v?S2`,p
K.F XPT8fR-N"Q44606 美国LSILogic公司的L64系列是专用的以DVB为标准的解调解码芯片,该系列内部模块化,接口标准化,且带有I2C 总线接口,连接简单。L64系列功能完善,L64780、L64724、L64768单独使用即可分别完成DVB标准的地面、卫星、有线电视信号解调的全部过程。目前,L64系列可配合使用。如图2,信道出来的信号先经过调谐器变为中频信号,送入L64780完成主要的OFDM解调,其输出经 L64724Viterbi译码,L64768RS译码,完成前向纠错,输出标准的MPEG-2码流。下面仅以L64768为例介绍读写某一寄存器的 C51函数原型及主要功能:
J8Ka)}m.kKF;?44606定义768的受控地址:#define LSI0xfe函数原型:uchar general_call(void)电子园51单片机学习网 xT L @.Q_0BJ7R
功 能:general_call()函数调用send_n_byte()函数,发特殊寻址字节0x00和0x06,若应答为零返回0,否则重复上一操作,若发5次后仍无应答返回1。在主程序初始化化时调此函数,主程序根据返回。
#j:l9R jb!YP44606函数原型:uchar 768_fec_rd(uint group,uint addr,uint*data)
)X.Ne4_)@8q[44606功 能:768_fec_rd()函数调用send_n_byte()和receive_n_byte(),从FEC寄存器读出一字节数据存于指针变量*data中,group为组号,输入的组号要翻译成相应的组地址group_addr,addr为FEC寄存器地址,LSI作为每次起始信号后的寻址字节。依据768的传输时序,先发addr的低字节,再发送addr的高字节,然后发group_addr,即可读出相应寄存器中的数据。组号出错返回1;收到非应答信号返回0;读正确返回2。主程序根据返回值,做相应操作。电子园51单片机学习网o)I9w] I
5 结束语
d8sri:e#[/_44606
欢迎访问无由电子开发网(技术文章在线阅读在线商城)电子园51单片机学习网8} tT&?b c PTlH O
t:Fb9meM TM44606[1] 何立民.I2C总线应用系统设计[M].北京航空航天大学出版社,1995.电子园51单片机学习网}9m Ks \8yx
[2] 马忠梅,马岩,等.单片机的C语言应用程序设计[M].北京航空航天大学出版社,1999.
A.Y a0M k ? EZk44606[3] L64768 QAM Demodulator and FEC Decoder Specification[M].LSILogic.1998.
+GU1a*j ECc0I44606[4] 江澄.广播电视技术专集(1994-1998)研究期[C].广播电影电视部科技公司、中央电
5u#alqE x.Uc44606 视台、广播电影电视部标准化规划研究所合编.
g(N7f1D*}$d44606
文章评论(0条评论)
登录后参与讨论