IIC总线理解学习笔记_第1页
IIC总线理解学习笔记_第2页
IIC总线理解学习笔记_第3页
IIC总线理解学习笔记_第4页
IIC总线理解学习笔记_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、IIC总线理解学习笔记本文系4DMan-Joe原创,文中图片与程序均转载自网络,如有侵权,望告知。为尊重作者成杲,如想复制本文,密码为4DMan-Joe。谢谢。在学校老师上单片机课程时,把HC讲解的很复杂,很繁琐。今天,在偶然的学习C语言的过程中再次遇到了IIC,一番接触之下,感觉原来不用记那么多,只耍了解关键的协议部分就够了。VCC5kSDASCLI2C器件】Q溷牛2VCC5kSDASCLI2C器件】Q溷牛2ECSl4n图1(个人比较喜欢先看图再看文字说明)如图1所示,就是HC总线连接图了。简单來说,就一根数据SDA,一根时钟SCL。两根线按照一定的协议来传输数据。这样既可以节省10口和电路

2、板空间,又可以让每个能够发送接受数据的设备成为主控机,当然,前提是,同一时间上只能有一台设备是主控设备。接下来了解一下的信号类型,它共有四种信号:起始信号、停止信号、应答信号、非应答型号。然后我们了解UC传输数据的规则:SDA/;SDA/;:X:Z_当时钟为低电平时允许数据改变当时钟为低电平时允许数据改变时钟为高电嗣数据必须保糖定图2数据传送的规则首先,我们了解在SCL=1时,SDA的电平变化决定信号是起始信号还是停止信号。在SCL=0是,SDA上的电平允许变化,变化好了,等SCL=1时,保持到SCL=0,变化下一位数据,这一位的数据就算是传送成功了。当然,判断数据是否为高低电平,需要一个时间

3、,下面会说到。接着,我们了解的四种数据类型:详细说太繁琐,又不好记忆,我简化了一卞,大家理解住就很好记了。注意,这汕种伫勺都是在SCL=1时定义的。上面有说到,SCL=1时,SDA的变化是变换数据类型和判断数据高低电丫:的,SCL=O时,仅是用SDA安全变化。大于4.7usSCL大于4OusSCL大于4Ous起始信号:SDA由Mln-u0定义为起始。停止信号:SDA停止信号:SDA由110-1定义为停止。当数据发送一个字节即8位数据后,到第9数据,接收的设备必须输出”0做为应答信号。J:此同时,发送设备就要释放SDA,用J:接受判断接受设备是否应答。SCLlusSCLlus应答信号:SDA=0

4、,定义为应答。非应答信号:SDA=1,定义为非应答。这个信号用几主控设备接收数据时,用在最后一个数据后而,使受控设备释放数据线,以便主控设备产生一个停止信号來终止总线的数据传送。再次总结一下,四种信号中,只有(菲)应答信号是接收设备控制的哦,其他的都是发送设备控制的,所以又叫主控设备。这应该很好理解吧。了解了数据传输的规则,接下来就要说协议了。II沁札上XT/CCV/T:?OCAJrIIII图3总线的完整时序先看了解一下图3,大致理解上面说到的四种信号的使用。起始从地址0应答子地址的首地址应答要发送的数据应答要发送的数据应答或非应答停止7位位8位8位8位要发送的N个数据图4总线写格式写操作就是

5、主控器件向受控器件发送数据,如图4所示。1.主控器会对总线发送起始信号,紧跟应该是第一个字节的8位数据,但是从地址只有7位,所谓从地址就是受控器的地址,而第8位是受控器约定的数据方向位,“0”为写。3.从图3中我们可以清楚地看到发送完一个8位数之后应该是一个受控器的应答信号。应答信号过后就是第二个字节的8位数据,这个数多半是受控器件的寄存器地址。寄存器地址过后就是要发送的数据,当数据发送完后就是一个应答信号,每启动一次总线,传输的字节数没有限制,一个字节地址或数据过后的第9个脉冲是受控器件应答信号。6当数据传送完之后由主控器发出停止信号來停止总线。/X/X/起始从地址0应答子地址应答重复起始信

