常用的嵌入式通信协议

总线串并口同步/异步速率工作方式线数拓扑通信距离
UART异步全双工2线458支持总线型
USRT同步 全双工三线  
I2C同步慢100K、400K半双工2线总线型
SPI同步块50M全双工3/4环形
USB同步半双工2(D+D-)树形最长5M
CAN      
        

 

I2C:可以支持0kHz~5MHz的设备:普通模式(100kHz即100kbps)、快速模式(400kHz)、快速模式+(1MHz)、高速模式(3.4MHz)和超高速模式(5MHz)。短距离、低速。master之间不能直接通信,每个master都可以和所有的slave通信,分时使用总线。

协议:

开始条件:总线空闲时SCL和SDA都处于高电平状态;开始标志:SDA拉低;多个主设备同时希望获取总线,由先拉低的主设备获取;通信期间,其他主设备的总线请求无效(总线仲裁器控制);

地址帧:7位地址+一位读写控制位。(I2C每次必须传输8位数据,8位传输完成,接收端获取SDA权限,发送一个ACK)

数据帧:每个数据帧8位传送完成,接收方发送ACK信号,表示成功接收;

停止条件:在SDA为低电平期间将SCL拉高,然后拉高SDA

重复开始条件:一次通信完成后,不产生停止条件,在SCL为低电平期间将SDA拉高,然后拉高SCA。接着master产生 一个开始信号。期间不会释放总线,不会被其他主设备夺取总线控制权。

【补充】:数据在SCL处于低电平时放到SDA上,并在SCL变为高电平后进行采样。

参考:https://blog.csdn.net/jasonchen_gbd/article/details/77431951

 

SPI:每增加一个slave,就需要在master上增加一个CS引脚。当一个master接多个slaves的时候,疯狂增长的引脚连接是难以忍受的,并且对紧凑的PCB layout是一个挑战。 高速率全双工;同步;数据交换(SPI设备不能只充当接受者或者发送者);多主模式难以实现,没有总线仲裁策略

协议:SCK信号线只由主设备控制,没有指定的流控制,没有应答机制确认是否接收到数据

时钟极性的配置:主设备在时钟的下降沿发送数据,从设备在时钟的上升沿接收数据。因此主设备这边SPI时钟极性应该配置为下降沿有效

 Bus-Width 的作用是指定地址总线到 Master 设备之间数据传输的单位.
        例如, 我们想要往 Master 设备里面的 SSPBUF 写入 16 Byte 大小的数据: 首先, 给 Master 设备的配置寄存器设置 Bus-Width 为 Byte; 然后往 Master 设备的 Tx-Data 移位寄存器在地址总线的入口写入数据, 每次写入 1 Byte 大小的数据(使用 writeb 函数); 写完 1 Byte 数据之后, Master 设备里面的 Tx-Data 移位寄存器会自动把从地址总线传来的1 Byte 数据移入 SSPBUF 里; 上述动作一共需要重复执行 16 次.

 

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值