I2C的数据格式

  • 无数据(空闲):SCL=1,SDA=1;
  • 开始位(Start):当SCL=1时,SDA由1向0跳变;
  • 停止位(Stop):当SCL=1时,SDA由0向1跳变;
  • 数据位:当SCL由0向1跳变时,由发送方控制SDA,此时SDA为有效数据,不可随意改变SDA;当SCL保持为0时,SDA上的数据可随意改变;
  • 地址位:定义同数据位,但只由Master发给Slave;
  • 应答位(ACK):当发送方传送完8位时,发送方释放SDA,由接收方控制SDA,且SDA=0;
  • 否应答位(NACK):当发送方传送完8位时,发送方释放SDA,由接收方控制SDA,且SDA=1。
  • 当数据为单字节传送时,格式为:开始位 + 8位地址位(含1位读写位) + 应答 + 8位数据 + 应答 + 停止位
  • 当数据为一串字节传送时,格式为:开始位 + 8位地址位(含1位读写位) + 应答 + 8位数据 + 应答 + 8位数据 + 应答 + …… + 8位数据 + 应答 + 停止位。

几点注意事项

  • SCL一直由Master控制,SDA依照数据传送的方向,Master读数据时由Slave控制SDA,Master写数据时由Master控制SDA。
  • 当8位数据传送完毕之后,应答位或者否应答位的SDA控制权与数据位传送时相反。
  • 开始位“Start”和停止位“Stop”,只能由Master来发出。
  • 地址的8位传送完毕后,成功配置地址的Slave设备必须发送“ACK”。否则否则一定时间之后Master视为超时,将放弃数据传送,发送“Stop”。
  • 当写数据的时候,Master每发送完8个数据位,Slave设备如果还有空间接受下一个字节应该回答“ACK”,Slave设备如果没有空间接受更多的字节应该回答“NACK”,Master当收到“NACK”或者一定时间之后没收到任何数据将视为超时,此时Master放弃数据传送,发送“Stop”。
  • 当读数据的时候,Slave设备每发送完8个数据位,如果Master希望继续读下一个字节,Master应该回答“ACK”以提示Slave准备下一个数据,如果Master不希望读取更多字节,Master应该回答“NACK”以提示Slave设备准备接收Stop信号。
  • 当Master速度过快Slave端来不及处理时,Slave设备可以拉低SCL不放(SCL=0将发生“线与”)以阻止Master发送更多的数据。此时Master将视情况减慢或结束数据传送。
  • 在实际应用中,并没有强制规定数据接收方必须对于发送的8位数据做出回应,尤其是在Master和Slave端都是用GPIO软件模拟的方法来实现的情况下,编程者可以事先约定数据传送的长度,slave不检查NACK,有时可以起到减少系统开销的效果。但是如果slave方是硬件i2c要求一定要标准的NACK,master方是GPIO软件模拟i2c并没有正确的发送NACK,就会出现“slave收不到stop”导致i2c挂死。

