串口、SPI和I2C通信协议

I2C通讯

I2C通讯使用双向二线制同步串行总线(SDA,SCL)

传输步骤
读字节操作
  1. 在SCL线为高电平时,主机通过将SDA线从高电平切换到低电平来启动总线通信(发送起始信号);
  2. 主机向总线发送要与之通信的从机的地址,以及写位;
  3. 主机等待应答;
  4. 主机发送要读的地址;
  5. 主机等待应答;
  6. 在SCL线为高电平时,主机通过将SDA线从高电平切换到低电平来启动总线通信(再次发送起始信号);
  7. 主机等待应答;
  8. 主机开始接收数据;
  9. 传输完每个数据帧后,接收设备将另一个ACK位返回给发送方,以确认已成功接收到该帧;
  10. 随后主机将SCL切换为高电平,然后再将SDA切换为高电平,从而向从机发送停止条件(发送停止信号)。
写字节操作
  1. 在SCL线为高电平时,主机通过将SDA线从高电平切换到低电平来启动总线通信(发送起始信号);
  2. 主机向总线发送要与之通信的从机的地址,以及读/写位;
  3. 主机等待应答;
  4. 主机发送要写的地址;
  5. 主机等待应答;
  6. 主机开始写入数据;
  7. 主机等待应答;
  8. 随后主机将SCL切换为高电平,然后再将SDA切换为高电平,从而向从机发送停止条件(发送停止信号)。

SPI通讯

SPI通讯使用3条总线及片选线,3条总线分别为SCK、MOSI、MISO,NSS/SS

​ NSS、SCK、MOSI信号都由主机控制产生,而MISO的信号由从机产生,主机通过该信号线读取从机的数据。 MOSI与MISO的信号只在NSS为低电平的时候才有效,在SCK的每个时钟周期MOSI和MISO传输一位数据。观察图中的标号处,MOSI及MISO的数据在SCK的上升沿期间变化输出,在SCK的下降沿时被采样。即在SCK的下降沿时刻, MOSI及MISO的数据有效,高电平时表示数据“1”,为低电平时表示数据“0”。在其它时刻,数据无效,MOSI及MISO为下一次表示数据做准备。

四种通讯模式

​ 上面讲述的图SPI通讯时序中的时序只是SPI中的其中一种通讯模式,SPI一共有四种通讯模式, 它们的主要区别是总线空闲时SCK的时钟状态以及数据采样时刻。为方便说明,在此引入“时钟极性CPOL”和“时钟相位CPHA”的概念。

​ 时钟极性CPOL是指SPI通讯设备处于空闲状态时,SCK信号线的电平信号(即SPI通讯开始前、 NSS线为高电平时SCK的状态)。CPOL=0时, SCK在空闲状态时为低电平,CPOL=1时,则相反。

​ 时钟相位CPHA是指数据的采样的时刻,当CPHA=0时,MOSI或MISO数据线上的信号将会在SCK时钟线的“奇数边沿”被采样。当CPHA=1时, 数据线在SCK的“偶数边沿”采样。见图 CPHA =0时的SPI通讯模式及图 CPHA = 1时的SPI通讯模式。

由CPOL及CPHA的不同状态,SPI分成了四种模式,见表SPI的四种模式, 主机与从机需要工作在相同的模式下才可以正常通讯,实际中采用较多的是“模式0”与“模式3”。

主模式收发流程
  1. 控制NSS信号线, 产生起始信号(选择要通讯的从机,图中没有画出);
  2. 把要发送的数据写入到“数据寄存器DR”中, 该数据会被存储到发送缓冲区;
  3. 通讯开始,SCK时钟开始运行。MOSI把发送缓冲区中的数据一位一位地传输出去; MISO则把数据一位一位地存储进接收缓冲区中;
  4. 当发送完一帧数据的时候,“状态寄存器SR”中的“TXE标志位”会被置1,表示传输完一帧,发送缓冲区已空;类似地, 当接收完一帧数据的时候,“RXNE标志位”会被置1,表示传输完一帧,接收缓冲区非空;
  5. 等待到“TXE标志位”为1时,若还要继续发送数据,则再次往“数据寄存器DR”写入数据即可;等待到“RXNE标志位”为1时, 通过读取“数据寄存器DR”可以获取接收缓冲区中的内容。

串口通讯

串口通讯的数据包由发送设备通过自身的TXD接口传输到接收设备的RXD接口。在串口通讯的协议层中, 规定了数据包的内容,它由启始位、主体数据、校验位以及停止位组成,通讯双方的数据包格式要约定一致才能正常收发数据, 其组成见图 串口数据包的基本组成。

方的数据包格式要约定一致才能正常收发数据, 其组成见图 串口数据包的基本组成。

参考链接野火STM32库开发实战指南

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

忱铭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值