IIC通信协议

  • 什么是IIC协议
  • 协议层
    • 起始信号和停止信号
    • 数据的有效性

什么是IIC协议

I2C(Inter-Integrated Circuit)通讯协议是由 Phiilps 公司开发的两线式串行总线,用于连接微控制器及其外围设备。是微电子通信控制领域广泛采用的一种总线标准。

IIC通信由两根线构成,一根为信号线(SDA),另外一根为时钟线(SCL)。故IIC通信的物理层构成如下:

注意!此处的信号线与地址线都是总线。只要有一对设备在使用,总线1便被占用,其他设备不能使用。
为了区分设备,每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同设备之间的访问。当有多个主机同时使用总线时,为了防止数据冲突,会利用仲裁方式决定由哪个设备占用总线。

这里解释一下这个“地址“。这个地址是IIC设备的地址,在IIC通信中,需要指定传送设备的地址。这个应该很容易理解,最常用的IP协议也有IP地址之说,TCP协议也有端口之说。不指定地址,就无法得知数据要发送到哪里去,通信就无法构成。这个不需要过多赘述。

但笔者在刚刚开始使用时,不知道这个地址究竟是以哪一种形式存在在通信中的。在MCU中,初始化IIC接口时,就需要你定义一个IIC地址,这就是你这个IIC接口的通信地址了(一般都是0)代码如下:
hi2c1.Init.OwnAddress1 = 0;

而我们一般用的IIC芯片的地址,如何得知呢?这个地址是以什么形态存在的?是连上MCU后MCU分配的吗?

IIC芯片的地址,都由IIC芯片自身决定。而且一般来说,都会提供几位(多数为3位)给用户自定义。拿LM75A温度传感器芯片来说,IIC通信地址为7bit,前4位是固定的(1001)后三位提供给用户自定义,做在引脚上通过用户输入的电平来决定地址位的高低。用户输入低电平,表示该位为0,用户输入高电平,表示该位为1。若把低三位拉低,地址就为0x90。如图:

协议层


S 表示传输起始信号,此时连接到 I2C 总线上所有的从机都会接收到这个信
号。

Slave Address 表示从机地址,此地址可以是 7 位或 10 位。当主机广播的地
址与某个设备地址相同时,这个设备就被选中了。

之后就是 R/W(传输方向选择位),该位为 0 时,表示后面的数据传输方向
是主机会写信息到被选中的从机;为 1 表示主机会向从机读信息。

当从机已经和从机“匹配”好了,那么此时主机或从机会返回一个应答(ACK)
或非应答(NACK)信号,只有收到信号后,主机才会继续发送或接收数据。这里的“继续”之所以提出来是因为发送和接收,对应从机发出的应答信号和主机发出的应答信号,是重复的。
当主机向从机发送一个停止信号(P),表示不再传输数据。当主机希望停止
接收时,向从机返回一个(NACK),则从机自动停止数据传输。

这是IIC通信的数据帧。可以看出。通信由1位的起始信号,7位地址位,1位表示读写的信号位,一位ACK应答信号,一字节的数据位,1位ACK应答信号,一字节数据位……直到数据全部发送完毕,产生一位终止位。

而IIC通信还支持一种比较复杂的通信模式。通信时和设备的某一寄存器进行通信。如图下方的数据帧。数据帧内发送了两段起始信号S。在第一段数据的DATA中,常常用于表示内部的寄存器地址,在第二次传输中,则是对内部的寄存器进行访问和读写

以上是IIC通信协议层读写的基本过程。

下面我们进一步了解每一个信号在IIC协议中是如何规定的

起始信号和停止信号

起始信号和终止信号是两种特殊的状态,如图 ,当 SLC 为高电平时 SDA 由
高电平向低电平切换,表示通讯的起始;当 SCL 是高电平时 SDA 由低电平向高电平切换,表示通讯的停止。这两种信号一般由主机产生
。如图:

数据的有效性

I2C 的 SDA 用来传输数据,SCL 进行数据的同步,如下图。SDA 数据线在SCL 的每个时钟周期传输一位数据。有效和无效看图即可,需要主要的是当 SCL为低电平时,SDA 数据无效,一般此时 SDA 进行电平转换,为下一次表示数据做好准备


传输方向依靠R/W位来判断

应答信号:响应包括应答(ACK)和非应答(NACK)两种。当设备(主机或从机)接收到 I2C 传输的一个字节数据后,若希望对方继续发送数据,则需要向对方发送应答(ACK)信号,发送方则会继续发送数据;若接收端希望结束数据传输,则向对方发送非应答(NACK)信号。发送方收到后会产生停止信号,结束数据发送。

以上为IIC协议层内容。STM32的IIC架构和STM32中的IIC接口如何使用,下一部分来提及。

后篇:STM32IIC通信详解(硬件实现 基于HAL库编程)


  1. 指多个设备公用的信号线,在一个 I2C 通讯总线中,可连接多个 I2C
    设备通讯,支持多个通讯主机及多个通讯从机 ↩︎