I2C中关于ACK和NACK的几点东西相关推荐

  1. i2c信号的ACK与NACK

    我们平时在调试I2C的时候可能很少去关注NACK信号,只知道如果Master发送数据,MSB先发,LSB后发,连续发送一个字节(8个bit),之后Slave会回复一个ACK信号,但是有时I2C sla ...

  2. I2C总线时序以及ACK和NACK(NAK),SCL被从机拉低?

    1.I2C协议详解及裸机程序分析 - 简书(通俗易懂) 根据上图,我们首先设置IICCON(来设置时钟),时钟源是PCLK(是50MHZ)太快了我们需要设置这个分频系数,把时钟降低,降低到我们想要的S ...

  3. 对I2C总线时序的一点理解以及ACK和NACK(NAK)

    http://www.cnblogs.com/zym0805/archive/2011/07/31/2122890.html I2C是由Philips公司发明的一种串行数据通信协议,仅使用两根信号线: ...

  4. I2C的ACK和NACK

    1.I2C 的SCL 始终是由Master产生. 2.I2C 的 ACK和 NACK 始终是由数据的接收方产生,数据的接收方可以是 Master 也可以是 Slave. 3.如果是 Master 单纯 ...

  5. Android IOS WebRTC 音视频开发总结(八十七)-- WebRTC中丢包重传NACK实现分析

    Android IOS WebRTC 音视频开发总结(八十七)-- WebRTC中丢包重传NACK实现分析 本文主要介绍WebRTC中丢包重传NACK的实现,作者:weizhenwei ,文章最早发表 ...

  6. TCP协议中的Ack和Seq号

    TCP协议中的Ack和Seq号 一.基本概念 seq:表示本次发送数据的偏移量,也就是从哪里开始发送数据. len:表示本次tcp携带的数据长度. ack:首先意味着已经收到对方多少字节数据,其次告诉 ...

  7. TCP连接中的ACK与ack

    在TCP协议三报文握手建立连接的过程中,TCP请求报文段中存在ACK和ack两个数值.要搞清楚这两个数值的含义,得了解TCP报文段的首部格式: 1.TCP报文段的首部格式: TCP报文段分为首部与数据 ...

  8. 老丁带你学USB-解疑2:USB协议中的ACK、NAK、STALL三种返回包含义

    三种返回确认信息 ACK .NAK .STALL [ACK 包] ACK(确认) 表示 主机和设备已经收到数据,没有出现错误.设备必须在Setup 事务的交换包中返回ACK,设备也必须在OUT事务的交 ...

  9. UE4中蓝图实现输入框输入关键字搜索对应东西

    一.目的 1.想知道:UE4中蓝图实现输入框输入关键字搜索对应东西 二.参考 1.UE4 高级游戏功能系统教程-搜索查询系统-P3 搜索功能开发(完结篇) https://www.bilibili.c ...

最新文章

  1. 在CentOS 6.3 64bit上安装redis 3.0.3
  2. Windows远程连接的实现
  3. 关于vector的resize()的理解
  4. 重新一步一步学习Lucene.NET 一个简单的程序开始(1)
  5. 连接查询(交叉连接,内连接,外连接,自然连接)
  6. DirectX 发展历程
  7. RJ45与网络变压器脚位及网线线序的关系?
  8. 代理记账和专职会计哪个更适合企业?
  9. PHP是最好的语言吗?
  10. 这款免费的低代码平台将是你创业路上的助推器
  11. svg格式的图片怎么放到word中?
  12. ASP.NET中 RadioButtonList(单选按钮组)的使用
  13. 金堂五月花计算机学校招聘,2019年成都市金堂五月花学校招生简介
  14. Jackknife,Bootstrap, Bagging, Boosting, AdaBoost, RandomForest 和 Gradient Boosting的区别
  15. 计算机在材料科学中的应用实验心得,计算机在材料科学中的应用.doc
  16. GeoMesa处理SHP数据
  17. viper4android 音效,ViPer4android. FX顶级音效!
  18. 飞凌嵌入式 RK3399核心板 iMX6ULL核心板 iMX6UL核心板 PX30,RK3368,RK3288,RK3399,i.mx6芯片参数对比分析
  19. 对你工作很实用的各种表格
  20. 吴恩达机器学习课程笔记——第一周

热门文章

  1. Win7环境下MSCOMM32.OCX控件的使用
  2. typescript 装饰器
  3. HTML基本网页结构
  4. tif怎么转成jpg格式?
  5. NOIP 2005 篝火晚会
  6. Access的DateAdd 函数
  7. Ant Design中Form组件重置验证条件resetFields()方法
  8. Deep Match to Rank Model for Personalized Click-Through Rate Prediction
  9. 【论文笔记】Personalized Federated Learning with Theoretical Guarantees: A MAML Approach
  10. 机器学习/深度学习资源下载合集(持续更新...)