6、号从地址1应答S要的应答要发送的数据非应答停止受控器的应答主控器的应答要接收N个数据图5总线读格式读操作指受控器件向主控器件发送数据,其总线的操作格式如图5。1.由主控器发出起始信号,前两个传送的字节与写操作相同。2到了第二个字节之后,就耍从新启动总线,改变传送数据的方向,前面两个字节数据方向为写,即“0”:第二次启动总线后数据方向为读,即“1”:之后就是要接收的数据。从图5的写格式中我们可以看到有两种的应答信号。一种是受控器的,另一种是主控器的,前面三个字节的数据方向均指向受控器件,所以应答信号就由受控器发后出。但是后而要接收的N个数据则是指向主控器件,所以应答信号应由主控器件发出,当N个数

7、据接收完成之后,主控器件应发出一个非应答信号,告知受控器件数据接收完成,不用再发送。4最后的停止信号同样也是由主控器发出。下面推荐一段周立功老师公司出版的模拟nc程序软件包,对照上面长篇大论的理论,希望让大家对nc的规则协议有个更加直观的了解。/*MCS-51单片机模拟I2C软件包(VI.1)文件名:VI2C_C51.C相关文件:VI2C_C51H,VI2C_C51.LIB功能说明:本模拟I2C软件包包含了I2C操作的底层函数,如发送数据及接收数据,应答位发送,并提供了儿个直接面对器件的操作函数,它很方便的与用户程序连接并扩展-注意:函数是采用软件延时的方法产生SCL脉冲,固对高晶振频率耍作一

8、定的修改(本软件包是lus机器周期,即晶振频率要小J:12MHZ)总线时序符合I2C标准模式OOKbit/S。更新时间:200206.05#uiclude#uiclude#define#defineucharunsignedcharuintunsignedint件宏定义*/*定义空指令*/更新时间:200206.05#uiclude#uiclude#define#defineucharunsignedcharuintunsignedint件宏定义*/*定义空指令*/sbitSDA=P3A4,sbitSCL=P3八5;/*模拟I2C数据传送位*/*模拟I2C时钟控制位*/严应答标憑位*7起动总线

9、函数函数原型】voidStaitJZcO,功能:启动I2C&线,即发送I2C起始条件.SDA=1,/*发送起始条件的数据信号*/_NopO,SCL=1;_NopO,/*起始条件建立时间大丁4.7us,延时*/_NopO,_NopO,_NopO,_NopO,SDA=O,/*发送起始信号*/_NopO,/*起始条件锁定时间大于4Ms*/_NopO,_NopO,_NopO,_NopO,SCL=O,/*钳住I2C总线,准备发送或接收数据*/_NopO,_NopO,/*结束总线函数函数原型】voidStop_I2cO功能结束I2C总线,即发送I2C结束条件.丄丄丄丄丄丄二丄voidStop_I2cOSD

10、A=0,/*发送结束条件的数据信号*/_NopO,/*发送结束条件的时钟信号*/SCL=1,/*结束条件建立时间大J-4PS*/_NopO,_NopO,_NopO,_NopO,_NopO,SDA=1,/*发送I2C总线结束信号*/_NopO,_NopO,_NopO,_NopO,/*/*字节数据发送函数功能:将数据C发送出去,可以是地址,也可以是数据,发完后等待应答,并对此状态位进行操作.(不应答或非应答都使ack=0)发送数据正常,ack=l;ack=0表示被控器无应答或损坏。函数原型voidSendByte(ucharc),丄丄丄丄丄voidSendByte(ucharc)uchaiBitC

11、nt,for(BitCnt=0,BitCnt&BitCnt+)/*要传送的数据长度为8位*/if(cBitCnt)&0 x80)SD血=1,/*判断发送位37elseSDA=0,_NopO;SCL=1;_NopO,_NopO,_NopO,_NopO,_NopO,SCL=0,/*置时钟线为高,通知彼控器开始接收数据位*/*保证时钟高电平周期大J-4us*/_NopO,_NopO,SDA=1,_NopO,_NopO,SCL=1,_NopO,_NopO,_NopO,if(SDA=l)ack=O,elseack=l,SCL=0,_NopO,_NopO,/*8位发送完后释放数据线,准备接收应答位*/*判

