IIC通信协议(硬件实现IIC通信详解I)
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库编程)
指多个设备公用的信号线,在一个 I2C 通讯总线中,可连接多个 I2C
设备通讯,支持多个通讯主机及多个通讯从机 ↩︎
IIC通信协议(硬件实现IIC通信详解I)相关推荐
- STM32串口通信详解以及通信异常或者卡死常见问题分析
STM32串口通信详解以及通信异常或者卡死常见问题分析 目录 STM32串口通信详解以及通信异常或者卡死常见问题分析 一.常见的异常问题 二.STM32的串口简介 1.串口的通讯方式 ①按数据传输方向 ...
- Modbus通信从入门到精通_2_Modbus TCP通信详解及仿真(搭建ModbusTCP仿真环境:创建虚拟PLC并进行ModbusTCP通讯;寄存器与PLC中映射关系;适合理解如何编写上位机)
本篇将会以西门子PLC软件搭建ModbusTCP仿真环境,并通过仿真环境,介绍基础知识及模拟实际应用中写一个简单的通信读取PLC数据方法,并简介了编写上位机的方法. 文章目录 1. 搭建ModbusT ...
- OS--进程间通信详解(一)
OS–进程间通信详解(一) 文章目录 OS--进程间通信详解(一) 一.进程间通信 1.竞态条件 2.临界区 3.忙等互斥 屏蔽中断 锁变量 严格轮询法 Peterson 解法 TSL指令 4.睡眠与 ...
- 【STM32】标准库与HAL库对照学习教程八--串口通信详解
[STM32]标准库与HAL库对照学习教程八--串口通信详解 一.前言 二.准备工作 三.通信的基本概念 1.通信方式 2.串行通信与并行通信 (1)串行通信 (2)并行通信 3.异步通信与同步通信 ...
- MATLAB与51单片机进行串口通信详解
目录 一.51单片机与电脑进行串口通信 二.MATLAB串口通信函数 三.串口属性 四.示例Demo 4.1 MATLAB接收单片机发来的数据 4.2 MATLAB向单片机发送数据控制LED 五.总结 ...
- (四)裸机s5pv210之串口通信详解
裸机s5pv210之串口通信详解 文章目录 裸机s5pv210之串口通信详解 前言 一.电子通信概念 1.同步通信和异步通信 2.电平信号和差分信号 3.并行接口和串行接口 二.串口通信的基本概念 1 ...
- RS232串口通信详解
RS232串口通信详解http://www.21ic.com/jichuzhishi/datasheet/RS232/jiekou/184659.html 串口是计算机上一种非常通用的设备通信协议. ...
- OS--进程间通信详解(二)
OS–进程间通信详解(二) 文章目录 OS--进程间通信详解(二) 一.进程间通信 1.互斥量 Futexes Pthreads中的互斥量 2.管程 3.消息传递 消息传递系统的设计要点 用消息传递解 ...
- FPGA串口(UART)通信协议制定与设计思路详解示例
串口(UART)通信协议制定与设计思路详解 1 概述 本文用于描述规定的串口通信协议,以及传输内容. 2 项目关于串口的要求 a) 支持BIT自检,1路UART上报BIT信息: b) 1路UART接口 ...
最新文章
- select 下拉菜单Option对象使用add(elements,index)方法动态添加
- Python之 jinja2模板浅析
- 静物摄影用光技巧_摄影技巧:冬天的阳光怎样拍才更美?
- swift语言和python区别_Swift为什么能成为编程语言中的黑马?
- 仅对此用户禁用 java_Spring Security实现禁止用户重复登陆的配置原理
- 怎么查看ingress的规则_有机合成中常见的基础理论规则
- Java实训项目6:GUI学生信息管理系统 - 实现步骤 - 创建项目
- Apache工具库——Apache Commons的使用
- 如何在 Ubuntu Linux 中打开终端(小白教程)
- 《Python游戏编程快速上手》一第1章 安装Python
- 堆排序HeapSort
- undefined reference to `swr_init+
- TOMCAT8 设置 请求超时时间 和 最大连接数
- Java实现国密算法SM2,SM3,SM4,并且实现ECB和CBC模式
- C#使用Windows全局钩子(Winform) SetWindowsHookEx
- Google SketchUp,一款很有趣的软件,可以创建你所想要的任何3D模型
- 手机怎么打开f12_如何使用浏览器的F12调试页面?
- bandwagon centos6_x86_bbr
- Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day37】—— 并发编程3
- HCIP 综合实验(一)
热门文章
- 公开课|7月15日“隐私计算+区块链”安全解锁数据价值
- mysql是应用软件还是系统软件_数据库管理系统属于系统软件还是应用软件
- 2012年下半年软件评测师上午试题
- 会话与会话技术(Session)
- 快出狱的王欣,快播错过的三年
- PLC梯形图设计全自动洗衣机S7-1200博途以及PLC仿真实现之 4. 仿真演示过程
- python模糊搜索_在Python中使用Whoosh进行模糊搜索
- oracle ebs 查询物料现有量sql,Oracle EBS OPM 查询现有量
- CMMI:OPM--对模型做DMAIC
- 一:微信公众号 简介