单片机之IIC通信协议「建议收藏」

单片机之IIC通信协议「建议收藏」概念I2C(IIC,Inter-IntegratedCircuit),两线式串行总线,由PHILIPS公司开发用于连接微控制器及其外围设备。它是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,高速IIC总线一般可达400kbps以上。硬件IIC:硬件IIC速度比模拟快,并且可以用DMA。硬件IIC会自动匹配与从机的通信时序,…

大家好,又见面了,我是你们的朋友全栈君。

概念

I2C(IIC,Inter-Integrated Circuit),两线式串行总线,由PHILIPS公司开发用于连接微控制器及其外围设备。它是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,高速IIC总线一般可达400kbps以上。

硬件IIC:硬件IIC速度比模拟快,并且可以用DMA。硬件IIC会自动匹配与从机的通信时序,只需配置好硬件IIC的一些函数就可以了。
软件IIC:用软件模拟IIC的时序图,从而与从机实现通信

IIC传输特点

1.半双工:半双工通信允许信号在两个方向上传输,但某一时刻只允许信号在一个信道上单向传输,可切换方向的单工通信

2.串行同步通信:数据通过一根SDA线传输,SCL提供同步时钟。同步通信的最大特点就是通信双方的SCL时钟线连在一起。

3.主从式通信:每一个通信周期的发起和结束都是由主设备来做的,从设备只有被动的响应主设备,没法自己自发的去做任何事情。有主机从机之分,支持多个从机。

单片机之IIC通信协议「建议收藏」

4.传输顺序:高位在前,低位在后

5.只有SDA与SCL两根线,但是主机与从机之间还需要一根共地线,不然从机怎么知道主机发过来的电平时序是高还是低呢!

6.SDA与SCL总线一定要接上拉电阻。

7,传输速率:I2C协议v2.1规定了三种速率(bps)
                       -100K
                       -400K
                       -3.4M

通信速率是按照主机的SCL的速度来通信,SCL上的通信速度要同时小于主从规定的最大通信速度

一主多从的通信过程:主设备在每个通信周期会先发8位的从设备地址,其实8位中只有7位是从设备地址(datasheet有设备地址),还有1位表示主设备下面要写入还是读出(由从设备决定)到总线(主设备是以广播的形式发送的,只要是总线上的所有从设备其实都能收到这个信息)。然后总线上的每个从设备都能收到这个地址,并且收到地址后和自己的设备地址比较看是否相等。如果相等说明主设备本次通信就是给我说话,如果不想等说明这次通信与我无关,不用听了不管了。

 

IIC时序 

空闲状态:SDA与SCL总线都处于高电平状态

起始信号时序与结束信号时序

单片机之IIC通信协议「建议收藏」

应答信号时序

单片机之IIC通信协议「建议收藏」

发送器每发送一个字节,就在时钟脉冲9期间释放数据线,由接收器反馈一个应答信号。 应答信号为低电平(0)时,规定为有效应答位(ACK简称应答位),表示接收器已经成功地接收了该字节;应答信号为高电平(1)时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。 

数据的有效性

单片机之IIC通信协议「建议收藏」

SCL处于高电平期间,SDA的数据不能发生变换;SCL处于低电平期间,SDA的数据才允许发生变换。

对从机的读字节与写字节时序需要按照从机的时序图来写

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/133025.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月9日 下午9:16
下一篇 2022年6月9日 下午9:36


相关推荐

  • 二叉搜索树(二叉排序树)

    二叉搜索树(二叉排序树)一 概念二叉搜索树又称二叉排序树 具有以下性质 若它的左子树不为空 则左子树上所有节点的值都小于根节点的值若它的右子树不为空 则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树注意 二叉搜索树中序遍历的结果是有序的二 基本操作 1 查找元素思路 二叉搜索树的左子树永远是比根节点小的 而它的右子树则都是比根节点大的值 当前节点比要找的大就往左走 当前元素比要找的小就往右走 publicNodese intkey if root

    2026年3月18日
    2
  • CSS媒体查询(@media)全面解析

    CSS媒体查询(@media)全面解析随着移动设备的快速普及 用户不再只是通过传统的电脑系来浏览 Web 内容 越来越多的用户开始使用各种尺寸的智能手机 平板电脑或者其它设备来浏览 Web 内容 为了确保使用不同设备的用户都能拥有不错的体验就需要用到媒体查询 媒体查询是 CSS 样式表最重要的功能之一 所谓媒体查询指的就是根据不同的媒体类型 设备类型 和条件来区分各种设备 例如 电脑 手机 平板电脑 盲文设备等 并为它们分别定义不同的 CSS 样式 媒体查询能让 CSS 可以更精确的作用于不同的设备或同一设备的不同条件 让所有用户都能得到很

    2026年3月19日
    3
  • [大模型实战 08 – 完结篇] 告别孤岛:拥抱 MCP 协议,为大模型打造标准“USB 接口”

    [大模型实战 08 – 完结篇] 告别孤岛:拥抱 MCP 协议,为大模型打造标准“USB 接口”

    2026年3月14日
    2
  • linux tomcat自动重启(linux关闭服务器命令)

    这里重启的条件是之前已经启动了tomcat服务器的情况下第一步:进入linux下tomcat目录,这里需要看你的tomcat配置在linux的哪个位置下,下面只是我个人的配置目录,不代表全部cd/usr/local/src/tomcat/bin第二步:查看当前启动的tomcat使用的进程,通过查看,我们发现tomcat占用了1630端口ps-ef|greptomc…

    2022年4月11日
    117
  • Redis学习之sadd命令

    Redis学习之sadd命令目录 sadd 命令语法返回值例子 sadd 命令 Redissadd 命令将一个或多个成员元素加入到集合中 已经存在于集合的成员元素将被忽略 语法 saddkeymembe member 假如集合 key 不存在 则创建一个只包含添加的元素作成员的集合 当集合 key 不是集合类型时 返回一个错误 返回值被添加到集合中的新元素的数量 不包括被忽略的元素 例子 127

    2026年3月18日
    2
  • c语言xml解析器libxm2

    c语言xml解析器libxm2写这篇文章的原因有如下几点:1)C++标准库中没有操作XML的方法,用C++操作XML文件必须熟悉一种函数库,LIBXML2是其中一种很优秀的XML库,而且它同时支持多种编程语言;2)LIBXML2库的Tutorial写得不太好,尤其是编码转换的部分,不适用于中文编码的转换;3)网上的大多数关于Libxml2的介绍仅仅是翻译了自带的资料,没有详细介绍如何在windows平台下进行编程,更很少提到如

    2022年7月12日
    56

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号