首页 > 其他分享 >会讲故事的I2C通信时序

会讲故事的I2C通信时序

时间:2024-10-15 16:46:33浏览次数:9  
标签:SCL 时序 讲故事 从机 犯人 监狱长 I2C SDA

前言:

        相信各位在学习STM32时候的I2C通信肯定特别苦恼吧,这是什么通信时序,为什么起始终止发送SCL和SDA要那样,即使是深刻学习理解了一遍,时间长了之后也容易忘记,因为记的都是概念性的东西,枯燥无味的概念文字确实长时间后就容易忘记,那有没有什么方法可以让自己记牢一点呢?

        有,在我重新回顾去看了一遍江科大的I2C后,不经意间我想起来之前看过的一部电影《饥饿站台》,我就想到了用一个故事来理解记住I2C的各个时序图。

        感兴趣的话,不妨听听呗,说不定对你有收获。

故事背景:

先上I2C的各个时序图概念,稍稍回忆一下:(师出江科大)

这里硬件电路稍微讲一下,因为和我的故事背景有关系。

        这里我们的I2C是一主多从模式,即一个主机,其他都是从机通信,所以我们这里的SCL就由主机来单独控制,假设我们去掉左图中的两个上拉电阻,来看看SCL和SDA。

SCL:因为是一主多从模式,所以主机SCL配置推挽输出输出高低电平,从机SCL配置浮空输入或者上拉输入都可以;

SDA:因为主机和从机都可以控制SDA线,假如当主机和从机同时输出时,主机输出高电平,从机输出低电平,这时候SDA就发生短路了,这是不能发生的。所以,I2C就规定所有的主机从机的SCL都配置成开漏输出模式,并且SCL和SDA外接一个上拉电阻,就像右图的硬件电路一样。

所以当SCL和SDA都空闲时,因为有一个弱上拉电阻拉着输出高电平,就好像SCL和SDA是一根杆子,弱上拉电阻是一根弹簧拉着SCL和SDA杆子,因为是主从机是开漏输出,输出高电平时引脚浮空,输出低电平时为强下拉,所以会把SCL和SDA杆子往下拉。
        所以,联想一下饥饿站台的监狱模式,我们的故事背景就出来了,假设我们的主机是一个监狱长,监狱长在监狱最上层,从机是一个个犯人在监狱下面的每一层。 

监狱长和犯人(也就是主机和从机)会通过可升降平台(SCL)和平台上的信息(SDA)互相交流。

I2C时序图故事讲解:

起始条件:

        这里我们假设站台下面的那根绳子是起始和终止信号的(SDA)表示。

当平台(SCL)空闲时,平台因为弹簧(上拉电阻)的原因会升在高处,这时,如果有犯人(从机)要和主机通信,犯人就可以拉一下绳子(SDA),绳子由上往下拉,即SDA由高到低电平,这时候监狱长收到了犯人的信息,就知道要开始I2C通信了。

终止条件:

当互相收发完信息后,平台(SCL)会上升回去,如果不行通信了,犯人拉着SDA的绳子就放开,绳子由下往上收缩,即低电平到高电平,监狱长(主机)就知道犯人(从机)不想通信了,就终止I2C通信。

发送一个字节:


每次平台SCL将下来,即低电平,监狱长就会跟着平台下来,并且把平台上的东西(SDA数据)发给需要I2C通信的犯人,因为高层的会先到,所以是高位先发,在发送完之后,平台(SCL)上升,犯人开始接收自己发到的东西(SDA数据),发送一位是如此,发送一个字节即八次来回。

接收一个字节:

当有犯人(从机)要给监狱长(主机)发送信息时,平台(SCL)就会降下来(低电平),犯人(从机)把要给监狱长的信息放到SDA上,因为是高层先到,所以是高位先行,接着平台上升(高电平),监狱长(主机)读取SDA数据,因为SCL上升上去了,犯人无法放信息数据,所以SDA就不会有数据变化,接受一位如此,接收八位字节重复八次即可。

发送应答:

当监狱长在接收犯人的八次数据后,会在SCL平台上放上自己对SDA数据的反应,比如0就是批准(应答),1就是收到但是不批准(非应答),然后犯人判断监狱长的反应应答是怎么样的。

接收应答:

当监狱长(主机)在发送完八次数据(即一个字节)之后,需要判断犯人是否收到自己的信息,就会在下一个SCL上拿信息数据SDA,来判断是否有犯人收到自己的信息,0就是表示有犯人收到自己的数据了,1就是没有,因为需要接收犯人的信息,所以一开始就不能在SDA上放数据。

结语:

第一次编故事,编的不好,如有错误,请大家见谅!

