搭建机器人电控系统——通信协议——IIC通信原理及其实例(库函数+模拟IO口)

通信协议

串口通信详解
IIC通信详解
SPI通信详解
CAN通信详解


计算机与外界的信息交互称为通信

基本的通信方式分为两种:
串行通信:所传送的数据各位按顺序一位一位地发送或接受,占用资源少,速度相对较慢。
并行通信:所传送的数据的各个位是同时发送或接受。速度快,占用引脚资源多。

通信的速率
比特率(bit rate):每秒能传输的二进制位数。
波特率(Baud rate):每秒能传输的码元数(不一定是二进制)。
对于数字信号而言,波特率=比特率。

串行通信的种类
同步通信:带时钟同步信号传输,通讯双方是受同一个时钟源控制,如I2C、SPI、USART。
异步通信:不带时钟信号同步,不是同一个时钟源,按照一定规则传输,如USART、UART、单总线、CAN。

串行通信的方式
单工:只允许单方向传输,只需一条信号线
半双工:允许非同时进行的双方向传输,只需一条信号线。
全双工:允许同时进行双方向传输,需要两条信号线。

通信协议是主控MCU与各类驱动器、传感器之间实现信息交互的基本逻辑,搞懂通信协议在机器人的电控系统中占有很重要的地位。在接下来的内容中,我将分别讲解串口IICSPICAN通信协议的区别原理以及结合实际一些模块的代码部分。


IIC通信

由于传统串口传输只能局限于两个固定设备之间,不能满足大量设备之间的通信要求,所以有了IIC,它是一种两线式串行同步半双工传输总线(分别是数据线SDA和时钟线SCL)。尤其适用于短距离的板内通信

IIC的寻址方式

I2C总线上的每一个持有I2C通信协议的设备都有一个唯一的地址,主从设备之间的数据传输是建立在地址的基础上,主设备在传输前需要先指定从设备的地址。

寻址格式

固定地址(4位) + 可编程地址(3位) + 读写控制位(1位)
1010(硬件出产地址) A2A1A0(硬件拉高或拉低) R/W

*根据硬件不同,一般来说一个设备前7位都是固定的。

①如EEPROM芯片AT24C02地址为10100000(写)/10100001(读),它是利用IIC与MCU进行板内通信的。
在这里插入图片描述

②又如MPU6050利用IIC通信的陀螺仪芯片,它的地址为01101000(0x68)。
在这里插入图片描述


IIC的传输协议

空闲状态:SCL和SDA都保持高电平
传输状态
①起始状态:SCL保持高电平时,SDA由高到低下降沿跳变触发,触发后,整个总线将处于忙状态,由本次数据传输的主从设备独占,其他I2C设备无法访问。
②数据传输:主设备在SCL上的每一个时钟脉冲,都会同时在SDA线上传输一个数据位(先发高位再发低位,注意与串口协议不同)。
③应答信号:每个数据传输的字节完成后,都会跟上一个应答位。在SCL保持高电平期间SDA为低表示应答成功;在SCL保持高电平期间SDA为高表示应答失败。
④停止信号:当一次应答信号结束后,若不想进行数据传输,主机产生一个停止信号。SCL为高期间SDA由低到高上升沿跳变触发。
在这里插入图片描述

IIC的应答机制

IIC传输的要点就是,传输一个字节后面必然紧跟一个“响应”信号,这个响应信号可能来自主机或者从机,具体看传输方向。

①主机 发到 从机
主机对从机发送一个字节后,主机读取从机的应答信号(主机读SDA线)。
主机读取SDA为低电平,应答成功。
主机读取SDA为高电平,应答失败。
②从机 发到 主机
主机读取从机发送过来的一个字节后,主机要向从机发送一个应答信号(主机写SDA线)。
主机写SDA为低电平,从机收到后知道主机应答成功,继续传输。
主机写SDA为高电平,从机收到后知道主机无应答,从机停止传输,等待从主机过来的停止信号。

*起始信号和结束信号总是由主设备产生(IIC有主从的区别!!!)


IIC传输协议函数(根据IIC传输协议,模拟IO口IIC)

以IO口模拟IIC协议为例:

初始化状态
①初始化IIC,保持空闲状态
在这里插入图片描述

发送状态(主机)
①起始信号
在这里插入图片描述
PS:SDA_OUT相当于让SDA对应的IO口配置成输出模式
②停止信号
在这里插入图片描述

③发送数据(发送一个字节)
在这里插入图片描述

④发送完一个字节后,发送ACK应答位
·应答成功信号
在这里插入图片描述

·应答失败信号
在这里插入图片描述

接收状态(主机):
①接收数据(接收数据后判断ACK应答位,来判断上次传输是否应答成功)
在这里插入图片描述


IIC正常通信过程(很重要!!)

写操作

第一步,主机首先发送从机地址写(可以有多个从机)来确定是与哪一个从机进行通信。
第二步,从机发送“ACK”应答信号。
第三步,主机再发送相应寄存器地址
第四步,从机发送“ACK”应答信号。
第五步,主机将要写入寄存器的数据发送到从机。
第六步,从机发送“ACK”应答信号。

读操作

第一步,主机首先发送从机地址写(可以有多个从机)来确定是与哪一个从机进行通信。
第二步,从机发送“ACK”应答信号。
第三步,主机再发送相应寄存器地址
第四步,从机发送“ACK”应答信号。
第五步,主机重新发送从机地址读(可以有多个从机)来确定是与哪一个从机进行通信。
第六步,从机发送“ACK”应答信号。
第七步,主机读取寄存器的数据,并在读取完成后发送应答信号给从机。

IIC通信实例——MPU6050陀螺仪模块(模拟IO口模式)

①MPU6050 IIC写操作
在这里插入图片描述

②MPU6050 IIC读操作
在这里插入图片描述

关于地址:
首先,在MPU6050的参考手册中,我们可以得到MPU6050地址和相关一些寄存器的值。
在这里插入图片描述

如何初始化MPU6050模块?
在这里插入图片描述

整体思路:通过向MPU6050不同寄存器写命令来唤醒MPU6050,设置量程,参考系等。

如何从MPU6050模块读取数据?
(以读取陀螺仪XYZ轴数据为例,同样对其他可读参数也如此)
从MPU6050相应寄存器读取来获得数据。
在这里插入图片描述


IIC通信实例——EEPROM模块(库函数模式)

①IIC 库函数配置(设定好模式、设备地址、通信速率/时钟频率
在这里插入图片描述

②写操作(库函数)
在这里插入图片描述

③读操作(库函数)
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值