浅谈三种通信协议_UART、IIC、SPI

浅谈三种通信协议_UART\IIC\SPI

为了回顾三种常用通信协议的区别,特此写一篇文章来回顾回顾。
怎么区分和记忆比较好呢?看时钟线和数据线。

1.UART(Universal Asynchronous Receiver/Transmitter,全双工通用异步收发器)
首先作个名词解释,全双工是指允许数据在两个方向上同时传输,异步的意思是通信双方使用各自的始终控制数据传输,这意味着若需要数据传输不丢包,必须得双方约定好用同样的频率去传输数据,也就是要在相同波特率下才能把数据相对完整地传输。
该协议有两条数据线(Tx、Rx),故能满足全双工通信,无时钟线,故而是异步通信。需要通信双方有相同的波特率才能通信。

2.IIC
该协议只有一条数据线(SDA),故只能满足半双工通信,也就是数据在一个时间内只能收或者发,有一条时钟线(SCL),因为需要同步通信
在IIC中,首先会发出开始信号,然后发出第一个字节,里面包含了七位的地址,和最后一位的读写标记(R/W),这里的信息就是与哪一个IIC设备通信。若从设备存在,则会将主机的第九位拉低。从设备通过读取后续数据进行通信,直到主设备发出终止信号。
开始信号是SCL在保持高电平时,SDA从高变低(类似于导演的action手势,从上往下),终止信号是SCL在保持高电平时,SDA从低变高(就像乐团结束时,指挥家往上挥手并握拳)。
数据取SCL高电平期间SDA的数据。

//产生IIC起始信号
void IIC_Start(void)
{
	SDA_OUT();     	//sda线输出
	SDA_DATA(1);	
	SCL_OUT(1);  	  
	delay_us(20);

	SDA_DATA(0);	//START:when CLK is high,DATA change form high to low 
	delay_us(20);
	SCL_OUT(0); 	//钳住IIC总线,准备发送或接收数据
}	
//产生IIC停止信号
void IIC_Stop(void)
{
	SDA_OUT();		//sda线输出
	SCL_OUT(0);  
	SDA_DATA(0);	//STOP:when CLK is high DATA change form low to high
 	delay_us(20);
 	SCL_OUT(1);  
	SDA_DATA(1);	//发送IIC总线结束信号
	delay_us(20);
}  

3.SPI(Serial Peripheral Interface)串行外围设备接口
该协议有两条数据线(MOSI、MISO),故能满足全双工通信,有一条时钟线(SCLK),因为需要满足同步通信。一个片选信号线(SS),由主机发送,如图所示,一个SPI主机连接了多个从机,当片选信号为低时选中某个相连从机。
在这里插入图片描述
因为SPI是同步通信,故需要时钟信号,如下图,SPI通信有两种读取数据方式——在时钟信号的上升沿或下降沿读取。
请添加图片描述

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值