12、断是否接收到应答信号勺/*/*字节数据接收函数函数原型:ucharRcvByteQ,功能:用來接收从器件传來的数据拼判断总线错课(不发应答信号),发完后请用应答函数应答从机。丄“丄丄丄丄/ucharRcvByteOucharretc,ucharBitCnt,/*/*/*/*retc=O,SDA=1,/*置数据线为输入方式*/*/*for(BitCnt=0,BitCnt8,BitCnt+)_NopO,SCL=O,_NopO,_NopO,_NopO,SCL=O,_NopO,_NopO,_NopO,_NopO,_NopO,SCL=1,_NopO,_NopO,retc=ietcl;if(SDA=l)r

13、etcTetc+1,/*置时钟线为低,准备接收数据位勺件时钟低电平周期大J:4.7us*/伴置时钟线为高使数据线上数据有效勺/*读数据位接收的数据位放入】etc中*/*/*_NopO,_NopO,SCL=O,_NopO,_NopO,retum(retc),/*丄丄丄丄丄丄,应答子函数函数原型:voidAck_I2c(bita);功能:主控器进行应答信号(可以是应答或非应答信号,由位参数a决定)I*|I*|1*|1*g1*g1*I*I*1*I*1*g1*g1*lI*I*g1*g1*g1*g1*I*I*1*g1*g1*g1*gI*I*g1*l1*g1*g1*I*I*1*g1*1*丄丄丄A*丄丄X*

14、丄丄丄丄|gggggj*j*|gj*ggggj*ggggj*ggggj*gg,bitISendByte(ucharsla,ucharc)StaitJEZcO,SendBytea),if(ack=O)retuiTi(O),SendByte(c),if(ack=O)retuiTi(O),StaitJEZcO,SendBytea),if(ack=O)retuiTi(O),SendByte(c),if(ack=O)retuiTi(O),/*启动总线*/*发送器件地址*/*发送数据*/*结束总线勺/*结束总线勺/*向有子地址器件发送多字节数据函数函数原型bitISendSti(ucharsla,ucha

15、rsuba,ucahr*s,ucharno),功能:从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。如杲返回1表示操作成功,否则操作有误。注意:使用前必须已结束总线。丄丄丄丄丄丄,bitISendSti(ucharsla,ucharsuba,uchar*s,ucharno)uchari,StartJ2cOSendBytea),if(ack=0)retum(0),SendByte(suba),if(ack=0)retum(0),StartJ2cOSendBytea),if(ack=0)retum(0),SendByt

16、e(suba),if(ack=0)retum(0),for(i=0,iSendByteuchari,StartJ2cOSendBytea),if(ack=O)retuiTi(O),for(i=0,iSendByte(sla+1);if(ack=O)retuiTi(O),*c=RcvByteOAck_I2c(l),StartJ2cOSendByte(sla+1);if(ack=O)retuiTi(O),*c=RcvByteOAck_I2c(l),Stop_I2cO,retum(l),/*启动总线3V/*发送器件地址*/*读取数据*/*发送非就答位*/*结束总线*/丄*丄二二二,丄向有子地址器件读

17、取多字节数据函数函数原型bitISendSti*(ucharsla,ucharsuba,ucahr*s,ucharno),功能:从启动总线到发送地址,子地址,读数据,结束总线的全过程,从器件地址sla,子地址suba,读出的内容放入s指向的存储区,读no个字节。如果返回1表示操作成功,否则操作有误。注意:使用前必须已结束总线。丄丄丄丄丄丄丄丄丄丄丄二bitIRcvStiucharsla,ucharsuba,uchar*s,ucharno)uchari,StartJ2cO,SendByteStartJ2cO,SendBytea),if(ack=O)retuiTi(O),SendByte(suba

18、),if(ack=O)retuiTi(O),/*启动总线*/*发送器件地址*/严发送器件子地址勺StartJ2cO,SendByte(sla+1);if(ack=O)retuiTi(O),for(i=0,ino-1,i+)*s=RcvByteO,AckJ2c(0),S+,StartJ2cO,SendByte(sla+1);if(ack=O)retuiTi(O),for(i=0,ino-1,i+)*s=RcvByteO,AckJ2c(0),S+,*s=RcvByteO;Ack_I2c(l),Stop_I2cO,retum(l),/*重新启动总线*/严发送数据*/*发送就答位*/*发送非应位*/严结束总线5*7从启动总线到发送地址,读数据从启动总线到发送地址,读数据,结束总线的全过程.从器件地址sla,读出的内容放入s指向的存储区,读no个字节。如果返回1表示操作成功,否则操作有误。使用前必须已结束总线。/*向无子地址器件读取多字节数据函数函数原型bitISendStiExt(ucharsla,ucahr*s,uchar

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论