标签:SCL,时序,讲故事,从机,犯人,监狱长,I2C,SDA
From: https://blog.csdn.net/weixin_69902486/article/details/142940298

相关文章

  • 基于LSTM-Transformer混合模型实现股票价格多变量时序预测(PyTorch版)
    前言系列专栏:【深度学习:算法项目实战】✨︎涉及医疗健康、财经金融、商业零售、食品饮料、运动健身、交通运输、环境科学、社交媒体以及文本和图像处理等诸多领域,讨论了各种复杂的深度神经网络思想,如卷积神经网络、循环神经网络、生成对抗网络、门控循环单元、长短期记忆......
  • 时序图分析(IIC通信为例)
    一、时序图分析(IIC通信为例)  时序图-->编程解析:时序概念:一般指可编程器件的编程方法,在单片机编程时,需要根据被控芯片的时序去写程序,把芯片上的时序用代码来实现,方可实现单片机和芯片之间的通信(一般不需要自己绘制时序图,查询相关数据手册即可)。(一)IIC开始/结束时序分析判......
  • 查找大量时序遥感文件缺失、不连贯的成像日期:Python代码
      本文介绍批量下载大量多时相的遥感影像文件后,基于Python语言与每一景遥感影像文件的文件名,对这些已下载的影像文件加以缺失情况的核对,并自动统计、列出未下载影像所对应的时相的方法。  批量下载大量遥感影像文件对于RS学生与从业人员可谓十分常见。在我们之前的文章中,就介......
  • 解决Windows触摸板频繁失灵问题(I2C HID无法启动 代码10)
    我的电脑是华硕的笔记本,在多年前之前就出现偶尔的触摸板失灵的情况,那时候在官网升级驱动啥的也能解决,但是不是长久之计,后来又是经常在网上看教程啥的,终于在今天找到了最好用的方法,没有之一,绝对是目前最有效,最好的解决方法,也是参考了别人的文章,结合自己的实际情况而总结。话不多......
  • 实现远距离通信 PS304数字接口转发器实现UART转换为I2C、SPI、1Wire等多种数字接口!
    实现远距离通信PS304数字接口转发器实现UART转换为I2C、SPI、1Wire等多种数字接口!PS304多种数字接口物理层协议转发器,能够实现UART转换为I2C、SPI、1Wire等其他数字接口,以实现远距离通信。该转发器具备内嵌磁隔离双电源及辅助增强电源电路、自适应线缆算法和强大灵活的S2S协议......
  • 如何让自己有向上的能力-时序图
    如何让自己有向上的能力-时序图,打通你开发的任督二脉_哔哩哔哩_bilibili 通过一个样例代码让你理解时序图的重要性,时序图让你能马上对业务有很深刻的理解。永远免费的wpf课程,持续更新中,请关注......如有疑问可加v:manyanedu为什么要做时序图时序图(SequenceDiagram),又称......
  • 带I2C的LCD12864使用经验总结和例程(RSCG12864B)
    搬运说明:本文是本人在24年4月CSDN上发布的,现全文搬运至博客园,图片水印暂未去除,并删除原CSDN博文。本文简要说明了带I2C协议的LCD12864屏幕的使用经验与教训,特别是厂家说明书说法有误或未提及的内容。文末也提供一个本人编写的STC89C52单片机读取SHT30温湿度传感器并显示在LCD1286......
  • Matlab 基于Transformer-LSTM-SVM多变量时序预测 (多输入单输出)
    基于Transformer-LSTM-SVM多变量时序预测(多输入单输出)你先用你就是创新!!!1.程序已经调试好,无需更改代码替换数据集即可运行!!!数据格式为excel!2.评价指标包含:RMSE、R2、MSE、MAE、MBE、MAPE、RPD。3.Transformer作为一种创新的神经网络结构,深受欢迎。采用Transformer编码器......
  • Vivado进阶-时序分析之时钟偏移
    FPGA中绝大多数电路都是同步时序电路,基本模型为“寄存器+组合逻辑+寄存器”。同步就意味着时序路径上的所有寄存器都是在时钟信号的驱动下步调一致的运行。这就要求时钟信号要在同一时间点到达所有寄存器的时钟端口。为了尽量达到这个目的,在FPGA内部提供了专用的时钟布线资......
  • 微信也在用的消息时序性技术,你知道多少?
    哈喽,大家好,我是小米,一个29岁,喜欢研究技术和分享经验的码农!今天我想和大家聊聊一个非常有趣的话题——如何在个人项目中保证消息的时序性。随着即时通讯、社交应用的普及,消息的时序性问题成为了一个非常关键的技术难点。如果不加以处理,消息的乱序可能会导致用户体验崩溃。今天,我将分......