IIC通信协议(硬件实现IIC通信详解I)相关推荐

  1. STM32串口通信详解以及通信异常或者卡死常见问题分析

    STM32串口通信详解以及通信异常或者卡死常见问题分析 目录 STM32串口通信详解以及通信异常或者卡死常见问题分析 一.常见的异常问题 二.STM32的串口简介 1.串口的通讯方式 ①按数据传输方向 ...

  2. Modbus通信从入门到精通_2_Modbus TCP通信详解及仿真(搭建ModbusTCP仿真环境:创建虚拟PLC并进行ModbusTCP通讯;寄存器与PLC中映射关系;适合理解如何编写上位机)

    本篇将会以西门子PLC软件搭建ModbusTCP仿真环境,并通过仿真环境,介绍基础知识及模拟实际应用中写一个简单的通信读取PLC数据方法,并简介了编写上位机的方法. 文章目录 1. 搭建ModbusT ...

  3. OS--进程间通信详解(一)

    OS–进程间通信详解(一) 文章目录 OS--进程间通信详解(一) 一.进程间通信 1.竞态条件 2.临界区 3.忙等互斥 屏蔽中断 锁变量 严格轮询法 Peterson 解法 TSL指令 4.睡眠与 ...

  4. 【STM32】标准库与HAL库对照学习教程八--串口通信详解

    [STM32]标准库与HAL库对照学习教程八--串口通信详解 一.前言 二.准备工作 三.通信的基本概念 1.通信方式 2.串行通信与并行通信 (1)串行通信 (2)并行通信 3.异步通信与同步通信 ...

  5. MATLAB与51单片机进行串口通信详解

    目录 一.51单片机与电脑进行串口通信 二.MATLAB串口通信函数 三.串口属性 四.示例Demo 4.1 MATLAB接收单片机发来的数据 4.2 MATLAB向单片机发送数据控制LED 五.总结 ...

  6. (四)裸机s5pv210之串口通信详解

    裸机s5pv210之串口通信详解 文章目录 裸机s5pv210之串口通信详解 前言 一.电子通信概念 1.同步通信和异步通信 2.电平信号和差分信号 3.并行接口和串行接口 二.串口通信的基本概念 1 ...

  7. RS232串口通信详解

    RS232串口通信详解http://www.21ic.com/jichuzhishi/datasheet/RS232/jiekou/184659.html 串口是计算机上一种非常通用的设备通信协议. ...

  8. OS--进程间通信详解(二)

    OS–进程间通信详解(二) 文章目录 OS--进程间通信详解(二) 一.进程间通信 1.互斥量 Futexes Pthreads中的互斥量 2.管程 3.消息传递 消息传递系统的设计要点 用消息传递解 ...

  9. FPGA串口(UART)通信协议制定与设计思路详解示例

    串口(UART)通信协议制定与设计思路详解 1 概述 本文用于描述规定的串口通信协议,以及传输内容. 2 项目关于串口的要求 a) 支持BIT自检,1路UART上报BIT信息: b) 1路UART接口 ...

最新文章

  1. select 下拉菜单Option对象使用add(elements,index)方法动态添加
  2. Python之 jinja2模板浅析
  3. 静物摄影用光技巧_摄影技巧:冬天的阳光怎样拍才更美?
  4. swift语言和python区别_Swift为什么能成为编程语言中的黑马?
  5. 仅对此用户禁用 java_Spring Security实现禁止用户重复登陆的配置原理
  6. 怎么查看ingress的规则_有机合成中常见的基础理论规则
  7. Java实训项目6:GUI学生信息管理系统 - 实现步骤 - 创建项目
  8. Apache工具库——Apache Commons的使用
  9. 如何在 Ubuntu Linux 中打开终端(小白教程)
  10. 《Python游戏编程快速上手》一第1章 安装Python
  11. 堆排序HeapSort
  12. undefined reference to `swr_init+
  13. TOMCAT8 设置 请求超时时间 和 最大连接数
  14. Java实现国密算法SM2,SM3,SM4,并且实现ECB和CBC模式
  15. C#使用Windows全局钩子(Winform) SetWindowsHookEx
  16. Google SketchUp,一款很有趣的软件,可以创建你所想要的任何3D模型
  17. 手机怎么打开f12_如何使用浏览器的F12调试页面?
  18. bandwagon centos6_x86_bbr
  19. Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day37】—— 并发编程3
  20. HCIP 综合实验(一)

热门文章

  1. 公开课|7月15日“隐私计算+区块链”安全解锁数据价值
  2. mysql是应用软件还是系统软件_数据库管理系统属于系统软件还是应用软件
  3. 2012年下半年软件评测师上午试题
  4. 会话与会话技术(Session)
  5. 快出狱的王欣,快播错过的三年
  6. PLC梯形图设计全自动洗衣机S7-1200博途以及PLC仿真实现之 4. 仿真演示过程
  7. python模糊搜索_在Python中使用Whoosh进行模糊搜索
  8. oracle ebs 查询物料现有量sql,Oracle EBS OPM 查询现有量
  9. CMMI:OPM--对模型做DMAIC
  10. 一:微信公众号 简介