常用总线、通信接口
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2012-2-1 7
ቤተ መጻሕፍቲ ባይዱ
1. I2C总线的基本特性 总线的基本特性
硬件结构上具有相同的硬件接口界面。
2012-2-1
8
总线接口器件地址具有很大的独立性。在单主系统中, 总线接口器件地址具有很大的独立性。在单主系统中,每个 接口芯片具有唯一的器件地址,各从器件之间互不干扰, I2C接口芯片具有唯一的器件地址,各从器件之间互不干扰, 相互之间不能进行通信。MCU与I2C器件之间的通信是通过独 相互之间不能进行通信。MCU与 一无二的器件地址来实现的。 一无二的器件地址来实现的。 数据传输首先从最高位开始。 数据传输首先从最高位开始。传输速率在标准模式下可达 100kbit/s,在快速模式下达400kbit/s 400kbit/s, 100kbit/s,在快速模式下达400kbit/s,在高速模式下达 3.4Mbit/s。 3.4Mbit/s。 它是一个真正的多主机总线。 它是一个真正的多主机总线。如果两个或更多主机同时初始 化数据传输,可以通过冲突检测和仲裁防止数据被破坏。 化数据传输,可以通过冲突检测和仲裁防止数据被破坏。 软件操作的一致性。任何器件通过I 总线与MCU MCU进行数据传 软件操作的一致性。任何器件通过I2C总线与MCU进行数据传 送的方式基本一样,决定了I 总线软件编写的一致性。 送的方式基本一样,决定了I2C总线软件编写的一致性。
2012-2-1 21
bit Read_N_Bytes(uchar SlaveAdr,uchar n,uchar *buffer) { //从I2C总线读 个字节 总线读n个字节 从 总线读 uchar i; IIC_Start(); Write_Byte(SlaveAdr); //向总线发送接收器地址 向总线发送接收器地址 if(!Check_Acknowledge()) //等待接收器应答信号 等待接收器应答信号 return FALSE; for(i=0;i<n;i++) { buffer[i]=Read_Byte(); if(i!=n) SEND_0(); //发送应答 发送应答 else SEND_1(); //发送非应答 发送非应答 } IIC_Stop(); return TRUE; }
2012-2-1 18
void Write_Byte(uchar b) { //向IIC总线写一个字节 uchar i; for(i=0;i<8;i++) if((b<<i)&0x80) SEND_1(); else SEND_0(); }
2012-2-1 19
bit Write_N_Bytes(uchar *buffer,uchar n) { //向I2C总线写n个字节 uchar i; IIC_Start(); for(i=0;i<n;i++) { Write_Byte(buffer[i]); if(!Check_Acknowledge()) { IIC_Stop(); return(i==n); } } IIC_Stop(); return TRUE; }
数据线SDA/时钟线SCL(接上拉电阻)
2012-2-1 9
2.I2C总线工作原理 总线工作原理
(1)I2C总线信号类型 开始信号:SCL为高电平时 SDA由高电平向低电平跳变 为高电平时, 由高电平向低电平跳变, 开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开 始传送数据。 始传送数据。 结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结 结束信号:SCL为高电平时,SDA由低电平向高电平跳变, 为高电平时 由低电平向高电平跳变 束传送数据。 束传送数据。 应答信号:接收数据的器件在接收到8bit数据后, 8bit数据后 应答信号:接收数据的器件在接收到8bit数据后,向发送数 据的器件(发送器)发出特定的低电平脉冲, 据的器件(发送器)发出特定的低电平脉冲,表示已收到数 发送器接收到应答信号后, 据。发送器接收到应答信号后,根据实际情况作出是否继续 传递信号的判断。若未收到应答信号, 传递信号的判断。若未收到应答信号,由判断为接收器出现 故障。 故障。 数据只能在SCL为低电平时才能改变 SCL为高电平时SDA须 只能在SCL为低电平时才能改变, 为高电平时SDA 数据只能在SCL为低电平时才能改变,SCL为高电平时SDA须 稳定。 稳定。 起始信号与结束信号都是由主器件产生。 起始信号与结束信号都是由主器件产生。 2012-2-1 10
2012-2-1
11
(2)I2C总线数据传输 ) 总线数据传输
主器件和从器件都可以工作于接收和发送状态。 主器件和从器件都可以工作于接收和发送状态。 总线必须由主器件(通常为单片机)控制,主器件产生串行 总线必须由主器件(通常为单片机)控制, 时钟控制总线的传输方向,并产生起始和停止条件。 时钟控制总线的传输方向,并产生起始和停止条件。 在起始信号结束后,主器件将发送一个用于选择从器件地址 在起始信号结束后, 位地址码和一个数据方向位(R/W),方向位为“0”表 ),方向位为 的7位地址码和一个数据方向位(R/W),方向位为“0”表 示主器件把数据写到所选择的从器件中, 示主器件把数据写到所选择的从器件中,此时主器件作为发 送器,而从器件作为接收器;方向位为“1”表示主器件从 送器,而从器件作为接收器;方向位为“1”表示主器件从 所选择的从器件中读取数据,此时主器件作为接收器, 所选择的从器件中读取数据,此时主器件作为接收器,而从 器件作为发送器。在寻址字节后是按指定读、 器件作为发送器。在寻址字节后是按指定读、写操作的数据 字节与应答位。在数据传送完成后主器件必须发送停止信号。 字节与应答位。在数据传送完成后主器件必须发送停止信号。
4
串行通信的基本特征是数据逐位顺序进行传送 串行通信的格式及约定( 同步方式、通讯速率、 串行通信的格式及约定(如:同步方式、通讯速率、 数据块格式、信号电平……等)不同,形成了多种 数据块格式、信号电平 等 不同, 串行通信的协议与接口标准。常见的有: 串行通信的协议与接口标准。常见的有: 通用异步收发器(UART)——本课程介绍的串口 ☞通用异步收发器 本课程介绍的串口 通用串行总线( ☞通用串行总线(USB) ) 单总线( Wire) 单总线(1-Wire) ☞I2C总线 总线 ☞CAN总线 总线 ☞SPI总线 总线 ☞1394 标准……等等 ☞RS-485,RS-232C,RS422A标准 , , 标准 等等
2012-2-1 13
#include<string.h> #include<reg52.h> #include<intrins.h> #include"aiic_51.h" sbit SCL=P1^6; sbit SDA=P1^7; void DELAY(uint t) { while(t!=0) t--; }
2012-2-1 5
SPI、I2C、1-Wire、RS232是目前单片机应用系统 、 、 、 是目前单片机应用系统 中最常用的几个串行总线接口。 中最常用的几个串行总线接口。 与并行扩展总线相比, 与并行扩展总线相比,串行扩展总线能够最大程度 发挥最小系统的资源功能、简化连接线路, 发挥最小系统的资源功能、简化连接线路,缩小电 路板面积、扩展性好,可简化系统设计。 路板面积、扩展性好,可简化系统设计。 串行总线的缺点是数据吞吐容量小,信号传输较慢。 串行总线的缺点是数据吞吐容量小,信号传输较慢。 但随着CPU芯片工作频率的提高,以及串行总线的 但随着 芯片工作频率的提高, 芯片工作频率的提高 功能增强,这些缺点将逐步淡化。 功能增强,这些缺点将逐步淡化。
2012-2-1
2
异步通信 字符格式:规定有起始位、数据位、奇偶校 验位、停止位等 波特率:是衡量数据传送速率的指标(bps)。
2012-2-1
3
数据传送方向 单工方式只允许数据按照一个固定的方向传
送
半双工方式每次只能有一个站发送,另一个
站接收
全双工方式允许通信双方同时进行发送和接
收
2012-2-1
2012-2-1
6
3.9.1 I2C总线 总线
Circuit) I2C(Inter Integrated Circuit)常译为内 部集成电路总线,或集成电路间总线, 部集成电路总线,或集成电路间总线,它是 由Philips公司推出的芯片间串行传输总线。 Philips公司推出的芯片间串行传输总线。 公司推出的芯片间串行传输总线 使用2线实现数据通信。 使用2线实现数据通信。 1根串行数据线(SDA) 根串行数据线(SDA) 1根串行时钟线(SCL)。 根串行时钟线(SCL)。
串行通信:分为同步通信(SYNC)与异步通信(ASYNC)两种 两 方式。(实际通信中,没有绝对的“异步” 或“同步”,只 是按不同的程度上“同步”。) 异步通信:一个字节内同步,而字节之间“不同步”, : 称之为“异步”。 同步通信:大于一个字节的“帧数据”或“块数据”内 同步,称之为“帧同步”或“块同步”。称 之为“同步”。 (这时实际上“帧数据” 或“块数据”之间也是“异步”)
2012-2-1
14
void IIC_Start(void) { //启动I2C总线的函数,当SCL为高电平时使SDA产生 一个负跳变 SDA=1; SCL=1; DELAY(DELAY_TIME); SDA=0; DELAY(DELAY_TIME); SCL=0; DELAY(DELAY_TIME); }
2012-2-1 16
void SEND_0(void) { //发送 ,在SCL为低电平时使 发送0, 为低电平时使SDA信号变为低 发送 为低电平时使 信号变为低 SCL=0; SDA=0; SCL=1; DELAY(DELAY_TIME); SCL=0; DELAY(DELAY_TIME); } void SEND_1(void) { //发送 ,在SCL为低电平时使 发送1, 为低电平时使SDA信号变为高 发送 为低电平时使 信号变为高 SCL=0; SDA=1; SCL=1; DELAY(DELAY_TIME); SCL=0; DELAY(DELAY_TIME); }
2012-2-1 12
在51上用P1口模拟I2C (c语言)
/* 电平模拟函数和基本读写函数 void IIC_Start(void); void IIC_Stop(void); void SEND_0(void); void SEND_1(void); bit Check_Acknowledge(void); void Write_Byte(uchar b); bit Write_N_Bytes(uchar *buffer,uchar n); bit Read_N_Bytes(uchar SlaveAdr,uchar n,uchar *buffer); uchar Read_Byte(void); */
2012-2-1
20
uchar Read_Byte(void)reentrant { //从I2C总线读一个字节 从 总线读一个字节 uchar b=0,i; for(i=0;i<8;i++) { SDA=1; //释放总线 释放总线 SCL=1; //接受数据 接受数据 DELAY(10); F0=SDA; DELAY(10); SCL=0; if(F0==1) { b=b<<1; b=b|0x01; } else b=b<<1; } return b; }
2012-2-1 17
bit Check_Acknowledge(void) { //发送完一个字节后检验设备的应答信号 SDA=1; SCL=1; DELAY(DELAY_TIME/2); F0=SDA; DELAY(DELAY_TIME/2); SCL=0; DELAY(DELAY_TIME); if(F0==1) return FALSE; return TRUE; }
3.9 常用总线、通信接口 常用总线、
数据通信的基本方式可分为并行通信与串行通信两种: 两 并行通信: 并行通信:是指利用多条数据传输线将一个数据的各位 同时传送。 特点: 是传输速度快,适用于短距离通信。 串行通信:是指利用一条传输线将数据一位位地顺序 串行通信 传送。 特点: 是通信线路简单,利用电话或电报线路就可 实现通信,降低成本,适用于远距离通信, 但传输速度慢。
2012-2-1 15
void IIC_Stop(void) { //终止I2C总线,当SCL为高电平时使SDA产生一个正跳变 SDA=0; SCL=1; DELAY(DELAY_TIME); SDA=1; DELAY(DELAY_TIME); SCL=0; DELAY(DELAY_TIME); }
ቤተ መጻሕፍቲ ባይዱ
1. I2C总线的基本特性 总线的基本特性
硬件结构上具有相同的硬件接口界面。
2012-2-1
8
总线接口器件地址具有很大的独立性。在单主系统中, 总线接口器件地址具有很大的独立性。在单主系统中,每个 接口芯片具有唯一的器件地址,各从器件之间互不干扰, I2C接口芯片具有唯一的器件地址,各从器件之间互不干扰, 相互之间不能进行通信。MCU与I2C器件之间的通信是通过独 相互之间不能进行通信。MCU与 一无二的器件地址来实现的。 一无二的器件地址来实现的。 数据传输首先从最高位开始。 数据传输首先从最高位开始。传输速率在标准模式下可达 100kbit/s,在快速模式下达400kbit/s 400kbit/s, 100kbit/s,在快速模式下达400kbit/s,在高速模式下达 3.4Mbit/s。 3.4Mbit/s。 它是一个真正的多主机总线。 它是一个真正的多主机总线。如果两个或更多主机同时初始 化数据传输,可以通过冲突检测和仲裁防止数据被破坏。 化数据传输,可以通过冲突检测和仲裁防止数据被破坏。 软件操作的一致性。任何器件通过I 总线与MCU MCU进行数据传 软件操作的一致性。任何器件通过I2C总线与MCU进行数据传 送的方式基本一样,决定了I 总线软件编写的一致性。 送的方式基本一样,决定了I2C总线软件编写的一致性。
2012-2-1 21
bit Read_N_Bytes(uchar SlaveAdr,uchar n,uchar *buffer) { //从I2C总线读 个字节 总线读n个字节 从 总线读 uchar i; IIC_Start(); Write_Byte(SlaveAdr); //向总线发送接收器地址 向总线发送接收器地址 if(!Check_Acknowledge()) //等待接收器应答信号 等待接收器应答信号 return FALSE; for(i=0;i<n;i++) { buffer[i]=Read_Byte(); if(i!=n) SEND_0(); //发送应答 发送应答 else SEND_1(); //发送非应答 发送非应答 } IIC_Stop(); return TRUE; }
2012-2-1 18
void Write_Byte(uchar b) { //向IIC总线写一个字节 uchar i; for(i=0;i<8;i++) if((b<<i)&0x80) SEND_1(); else SEND_0(); }
2012-2-1 19
bit Write_N_Bytes(uchar *buffer,uchar n) { //向I2C总线写n个字节 uchar i; IIC_Start(); for(i=0;i<n;i++) { Write_Byte(buffer[i]); if(!Check_Acknowledge()) { IIC_Stop(); return(i==n); } } IIC_Stop(); return TRUE; }
数据线SDA/时钟线SCL(接上拉电阻)
2012-2-1 9
2.I2C总线工作原理 总线工作原理
(1)I2C总线信号类型 开始信号:SCL为高电平时 SDA由高电平向低电平跳变 为高电平时, 由高电平向低电平跳变, 开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开 始传送数据。 始传送数据。 结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结 结束信号:SCL为高电平时,SDA由低电平向高电平跳变, 为高电平时 由低电平向高电平跳变 束传送数据。 束传送数据。 应答信号:接收数据的器件在接收到8bit数据后, 8bit数据后 应答信号:接收数据的器件在接收到8bit数据后,向发送数 据的器件(发送器)发出特定的低电平脉冲, 据的器件(发送器)发出特定的低电平脉冲,表示已收到数 发送器接收到应答信号后, 据。发送器接收到应答信号后,根据实际情况作出是否继续 传递信号的判断。若未收到应答信号, 传递信号的判断。若未收到应答信号,由判断为接收器出现 故障。 故障。 数据只能在SCL为低电平时才能改变 SCL为高电平时SDA须 只能在SCL为低电平时才能改变, 为高电平时SDA 数据只能在SCL为低电平时才能改变,SCL为高电平时SDA须 稳定。 稳定。 起始信号与结束信号都是由主器件产生。 起始信号与结束信号都是由主器件产生。 2012-2-1 10
2012-2-1
11
(2)I2C总线数据传输 ) 总线数据传输
主器件和从器件都可以工作于接收和发送状态。 主器件和从器件都可以工作于接收和发送状态。 总线必须由主器件(通常为单片机)控制,主器件产生串行 总线必须由主器件(通常为单片机)控制, 时钟控制总线的传输方向,并产生起始和停止条件。 时钟控制总线的传输方向,并产生起始和停止条件。 在起始信号结束后,主器件将发送一个用于选择从器件地址 在起始信号结束后, 位地址码和一个数据方向位(R/W),方向位为“0”表 ),方向位为 的7位地址码和一个数据方向位(R/W),方向位为“0”表 示主器件把数据写到所选择的从器件中, 示主器件把数据写到所选择的从器件中,此时主器件作为发 送器,而从器件作为接收器;方向位为“1”表示主器件从 送器,而从器件作为接收器;方向位为“1”表示主器件从 所选择的从器件中读取数据,此时主器件作为接收器, 所选择的从器件中读取数据,此时主器件作为接收器,而从 器件作为发送器。在寻址字节后是按指定读、 器件作为发送器。在寻址字节后是按指定读、写操作的数据 字节与应答位。在数据传送完成后主器件必须发送停止信号。 字节与应答位。在数据传送完成后主器件必须发送停止信号。
4
串行通信的基本特征是数据逐位顺序进行传送 串行通信的格式及约定( 同步方式、通讯速率、 串行通信的格式及约定(如:同步方式、通讯速率、 数据块格式、信号电平……等)不同,形成了多种 数据块格式、信号电平 等 不同, 串行通信的协议与接口标准。常见的有: 串行通信的协议与接口标准。常见的有: 通用异步收发器(UART)——本课程介绍的串口 ☞通用异步收发器 本课程介绍的串口 通用串行总线( ☞通用串行总线(USB) ) 单总线( Wire) 单总线(1-Wire) ☞I2C总线 总线 ☞CAN总线 总线 ☞SPI总线 总线 ☞1394 标准……等等 ☞RS-485,RS-232C,RS422A标准 , , 标准 等等
2012-2-1 13
#include<string.h> #include<reg52.h> #include<intrins.h> #include"aiic_51.h" sbit SCL=P1^6; sbit SDA=P1^7; void DELAY(uint t) { while(t!=0) t--; }
2012-2-1 5
SPI、I2C、1-Wire、RS232是目前单片机应用系统 、 、 、 是目前单片机应用系统 中最常用的几个串行总线接口。 中最常用的几个串行总线接口。 与并行扩展总线相比, 与并行扩展总线相比,串行扩展总线能够最大程度 发挥最小系统的资源功能、简化连接线路, 发挥最小系统的资源功能、简化连接线路,缩小电 路板面积、扩展性好,可简化系统设计。 路板面积、扩展性好,可简化系统设计。 串行总线的缺点是数据吞吐容量小,信号传输较慢。 串行总线的缺点是数据吞吐容量小,信号传输较慢。 但随着CPU芯片工作频率的提高,以及串行总线的 但随着 芯片工作频率的提高, 芯片工作频率的提高 功能增强,这些缺点将逐步淡化。 功能增强,这些缺点将逐步淡化。
2012-2-1
2
异步通信 字符格式:规定有起始位、数据位、奇偶校 验位、停止位等 波特率:是衡量数据传送速率的指标(bps)。
2012-2-1
3
数据传送方向 单工方式只允许数据按照一个固定的方向传
送
半双工方式每次只能有一个站发送,另一个
站接收
全双工方式允许通信双方同时进行发送和接
收
2012-2-1
2012-2-1
6
3.9.1 I2C总线 总线
Circuit) I2C(Inter Integrated Circuit)常译为内 部集成电路总线,或集成电路间总线, 部集成电路总线,或集成电路间总线,它是 由Philips公司推出的芯片间串行传输总线。 Philips公司推出的芯片间串行传输总线。 公司推出的芯片间串行传输总线 使用2线实现数据通信。 使用2线实现数据通信。 1根串行数据线(SDA) 根串行数据线(SDA) 1根串行时钟线(SCL)。 根串行时钟线(SCL)。
串行通信:分为同步通信(SYNC)与异步通信(ASYNC)两种 两 方式。(实际通信中,没有绝对的“异步” 或“同步”,只 是按不同的程度上“同步”。) 异步通信:一个字节内同步,而字节之间“不同步”, : 称之为“异步”。 同步通信:大于一个字节的“帧数据”或“块数据”内 同步,称之为“帧同步”或“块同步”。称 之为“同步”。 (这时实际上“帧数据” 或“块数据”之间也是“异步”)
2012-2-1
14
void IIC_Start(void) { //启动I2C总线的函数,当SCL为高电平时使SDA产生 一个负跳变 SDA=1; SCL=1; DELAY(DELAY_TIME); SDA=0; DELAY(DELAY_TIME); SCL=0; DELAY(DELAY_TIME); }
2012-2-1 16
void SEND_0(void) { //发送 ,在SCL为低电平时使 发送0, 为低电平时使SDA信号变为低 发送 为低电平时使 信号变为低 SCL=0; SDA=0; SCL=1; DELAY(DELAY_TIME); SCL=0; DELAY(DELAY_TIME); } void SEND_1(void) { //发送 ,在SCL为低电平时使 发送1, 为低电平时使SDA信号变为高 发送 为低电平时使 信号变为高 SCL=0; SDA=1; SCL=1; DELAY(DELAY_TIME); SCL=0; DELAY(DELAY_TIME); }
2012-2-1 12
在51上用P1口模拟I2C (c语言)
/* 电平模拟函数和基本读写函数 void IIC_Start(void); void IIC_Stop(void); void SEND_0(void); void SEND_1(void); bit Check_Acknowledge(void); void Write_Byte(uchar b); bit Write_N_Bytes(uchar *buffer,uchar n); bit Read_N_Bytes(uchar SlaveAdr,uchar n,uchar *buffer); uchar Read_Byte(void); */
2012-2-1
20
uchar Read_Byte(void)reentrant { //从I2C总线读一个字节 从 总线读一个字节 uchar b=0,i; for(i=0;i<8;i++) { SDA=1; //释放总线 释放总线 SCL=1; //接受数据 接受数据 DELAY(10); F0=SDA; DELAY(10); SCL=0; if(F0==1) { b=b<<1; b=b|0x01; } else b=b<<1; } return b; }
2012-2-1 17
bit Check_Acknowledge(void) { //发送完一个字节后检验设备的应答信号 SDA=1; SCL=1; DELAY(DELAY_TIME/2); F0=SDA; DELAY(DELAY_TIME/2); SCL=0; DELAY(DELAY_TIME); if(F0==1) return FALSE; return TRUE; }
3.9 常用总线、通信接口 常用总线、
数据通信的基本方式可分为并行通信与串行通信两种: 两 并行通信: 并行通信:是指利用多条数据传输线将一个数据的各位 同时传送。 特点: 是传输速度快,适用于短距离通信。 串行通信:是指利用一条传输线将数据一位位地顺序 串行通信 传送。 特点: 是通信线路简单,利用电话或电报线路就可 实现通信,降低成本,适用于远距离通信, 但传输速度慢。
2012-2-1 15
void IIC_Stop(void) { //终止I2C总线,当SCL为高电平时使SDA产生一个正跳变 SDA=0; SCL=1; DELAY(DELAY_TIME); SDA=1; DELAY(DELAY_TIME); SCL=0; DELAY(DELAY_TIME); }