版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
I2C总线接口设计51单片机实战指南本章内容:2I2C总线概述1单片机与EEPROM编程实例29.1.1I2C总线认识与UART的比较UART属于异步通信,通信双方没有同一个时钟信号。而I2C是一种双向二线制同步串行总线,属于同步通信。UART通信多用于板间通信,比如单片机和电脑,这个设备和另外一个设备之间的通信。而I2C多用于板内通信。有2根接口线一根是串行时钟线SCL,负责收发双方的时钟节拍;另一根是串行数据线SDA,负责传输数据。器件挂在总线上,每个器件都有唯一的地址,器件和器件之间均可进行信息传送。支持多主和主从两种方式,通常为主从工作方式;在主从方式中,主器件启动数据发送,产生时钟信号,发出停止信号;9.1.2I2C总线硬件结构图SCL和SDA均需接上拉电阻,开发板上接的是4.7kΩ的上拉电阻。总线在空闲的时候保持高电平;连接到总线上的任一器件输出低电平,都将使总线的信号拉低,相当于“线与”的关系。(数字电路中门电路知识)9.1.3I2C总线时序I2C总线在数据传输时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线为低电平期间,数据线上的电平状态才允许变化。由起始信号、终止信号、应答信号、以及有效数据字节构成。起始和终止信号都由主控制器发出,起始信号后,总线就处于被占用的状态;当终止信号出现后,总线才重新处于空闲状态。9.1.3I2C总线时序1.发送起始信号UART通信是从一直持续的高电平出现一个低电平标志起始位;而I2C通信的起始信号的定义是SCL为高电平期间,SDA由高电平向低电平变化产生一个下降沿,表示起始信号,如图8-2中的Start部分所示。9.1.3I2C总线时序2.发送地址信号高7位为地址位,器件地址码高4位(D7~D4)为AAAA,是器件的类型,具有固定的定义,如EERROM为1010。中间的3位(D3~D1)为BBB,是片选信号,同类型的器件最多可以在I2C总线上挂载8个。最后一位D0位为读写控制位。位D7D6D5D4D3D2D1D0说明AAAABBB9.1.3I2C总线时序3.发送应答信号I2C总线协议规定,每传送一个字节数据(含地址和命令字)后,都要有一个应答信号,以确定传输数据是否被对方收到。应答信号由接收设备产生,在SCL的高电平期间,接收设备将SDA拉为低电平,表示数据传输成功。9.1.3I2C总线时序4.数据传输I2C没有固定波特率(UART有),但是有时序的要求,要求当SCL在低电平的时候,SDA允许变化,也就是说,发送方必须先保持SCL是低电平,才可以改变数据线SDA,输出要发送的当前数据的一位。9.1.3I2C总线时序5.发送非应答信号当主机为接收设备时,主机对最后一个字节不应答(不拉低SDA),以向发送设备表示数据传送结束。9.1.3I2C总线时序6.发送停止信号UART通信的停止位是一位固定的高电平信号;而I2C通信停止信号的定义是SCL为高电平期间,SDA由低电平向高电平变化产生一个上升沿,表示结束信号,如图8-2中的Stop部分所示。9.1.3I2C总线时序总线的一次数据传送过程中,可以有以下几种组合方式:1)主机向从机发送数据,数据传输方向在整个传输过程中不变;2)主机在发送第一个字节后,立即从从机读数据。3)在传送过程中,当需要改变传输方向时,需将起始信号和从机地址各重复一次,而两次读/写方向位相反。9.1.3I2C总线时序9.1.3I2C总线时序这里先定义了一个延时约4μs的宏I2cDelay(),代码如下:#defineI2cDelay(){_nop_();_nop_();_nop_();_nop_();}这里用到了库函数_nop_(),可以进行精确延时,1个_nop_()函数的执行时间为1个机器周期,这个库函数包含在intrins.h这个文件中,如果需要使用这个库函数,只需要在程序的最开始,加入#include<intrins.h>即可。、9.1.3I2C总线时序-产生起始信号在SCL时钟信号在高电平期间SDA信号产生一个下降沿,起始之后SDA和SCL都为0voidI2cStart(){ SDA=1;//首先保证SDA和SCL都是高电平 SCL=1; I2cDelay(); SDA=0; //先拉低SDA I2cDelay(); SCL=0; //再拉低SCL I2cDelay(); }9.1.3I2C总线时序-产生停止信号在SCL时钟信号高电平期间SDA信号产生一个上升沿,结束之后保持SDA和SCL都为1,表示总线空闲。voidI2cStop(){ SDA=0; //首先保证SDA和SCL都是低电平 SCL=0; I2cDelay(); SCL=1; //先拉高SCL I2cDelay(); SDA=1; //再拉高SDA I2cDelay(); }9.1.3I2C总线时序-总线写操作bitI2cWriteByte(unsignedchardat){ unsignedchari=0; bitack; for(i=0;i<8;i++) //要发送8位,从最高位开始 { //起始信号之后SCL=0,所以可以直接改变SDA信号 SDA=dat>>7; dat=dat<<1; I2cDelay(); SCL=1; //拉高SCL I2cDelay(); SCL=0; //再拉低SCL,完成一个位周期 I2cDelay(); }9.1.3I2C总线时序-总线写操作
SDA=1;//8位数据发送完以后主机释放SDA,以检测从机应答 I2cDelay(); SCL=1; //拉高SCL ack=SDA; //读取此时的SDA值,即为从机的应答值 I2cDelay(); SCL=0; //再拉低SCL完成应答位,并保持住总线 return~ack; //应答位取反以符合逻辑习惯,0:不存在
//或忙或失败,1:存在且空闲或写入成功} 9.1.3I2C总线时序-总线读操作unsignedcharI2cReadByte(bitACK){ unsignedchari=0,dat=0; SDA=1; //首先确保主机释放SDA I2cDelay(); for(i=0;i<8;i++) //从高位到低位接收8位 { SCL=1; I2cDelay(); dat<<=1; dat|=SDA; I2cDelay(); SCL=0; I2cDelay(); }9.1.3I2C总线时序-总线读操作
SDA=ack; //8位数据发送完以后,发送应答(ack为0)或非 //应答信号(ack为1) I2cDelay(); SCL=1; //拉高SCL I2cDelay(); SCL=0; //再拉低SCL完成应答或非应答位,并保持住总线 returndat;
}9.2
单片机与EEPROM编程实例开发板上使用的这个器件是ATMEL公司的ATC系列的EEPROM,主要型号有AT24C01/02/04/08/16等,后面两位数字的单位是Kbit,因此AT24C02,是一个容量大小为2Kbits,也就是256个字节的EEPROMAT24C02是一个基于I2C通信协议的器件,我们通过51单片机对I2C总线时序进行模拟后,就可以对EEPROM访问了。二者并没有必然的联系,EEPROM可以用其它接口,I2C也可以用在其它很多器件上。9.2.1
EEPROMAT24C02引脚与寻址介绍9.2.1
EEPROMAT24C02引脚与寻址介绍引脚名称引脚功能A2,A1,A0编程的地址输入端GND电源地SDA串行数据输入/输出端SCL串行时钟输入端WP写输入保护端,用于硬件数据保护。当其为低电平时,可以对整个存储器进行正常的读写操作;当其为高电平时,存储器具有写保护功能,但读操作不受影响。VCC电源正端9.2.1
EEPROMAT24C02引脚与寻址介绍3.存储器结构与寻址AT24C02的存储容量为2Kb,内部分成32页,每页8字节,共256字节,操作时有两种寻址方式:芯片寻址和片内存储单元寻址。1)芯片寻址AT24C02的芯片地址为1010,其地址控制字格式为1010A2A1A0。其中A2,A1,A0为可编程的地址选择位,A2,A1,A0引脚接高、低电平后得到确定的三位编码,与1010组合成7位编码,即该器件的地址码。为芯片读写控制位,该位为0,表示对芯片进行写操作;该位为1,表示对芯片进行读操作。2)片内存储单元寻址芯片内可寻址内部256字节的任何一个进行读/写操作,其地址空间为00~FF。9.2.2读写操作时序-单字节写入1)首先是I2C的起始信号,接着跟上首字节,也就是我们前边讲的I2C的器件地址,并且在读写方向上选择“写”操作。2)发送数据的存储地址。24C02一共256个字节的存储空间,地址从0x00~0xFF。3)发送要存储的8位数据。注意在写数据的过程中,EEPROM每个字节都会回应一个“应答位0”,来告诉我们写EEPROM数据成功,如果没有回应答位,说明写入不成功。9.2.2读写操作时序-页写入方式页面写入与字节写入相同,但是单片机在第一个字节后不发送停止位。相反,在EEPROM确认收到第一个数据字后,单片机还可以发送多达7个字节(2401/2402)。每个数据字收到后,EEPROM会给出应答。若收到非应答,单片机必须终止页面写入。每成功写入一个字节,EEPROM存储空间的地址就会自动加1,故写入一页以为的数据字时,只需输入首地址。如果写到此页的最后一个地址,主器件再发送数据,数据会写入到该页的首地址,也就会覆盖掉原来的数据,这个现象称为“翻转”(RollOver)。解决“翻转”的方法是在写完8个字节数据后,将下一页的首地址重新写到总线上。9.2.2读写操作时序-指定地址读1)首先是I2C的起始信号,接着跟上首字节,也就是我们前边讲的I2C的器件地址,并且在读写方向上选择“写”操作。注意,这一步依然是“写”,我们选择写操作,是为了把所要读的数据的存储地址先写进去,告诉EEPROM我们要读取哪个地址的数据。2)发送要读取的数据的地址,注意是地址而非存在EEPROM中的数据。3)重新发送I2C起始信号和器件地址,并且在方向位选择“读”操作。前三步中,每一个字节实际上都是在“写”,所以每一个字节EEPROM都会回应一个“应答位0”。4)读取从器件发回的数据,读一个字节,并发送非应答位ACK(1)9.2.3.单字节读写实战开发板上单片机与AT24C02硬件连接如图9-9所示,其中A2,A1,A0与WP都接地,SDA接单片机P3.6引脚,SCL接单片机P3.7引脚,SDA与SCL分别于Vcc之间接一4.7kΩ的上拉电阻,因为AT24C02总线内部是漏极开漏形式,不接上拉电阻无法确定总线空闲时的电平状态。其中SDA接单片机P3.6引脚,SCL接P3.7引脚9.2.3.单字节读写实战【例9.2.1】通过串口向单片机发送1位十进制数据(0-9),单片机接收到以后显示在数码上,并加1后回传到电脑端串口调试助手,同时保存在中,这样下次开机后,单片机从出最后一次保存在AT24C02中的数据,并显示在数码管上。其中SDA接单片机P3.6引脚,SCL接P3.7引脚9.2.3.单字节读写实战遵循模块化编程的原则,考虑到I2C接口还要和A/D和D/A转换器PCF8591通信,我们没有把EEPROM的读写函数一起放入i2c.c文件中,而是单独写了一个EEPROM.c文件,包括它的头文件EEPROM.h文件。封装了2个函数:向AT24c02的一个地址写入一个数据voidAt24c02WriteByte(unsignedcharaddr,unsignedchardat)读取AT24c02的一个地址的一个数据*unsignedcharAt24c02ReadByte(unsignedcharaddr)9.2.3.单字节读写实战/*向AT24c02的一个地址写入一个数据*/voidAt24c02WriteByte(unsignedcharaddr,unsignedchardat){ I2cStart(); I2cWriteByte(0xA0);
//发送写器件地址 I2cWriteByte(addr);
//发送要写入内存地址 I2cWriteByte(dat);
//发送数据 I2cStop();}9.2.3.单字节读写实战/*读取AT24c02的一个地址的一个数据*/unsignedcharAt24c02ReadByte(unsignedcharaddr){ unsignedcharnum; I2cStart(); I2cWriteByte(0xA0);
//发送写器件地址 I2cWriteByte(addr);
//发送要读取的地址 I2cStart(); I2cWriteByte(0xA1);
//发送读器件地址 num=I2cReadByte(1);
//读取数据,发送非应答信号 I2cStop(); returnnum; }9
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2025学年广东省清远市四校联考高一上学期11月期中联考物理试题(解析版)
- 《危险管理与保险》课件
- 《孔径孔容计算》课件
- 单位管理制度范例合集【人力资源管理】
- 《行政职业能力测验》2024年公务员考试察雅县模拟预测试卷含解析
- 《焊接材料培训》课件
- 2014年高考语文试卷(浙江)(解析卷)
- “五步五格五层”例文创生
- 五金配件创新设计与市场需求分析-洞察分析
- 双氯芬酸钾抗炎效应研究-洞察分析
- 连退生产过程操作优化-质量预报监测及诊断
- 梅毒专题知识培训
- 小说阅读抓住矛盾冲突参考资料课件
- 简约企业报刊报纸设计排版word模板
- 矛盾纠纷排查化解登记表
- 大班科学活动 有害的噪音
- 建筑施工成品保护措施
- 鱼骨图PPT模板精品教案0002
- 冠状动脉造影基本知识-
- 油墨组成和分类
- DB37T 5175-2021 建筑与市政工程绿色施工技术标准
评论
0/150
提交评论