精华内容
下载资源
问答
  • SPI(Serial Peripheral Interface - 串行外设接口)是一种用于短距离通信(主要是嵌入式系统中)的同步串行通信接口规范,这种接口由Motorola发明,已经成了一种事实标准。广泛用于各种MCU处理器中,同传感器,串行...

    三种常用的串行数据传输总线

    一、SPI

    1.1 概念

    SPI(Serial Peripheral Interface - 串行外设接口)是一种用于短距离通信(主要是嵌入式系统中)的同步串行通信接口规范,这种接口由Motorola发明,已经成了一种事实标准。广泛用于各种MCU处理器中,同传感器,串行ADC、DAC、存储器、SD卡以及LCD等进行数据连接

    有主(Master - 控制器)和从(Slave - 外设)之分,在总线中也就只有一个“主人”,其它都是处于服从的位置,也就是Slave,它是一种有时钟信号的同步串行总线,从器件的寻址是靠专用的片选信号线SS来实现的。

    1.2 主要的信号线

    SPI总线由4根主要的信号线组成以实现数据在主设备(Master)和从设备(Slave)之间的全双工(收、发同时执行)同步(由时钟同步)通信。

    SCLK:串行时钟(由主设备输出),每个时钟周期将会移出一个新的数据位;

    MOSI:主设备输出⇒从设备输入,数据由主设备进入从设备,器件A上的MOSI线连接到器件B上的MOSI线。

    MISO:主设备输入⇐ 从设备输出,数据由从设备送到主设备(或其它从设备,采用菊花链配置),器件A上的MISO线连接到器件B上的MISO线。

    SS(或SSN): 从设备选中(低电平有效),用于主设备控制从设备用,当该从选择信号线有效的时候表示主设备正在向相应的从设备发送数据或从相应的从设备请求数据。

    1.3 四种工作模式

    由时钟的极性(CPOL)和相位(CPHA)构成了4种不同的数据传输模式(0,1,2,3),分别对应四种可能的时钟配置。

    CPOL: 时钟的极性,它控制着时钟信号的初始逻辑状态(0:低电平空闲状态;1:高电平空闲状态)。

    CPHA: 时钟相位,它控制了数据转换和时钟转换之间的关系(0:第一个跳变沿;1:第二个跳变沿)。

    模式0 CPOL = 0,CPHA = 0:

    空闲时钟电平为低电平,在第一个跳变沿工作

    模式0 CPOL = 0,CPHA = 1:

    空闲时钟电平为低电平,在第二个跳变沿工作

    模式2 CPOL = 1,CPHA = 0:

    空闲时钟电平为高电平,在第一个跳变沿工作

    模式3 CPOL = 1,CPHA = 1:

    空闲时钟电平为高电平,在第二个跳变沿工作

    在这里插入图片描述

    1.4 主从连接方式

    在这里插入图片描述

    1.5 优点

    1.支持全双工通信

    2.推挽驱动(跟漏极开路正相反)提供了比较好的信号完整性和较高的速度

    3.比I²C或SMBus吞吐率更高

    4.协议非常灵活支持“位”传输,不仅限于8-bit一个字节的传输

    5.可任意选择的信息大小、内容、以及用途

    6.信号都是单方向的,非常容易进行电流隔离

    7.对于时钟的速度没有上限,有进一步提高速度的潜力,很多MCU的SPI传输速率可以高达50Msps,可用于数据采集以及图像的传输。

    1.6 缺点

    1.相比于I²C总线需要更多的管脚

    2.没有寻址机制,在共享的总线连接时需要通过片选信号支持多个设备的访问

    3.一般只支持一个主设备(取决于设备的硬件构成)

    4.没有查错机制

    5.相对于RS-232, RS-485, 或CAN-总线,只能近距离传输

    6.SPI不支持热交换(动态地增加一个节点)

    1.7 使用场景

    SPI比较适合系统中有一个主设备和少量的从设备,而且每一个从设备都有一个单独的“从设备选择”信号。

    二、IIC

    2.1概念

    IIC(Inter-Integrated Circuit)总线是一种由 PHILIPS 公司开发的两线式串行总线,用于连接微控制器及其外围设备。它是由数据线 SDA 和时钟 SCL 构成的串行总线,可发送和接收数据。在 CPU 与被控 IC 之间、 IC 与 IC 之间进行双向传送, 高速 IIC 总线一般可达 400kbps 以上。

    跟SPI对比,I2C没有天生的主、从之分,也就是说挂在两根线(数据线SDA和时钟线SCL)上的所有器件都是生而平等的。数据线SDA和时钟线SCL需要上拉电阻。

    在这里插入图片描述

    2.2 三种信号

    I2C 总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答
    信号。

    开始信号: SCL 为高电平时, SDA 由高电平向低电平跳变,开始传送数据。
    在这里插入图片描述

    结束信号: SCL 为高电平时, SDA 由低电平向高电平跳变,结束传送数据。
    在这里插入图片描述

    **应答信号:**接收数据的 IC 在接收到 8bit 数据后,向发送数据的 IC 发出特定的低电平脉冲,表示已收到数据。
    在这里插入图片描述

    在这里插入图片描述

    2.3 数据读写

    IIC总线上的每一个设备都可以作为主设备或者从设备,而且每一个设备都会对应一个唯一的地址(地址通过物理接地或者拉高),主从设备之间就通过这个地址来确定与哪个器件进行通信。

    主设备在传输有效数据之前要先指定从设备的地址,地址指定的过程和上面数据传输的过程一样,只不过大多数从设备的地址是7位的,然后协议规定再给地址添加一个最低位用来表示接下来数据传输的方向,0表示主设备向从设备写数据,1表示主设备向从设备读数据

    **注:**在通常的应用中,我们把CPU带I2C总线接口的模块作为主设备,把挂接在总线上的其他设备都作为从设备。并不是真的主从关系。

    IIC协议在读写数据时,总是要发送器件地址,这里需要注意的是,不是主机给从机发送地址,而是主机给地址总线上发送地址,挂IIC总线上的所有从机都能收到地址,如果发过来的地址和自己的地址匹配上了,从机就会给主机一个应答,这样就建立起来了一个通讯。

    主设备往从设备写数据:

    在这里插入图片描述

    1) 产生start位

    2) 传送器件地址ID_Address,器件地址的最后一位为数据的传输方向位,R/W,低电平0表示主机往从机写数据(W)。ACK应答,应答是从机发送给主机的应答。

    3)传送写入器件寄存器地址,即数据要写入的位置。

    4)传送要写入的数据。

    5)产生stop信号。

    主设备往从设备读数据:

    在这里插入图片描述

    1)产生start信号

    2)传送器件地址(写ID_Address),ACK。

    3)传送字地址(写REG_Address),ACK。

    **4)**再次产生start信号

    5)再传送一次器件地址,ACK。

    6)读取一个字节的数据,读数据最后结束前无应答ACK信号。

    7) 产生stop信号。

    注意:

    IIC读时序要写两次器件地址,首先传送器件地址到总线上找到器件,然后写入寄存器地址,也就是word address找到需要读取数据的地址。然后再传输一次器件地址后开始读数据。

    2.4 IIC驱动

    与驱动相关的函数定义

    //IO方向设置
    #define SDA_IN()  {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)8<<28;}
    #define SDA_OUT() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)3<<28;}
    //IO操作函数	 
    #define IIC_SCL    PBout(6) //SCL
    #define IIC_SDA    PBout(7) //SDA	 
    #define READ_SDA   PBin(7)  //输入SDA 
    //IIC所有操作函数
    void IIC_Init(void);                //初始化IIC的IO口				 
    void IIC_Start(void);				//发送IIC开始信号
    void IIC_Stop(void);	  			//发送IIC停止信号
    void IIC_Send_Byte(u8 txd);			//IIC发送一个字节
    u8 IIC_Read_Byte(unsigned char ack);//IIC读取一个字节
    u8 IIC_Wait_Ack(void); 				//IIC等待ACK信号
    void IIC_Ack(void);					//IIC发送ACK信号
    void IIC_NAck(void);				//IIC不发送ACK信号
    

    具体函数的实现

    //初始化IIC
    void IIC_Init(void)
    {					     
    	GPIO_InitTypeDef GPIO_InitStructure;
    	RCC_APB2PeriphClockCmd(	RCC_APB2Periph_GPIOB, ENABLE );	//使能GPIOB时钟
    	   
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;   //推挽输出
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_Init(GPIOB, &GPIO_InitStructure);
    	GPIO_SetBits(GPIOB,GPIO_Pin_6|GPIO_Pin_7); 	//PB6,PB7 输出高,空闲状态
    }
    //产生IIC起始信号
    void IIC_Start(void)
    {
    	SDA_OUT();     //sda线输出
    	IIC_SDA=1;	  	  
    	IIC_SCL=1;
    	delay_us(4);
     	IIC_SDA=0;    //START:when CLK is high,DATA change form high to low 
    	delay_us(4);
    	IIC_SCL=0;    //钳住I2C总线,准备发送或接收数据 
    }	  
    //产生IIC停止信号
    void IIC_Stop(void)
    {
    	SDA_OUT();    //sda线输出
    	IIC_SCL=0;
    	IIC_SDA=0;    //STOP:when CLK is high DATA change form low to high
     	delay_us(4);
    	IIC_SCL=1; 
    	IIC_SDA=1;    //发送I2C总线结束信号
    	delay_us(4);							   	
    }
    //发送数据后,等待应答信号到来
    //返回值:1,接收应答失败,IIC直接退出
    //        0,接收应答成功,什么都不做
    u8 IIC_Wait_Ack(void)
    {
    	u8 ucErrTime=0;
    	SDA_IN();      //SDA设置为输入  
    	IIC_SDA=1;
    	delay_us(1);	   
    	IIC_SCL=1;
    	delay_us(1);	 
    	while(READ_SDA)
    	{
    		ucErrTime++;
    		if(ucErrTime>250)
    		{
    			IIC_Stop();
    			return 1;
    		}
    	}
    	IIC_SCL=0;    //时钟输出0 	   
    	return 0;  
    } 
    //产生ACK应答
    void IIC_Ack(void)
    {
    	IIC_SCL=0;
    	SDA_OUT();
    	IIC_SDA=0;
    	delay_us(2);
    	IIC_SCL=1;
    	delay_us(2);
    	IIC_SCL=0;
    }
    //不产生ACK应答		    
    void IIC_NAck(void)
    {
    	IIC_SCL=0;
    	SDA_OUT();
    	IIC_SDA=1;
    	delay_us(2);
    	IIC_SCL=1;
    	delay_us(2);
    	IIC_SCL=0;
    }					 				     
    //IIC发送一个字节
    //返回从机有无应答
    //1,有应答
    //0,无应答			  
    void IIC_Send_Byte(u8 txd)
    {                        
        u8 t;   
    	SDA_OUT(); 	    
        IIC_SCL=0;            //拉低时钟开始数据传输
        for(t=0;t<8;t++)
        {              
            //IIC_SDA=(txd&0x80)>>7;
    		if((txd&0x80)>>7)
    			IIC_SDA=1;
    		else
    			IIC_SDA=0;
    		txd<<=1; 	  
    		delay_us(2);       //对TEA5767这三个延时都是必须的
    		IIC_SCL=1;
    		delay_us(2); 
    		IIC_SCL=0;	
    		delay_us(2);
        }	 
    } 	    
    //读1个字节,ack=1时,发送ACK,ack=0,发送nACK   
    u8 IIC_Read_Byte(unsigned char ack)
    {
    	unsigned char i,receive=0;
    	SDA_IN();        //SDA设置为输入
        for(i=0;i<8;i++ )
    	{
            IIC_SCL=0; 
            delay_us(2);
    		IIC_SCL=1;
            receive<<=1;
            if(READ_SDA)receive++;   
    		delay_us(1); 
        }					 
        if (!ack)
            IIC_NAck();        //发送nACK
        else
            IIC_Ack();         //发送ACK   
        return receive;
    }
    

    2.5优点

    1.管脚/信号数量少,即便挂了很多的设备,也只用两根线;

    2.可以适应不同的从设备的要求;

    3.可以支持多个主设备;

    4.引入了ACK/NACK功能以提升应对错误的能力

    2.6缺点

    1.增加了固件和底层硬件的复杂度

    2.增加了协议的负荷,降低了数据传输的吞吐率

    3.需要上拉电阻,限制了时钟的速度,增加了功耗

    4.半双工

    2.7 使用场景

    I2C比较适合复杂、多样化、需要通信设备灵活扩展的场景。

    三、UART

    3.1概念

    UART 通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种通用的串行异步全双工数据收发传输器(总线)。

    把“要传输的数据”在串行通信与并行通信之间转换。在嵌入式领域,作为把并行信号转成串行信号的硬件设备,UART通常被集成于MCU内部。

    UART包括RS232、RS449、RS423、TTL电平等接口标准规范和总线标准规范。

    在这里插入图片描述

    3.2 串口配置基本属性

    1)波特率

    波特率是一个衡量通信速度的参数。它表示每秒钟传送的bit的个数。例如9600波特表示每秒钟发送9600个bit。串口通常用的波特率为1200、2400、4800、9600、14400、19200、28800、38400、57600、115200、128000、256000。其中如果串口速率越高,其传输的距离和稳定性就有所下降。一般常用为9600和115200。

    2)数据位

    数据位表征通信中实际数据位的参数。当计算机发送一个信息包,其中需指定有效数据位,一般有5、7和8位。常规使用一般定义为8位。

    3)停止位

    停止位表征单包数据的最后一位。典型的值为1,1.5和2位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,在传输中可能存在不同步的情况,因此停止位不仅仅是表示传输的结束,同时也是校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。

    4)奇偶校验位

    在串口通信中一种简单的检错方式。偶奇校验,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个1。

    例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。如果是奇校验,校验位为1,这样就有3个逻辑高位,保证逻辑高为奇数个。

    3.3程序示例

    void uart_init(u32 bound){
      //GPIO端口设置
      GPIO_InitTypeDef GPIO_InitStructure;
      USART_InitTypeDef USART_InitStructure;
      NVIC_InitTypeDef NVIC_InitStructure;
    	 
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);	//使能时钟
      
    	//USART1_TX   GPIOA.9初始化
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;	//推挽输出
      GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.9
       
      //USART1_RX	  GPIOA.10初始化
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
      GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.10  
    
      //Usart1 NVIC配置
       NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
       NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级
       NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;		//子优先级
    	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			//IRQ通道使能
    	NVIC_Init(&NVIC_InitStructure);	//初始化NVIC
      
       //USART初始化配置
    
    	USART_InitStructure.USART_BaudRate = bound;//波特率
    	USART_InitStructure.USART_WordLength = USART_WordLength_8b;//数据位
    	USART_InitStructure.USART_StopBits = USART_StopBits_1;//停止位
    	USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验
    	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制
    	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;	//收发模式
    
      USART_Init(USART1, &USART_InitStructure); //初始化串口1
      USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启串口接受中断
      USART_Cmd(USART1, ENABLE);                    //使能串口 
    
    }
    
    u8 USART_RX_BUF[USART_REC_LEN];   //缓冲区
    u16 USART_RX_STA=0;               //接收状态标志
    
    void USART1_IRQHandler(void) {   //串口1中断服务程序
    	u8 Res;
    	if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  {   //接受中断(收到的数据必须以0x0d,0x0a结尾)
    		Res =USART_ReceiveData(USART1);	//读取接受到的数据
    		
    		if((USART_RX_STA&0x8000)==0){  //接受未完成
    			if(USART_RX_STA&0x4000){   //接收到了0x0d
    				if(Res!=0x0a)USART_RX_STA=0;//接收错误重新开始
    				else USART_RX_STA|=0x8000;	//接收完成
    				}
    			else {	   //没有接收到0x0d
    				if(Res==0x0d)USART_RX_STA|=0x4000;
    				else{
    						USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
    						USART_RX_STA++;
    						if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收错误重新开始 
    				}		 
    			}
    		}   		 
         } 
    }
    

    3.4 优点

    1.只需要使用两根信号线就可以实现全双工的数据传输(不算电源线)

    2.无需时钟信号

    3.有一个奇偶校验位提供硬件级别的错误检查

    4.数据包的结构可以通过两端之间的协调来改变,比较灵活

    5.相对比较容易配置和运行

    3.5 缺点

    1.与并行通信以及USART相比,数据传输的速度较慢

    2.帧的大小被限定为最多9位

    3.不支持多个从设备或多个主设备的功能

    4.收发两个器件UART的波特率差别不能超过10%

    3.6 使用场景

    UART比较适合单点对单点的连接,因为UART没有标准的方式来寻址不同的设备或共享管脚

    参考

    https://blog.csdn.net/qq_38410730/article/details/80312357

    https://www.bilibili.com/read/cv4149989

    https://www.cnblogs.com/ninghechuan/p/8595423.html

    https://blog.csdn.net/zuo_an/article/details/89151110

    展开全文
  •  通用串行总线(USB)正迅速成为大部分PC外设的标准接口。由于它具有出色的速度、灵活性,并且支持设备热插拔,因而正在取代RS-232和并行打印机端口。工业和医疗设备制造商也非常希望使用这种总线,但苦于没有很好的...
  • 电路功能与优势通用串行总线(USB)正迅速成为大部分PC外设的标准接口。由于它具有出色的速度、灵活性,并且支持设备热插拔,因而正在取代RS232和并行打印机端口。工业和医疗设备制造商也非常希望使用这种总线,但苦于...
  •  通用串行总线(USB)正迅速成为大部分PC外设的标准接口。由于它具有出色的速度、灵活性,并且支持设备热插拔,因而正在取代RS-232和并行打印机端口。工业和医疗设备制造商也非常希望使用这种总线,但苦于没有很好的...
  • I2C总线的工作原理与应用I2C(Inter-IntegratedCircuit)总线是一种由PHILIPS公司开发的两线式串行总线用于连接微控制器及其外围设备。I2C总线产生于在80年代,最初为音频和视频设备开发,如今主要在服务器
  •  I2C(Inter-Integrated Circuit)总线是由PHILIPS公司开发的两线式串行总线用于连接微控制器及其外围设备。是微电子通信控制领域广泛采用的一种总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式...
  • I2C(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。 I2C总线产生于在80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件状态...
  • IIC总线协议

    2016-12-01 16:28:58
    I2C总线是飞利浦(PHLIPS)公司推出的一种串行总线用于连接微控制器及其外围设备, I2C串行总线有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。 它仅通过两根信号线就可以完成对所有挂载在I2C总线上的从...

    面试的时候主要会遇到的IIC问题如下

    • 介绍一下你了解的I2C?

    I2C总线是飞利浦(PHLIPS)公司推出的一种串行总线,用于连接微控制器及其外围设备, I2C串行总线有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。 它仅通过两根信号线就可以完成对所有挂载在I2C总线上的从器件进行操作。这样的好处是可以大大的节省我们微处理器的IO口资源。

    • I2C到底可以挂载多少个器件呢?

    答:IIC协议规定,在启动总线后第1字节的高7位是从节点的寻址地址,其中高四位为器件类型识别符,接着三位为片选,最后一位为读写位,当为1时为读操作,为0时为写操作,所以具体挂载多少个器件由I2C地址决定,7位寻址地址减去1个广播地址0x00不用,所以有2^7=128 - 1 = 127,那就是127个地址, 所以理论上可以挂127个从器件。

    • I2C如何同时挂载多个同一种器件(地址相同的器件)?

    答:理论上是不会这样设计的,如果一定要这样做的话,可以通过硬件上设计,控制器件是否挂载总线来实现(方法可用一个开关电路切断器件SDA或者SCL是否接入总线来实现)

    • I2C总线的主机与从机之间是如何通信的呢?

    I2C总线的主机与从机之间的通信主要和I2C的时序有关。在通信开始的时候SCL与SDA都置为高电平,此时为总线空闲时间。当SCL为高电平期间SDA的电平被拉低,标志这总线的启动。当SCL为高电平期间SDA的电平被拉高,标志这总线的终止。在进行数据传送时,SCL为高电平期间,SDA上的数据必须保持稳定,只有在SCL的信号为低电平时,SDA上的高电平才允许变化。所以只要我们根据芯片手册正确的写好IIC的时序,按时序发送器件地址(不同的器件的地址不同)以及数据,就可以使主机与从机之间通信。

    • I2C总线的仲裁你知道吗?

    总线上可能挂接有多个器件,有时会发生两个或多个主器件同时想占用总线的情况,这种情况叫做总线竞争。I2C总线具有多主控能力,可以对发生在SDA线上的总线竞争进行仲裁,其仲裁原则是这样的:当多个主器件同时想占用总线时,如果某个主器件发送高电平,而另一个主器件发送低电平,则发送电平与此时SDA总线电平不符的那个器件将自动关闭其输出级。总线竞争的仲裁是在两个层次上进行的。首先是地址位的比较,如果主器件寻址同一个从器件,则进入数据位的比较,从而确保了竞争仲裁的可靠性。由于是利用I2C总线上的信息进行仲裁,因此不会造成信息的丢失。

    • I2C时钟信号(SCL)的同步问题

    在I2C总线上传送信息时的时钟同步信号是由挂接在SCL线上的所有器件的逻辑“与”完成的。SCL线上由高电平到低电平的跳变将影响到这些器件,一旦某个器件的时钟信号下跳为低电平,将使SCL线一直保持低电平,使SCL线上的所有器件开始低电平期。此时,低电平周期短的器件的时钟由低至高的跳变并不能影响SCL线的状态,于是这些器件将进入高电平等待的状态。当所有器件的时钟信号都上跳为高电平时,低电平期结束,SCL线被释放返回高电平,即所有的器件都同时开始它们的高电平期。其后,第一个结束高电平期的器件又将SCL线拉成低电平。这样就在SCL线上产生一个同步时钟。可见,时钟低电平时间由时钟低电平期最长的器件确定,而时钟高电平时间由时钟高电平期最短的器件确定。

    • I2C总线的其他注意点

    1、进行数据传送时,在SCL为高电平期间,SDA线上电平必须保持稳定,只有SCL为低时,才允许SDA线上电平改变状态。并且每个字节传送时都是高位在前。


    2、对于应答信号,ACK=0时为有效应答位,说明从机已经成功接收到该字节,若为1则说明接受不成功。


    3、如果从机需要延迟下一个数据字节开始传送的时间,可以通过把SCL电平拉低并保持来强制主机进入等待状态。


    4、主机完成一次通信后还想继续占用总线在进行一次通信,而又不释放总线,就要利用重启动信号Sr。它既作为前一次数据传输的结束,又作为后一次传输的开始。


    5、总线冲突时,按“低电平优先”的仲裁原则,把总线判给在数据线上先发送低电平的主器件。


    6、在特殊情况下,若需禁止所有发生在I2C总线上的通信,可采用封锁或关闭总线,具体操作为在总线上的任一器件将SCL锁定在低电平即可。


    7、SDA仲裁和SCL时钟同步处理过程没有先后关系,而是同时进行的。

    展开全文
  • I2C总线协议详解

    2020-07-27 19:23:32
    I2C(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线用于连接微控制器及其外围设备。I2C总线产生于在80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件...
  • IIC总线了解

    2020-06-01 20:04:43
    I2C(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线用于连接微控制器及其外围设备。I2C总线产生于上世纪80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个...

    ​简介:
    I2C(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。I2C总线产生于上世纪80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件状态的通信。

    I2C总线最主要的优点是其简单性和有效性。由于接口直接在组件之上,因此I2C总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。总线的长度可高达25英尺,并且能够以10Kbps的最大传输速率支持40个组件。I2C总线的另一个优点是,它支持多主控(multimastering),其中任何能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。

    构成:

    I2C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,最高传送速率100kbps,采用7位寻址,但是由于数据传输速率和应用功能的迅速增加,I2C总线也增强为快速模式(400Kbits/s)和10位寻址以满足更高速度和更大寻址空间的需求。各种被控制电路均并联在这条总线上,但就像电话机一样只有拨通各自的号码才能工作,所以每个电路和模块都有唯一的地址。

       在信息的传输过程中,I2C总线上并接的每一模块电路既是主控器(或被控器),又是发送器(或接收器),这取决于它所要完成的功能。CPU发出的控制信号分为地址码和控制量两部分,地址码用来选址,即接通需要控制
    

    的电路,确定控制的种类;控制量决定该调整的类别(如对比度、亮度等)及需要调整的量。这样,各控制电路虽然挂在同一条总线上,却彼此独立,互不相关。

    I2C总线在传送数据过程中共有三种类型信号,它们分别是:起始信号、终止信号和应答信号。
    起始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
    终止信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。

    获取更多请关注微信公众号“伊斯电子编程”

    展开全文
  • IIC总线总结

    2018-09-18 12:05:02
    这种总线类型是由飞利浦半导体公司在八十年代初设计出来的一种简单、双向、二线制、同步串行总线主要是用来连接整体电路(ICS) ,IIC是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片...

    I2C(Inter-Integrated Circuit)集成电路总线是用于连接微控制器及其外围设备。
    这种总线类型是由飞利浦半导体公司在八十年代初设计出来的一种简单、双向、二线制、同步串行总线,主要是用来连接整体电路(ICS) ,IIC是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实时数据传输的控制源。这种方式简化了信号传输总线接口。

    2C 总线支持任何IC 生产过程(NMOS CMOS、双极性)。两线――串行数据(SDA)和串行时钟 (SCL)线在连接到总线的器件间传递信息。每个器件都有一个唯一的地址识别(无论是微控制器——MCU、LCD 驱动器、存储器或键盘接口),而且都可以作为一个发送器或接收器(由器件的功能决定)。很明显,LCD 驱动器只是一个接收器,而存储器则既可以接收又可以发送数据。除了发送器和接收器外器件在执行数 据传输时也可以被看作是主机或从机。主机是初始化总线的数据传输并产生允许传输的时钟信号 的器件。此时,任何被寻址的器件都被认为是从机。.

    总线特征
    1、只要求两条总线线路:一条串行数据线SDA,一条串行时钟线SCL;

    2、每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机/从机关系软件设定地址,主机可以作为主机发送器或主机接收器;

    3、它是一个真正的多主机总线,如果两个或更多主机同时初始化,数据传输可以通过冲突检测和仲裁防止数据被破坏;

    4、串行的8 位双向数据传输位速率在标准模式下可达100kbit/s,快速模式下可达400kbit/s,高速模式下可达3.4Mbit/s;

    5、连接到相同总线的IC 数量只受到总线的最大电容400pF 限制。

    展开全文
  • IIC总线时序

    2017-01-06 17:33:45
    I2C(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线用于连接微控制器及其外围设备。I2C总线产生于在80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件...
  • IIC总线

    千次阅读 2009-09-02 22:09:00
    IIC总线 I2C(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线用于连接微控制器及其外围设备。I2C总线产生于在80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括...
  • 自学笔记I2C总线

    2019-12-05 20:34:23
    I2C总线I2C总线概述I2C总线特点I2C总线工作原理数据有效性数据传输...I2C(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线用于连接微控制器及其外围设备。 I2C总线特点 I2C总线最主要...
  • IIC总线原理

    2011-09-18 11:44:01
    I2C(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线用于连接微控制器及其外围设备。I2C总线产生于在80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件...
  •  I2C(Inter-Integrated Circuit)总线是由PHILIPS公司开发的两线式串行总线用于连接微控制器及其外围设备。是微电子通信控制领域广泛采用的一种总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式...
  • IIC总线时序详解

    千次阅读 2017-07-06 09:52:45
    I2C(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线用于连接微控制器及其外围设备。I2C总线产生于在80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件...
  • i2c总线时序

    2016-01-13 09:52:11
    I2C(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线用于连接微控制器及其外围设备。I2C总线产生于在80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件...
  • I2C总线协议

    2018-01-22 18:59:33
     I2C(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线用于连接微控制器及其外围设备。I2C总线产生于在80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件...
  • 浅谈I2C总线

    2017-12-15 10:43:00
    I2C(Inter-Integrated Circuit)总线是一种由PHILIPS公司在80年代开发的两线式串行总线用于连接微控制器及其外围设备。I2C总线最主要的优点是其简单性和有效性。由于接口直接在组件之上,因此I2C总线占用的空间...
  • I2C总线时序

    2017-11-02 09:12:37
    I2C(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线用于连接微控制器及其外围设备。I2C总线产生于在80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件...
  • I2C/IIC(Inter-Integrated Circuit)总线是由PHILIPS公司于1982年针对MCU/传感器等应用需求而研制的一种两线式串行总线用于连接MCU及传感器等设备。 I2C总线的主要特点如下: (1)I2C总线最主要的优点是其简单性和...
  • iic总线从机仲裁_IIC

    2020-11-30 19:46:59
    IIC 简介IC(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线用于连接微控制器及其外围设备。I2C总线产生于在80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个...

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 308
精华内容 123
关键字:

串行总线主要用于连接