码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • IIC通信----基本原理


    STM32F103标准库开发—目录


    1、IIC 简介

    IIC(Inter-Integrated Circuit)其实是IICBus简称,所以中文应该叫集成电路总线,它是一种串行通信总线,使用多主从架构,由飞利浦公司在1980年代为了让主板、嵌入式系统或手机用以连接低速周边设备而发展。IIC是半双工通信方式。
    IIC是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实时数据传输的控制源,但在任何时间点上只能有一个主控。

    在这里插入图片描述
    IIC串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。

    IIC支持的传输速率如下:

    模式速率
    标准模式(Standard Mode)100kb/s
    快速模式(Fast Mode)400kb/s
    增强快速模式(Fast Mode Plus1Mb/s
    高速模式(High Speed Mode)3.4Mb/s
    极速模式(Ultra-FastMode)5Mb/s

    2、IIC 总线协议

    时序图

    以下是简化版IIC总线协议时序图出自STM32F103系列超详细参考手册-中文版

    具体如下:
    在这里插入图片描述
    通过时序图可知,IIC传输数据是先发高位,后发低位。

    空闲状态

    一般情况下,数据线SDA和时钟线SCL都是处于上拉电阻状态。
    因为在总线空闲状态时,这两根线一般被上面所接的上拉电阻拉高,保持着高电平。
    请添加图片描述

    开始信号

    当时钟线SCL 为高电平时,数据线SDA 由高电平向低电平跳变。
    启动信号是一种电平跳变时序信号,而不是一个电平信号。

    具体时序图如下图所示:
    在这里插入图片描述

    终止信号

    当时钟线SCL 为高电平时,数据线SDA 由低电平向高电平跳变。
    终止信号是一种电平跳变时序信号,而不是一个电平信号。

    具体时序图如下图所示:
    在这里插入图片描述

    应答信号

    发送器每发送一个字节(8个bit),就在时钟脉冲 9 期间释放数据线,由接收器反馈一个应答信号。 主机SCL拉高,读取从机SDA的电平。

    对于反馈有效应答位ACK的要求是:
    接收器在第9个时钟脉冲之前的低电平期间将数据线SDA拉低,
    并且确保在该时钟的高电平期间为稳定的低电平。

    具体时序图如下:
    在这里插入图片描述

    应答位

    数据线(SDA)为低电平时,规定为有效应答位(ACK,简称应答位),表示接收器已经成功地接收了该字节。

    在这里插入图片描述

    非应答位

    数据线(SDA)为高电平时,规定为非应答位(NACK),表示接收器没有成功接收该字节。

    在这里插入图片描述

    如果接收器是主控器,则在它收到最后一个字节后,发送一个NACK信号,以通知被控发送器结束数据发送,并释放数据线SDA,以便主控接收器发送一个终止信号P。

    数据有效性

    IIC总线进行数据传送时,时钟线(SCL)上的信号为高电平期间,数据线(SDA)上的数据必须保持稳定。
    只有在时钟线(SCL)上的信号为低电平期间,数据线(SCL)上的高电平或低电平状态才允许变化。

    在这里插入图片描述

    输出到数据线(SDA)上的每个字节必须是8位。
    数据传送时,先传送最高位(MSB),后传送最低位(LSB)。
    每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)。

    在这里插入图片描述


    STM32F103标准库开发----IIC主控实验----普通I/O口模拟----底层驱动程序
    STM32F103标准库开发----IIC主控实验----普通I/O口模拟----读写AT24Cxx系列EEPROM实验

    AT24Cxx系列芯片中文数据手册----资源链接 点击下载
    AT24C256读写操作----程序源码 点击下载

  • 相关阅读:
    【华为OD机试真题 JS】火锅
    await在python协程函数的使用
    面向对象的三大特征:封装、继承、多态
    【SNMP】snmp trap 与介绍、安装、命令以及Trap的发送与接收java实现
    Apifox下载安装【官方版】
    C++11补充:智能指针如std::unique_ptr如何添加自定义的deleter
    ROS:ubuntu 20.04 noetic安装指南(简略版)
    MyBatis-Plus
    分享一波Redis常见面试题
    Java进阶-常用API
  • 原文地址:https://blog.csdn.net/MQ0522/article/details/125923149
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号