I2C中关于ACK和NACK的几点东西
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的几点东西相关推荐
- i2c信号的ACK与NACK
我们平时在调试I2C的时候可能很少去关注NACK信号,只知道如果Master发送数据,MSB先发,LSB后发,连续发送一个字节(8个bit),之后Slave会回复一个ACK信号,但是有时I2C sla ...
- I2C总线时序以及ACK和NACK(NAK),SCL被从机拉低?
1.I2C协议详解及裸机程序分析 - 简书(通俗易懂) 根据上图,我们首先设置IICCON(来设置时钟),时钟源是PCLK(是50MHZ)太快了我们需要设置这个分频系数,把时钟降低,降低到我们想要的S ...
- 对I2C总线时序的一点理解以及ACK和NACK(NAK)
http://www.cnblogs.com/zym0805/archive/2011/07/31/2122890.html I2C是由Philips公司发明的一种串行数据通信协议,仅使用两根信号线: ...
- I2C的ACK和NACK
1.I2C 的SCL 始终是由Master产生. 2.I2C 的 ACK和 NACK 始终是由数据的接收方产生,数据的接收方可以是 Master 也可以是 Slave. 3.如果是 Master 单纯 ...
- Android IOS WebRTC 音视频开发总结(八十七)-- WebRTC中丢包重传NACK实现分析
Android IOS WebRTC 音视频开发总结(八十七)-- WebRTC中丢包重传NACK实现分析 本文主要介绍WebRTC中丢包重传NACK的实现,作者:weizhenwei ,文章最早发表 ...
- TCP协议中的Ack和Seq号
TCP协议中的Ack和Seq号 一.基本概念 seq:表示本次发送数据的偏移量,也就是从哪里开始发送数据. len:表示本次tcp携带的数据长度. ack:首先意味着已经收到对方多少字节数据,其次告诉 ...
- TCP连接中的ACK与ack
在TCP协议三报文握手建立连接的过程中,TCP请求报文段中存在ACK和ack两个数值.要搞清楚这两个数值的含义,得了解TCP报文段的首部格式: 1.TCP报文段的首部格式: TCP报文段分为首部与数据 ...
- 老丁带你学USB-解疑2:USB协议中的ACK、NAK、STALL三种返回包含义
三种返回确认信息 ACK .NAK .STALL [ACK 包] ACK(确认) 表示 主机和设备已经收到数据,没有出现错误.设备必须在Setup 事务的交换包中返回ACK,设备也必须在OUT事务的交 ...
- UE4中蓝图实现输入框输入关键字搜索对应东西
一.目的 1.想知道:UE4中蓝图实现输入框输入关键字搜索对应东西 二.参考 1.UE4 高级游戏功能系统教程-搜索查询系统-P3 搜索功能开发(完结篇) https://www.bilibili.c ...
最新文章
- 在CentOS 6.3 64bit上安装redis 3.0.3
- Windows远程连接的实现
- 关于vector的resize()的理解
- 重新一步一步学习Lucene.NET 一个简单的程序开始(1)
- 连接查询(交叉连接,内连接,外连接,自然连接)
- DirectX 发展历程
- RJ45与网络变压器脚位及网线线序的关系?
- 代理记账和专职会计哪个更适合企业?
- PHP是最好的语言吗?
- 这款免费的低代码平台将是你创业路上的助推器
- svg格式的图片怎么放到word中?
- ASP.NET中 RadioButtonList(单选按钮组)的使用
- 金堂五月花计算机学校招聘,2019年成都市金堂五月花学校招生简介
- Jackknife,Bootstrap, Bagging, Boosting, AdaBoost, RandomForest 和 Gradient Boosting的区别
- 计算机在材料科学中的应用实验心得,计算机在材料科学中的应用.doc
- GeoMesa处理SHP数据
- viper4android 音效,ViPer4android. FX顶级音效!
- 飞凌嵌入式 RK3399核心板 iMX6ULL核心板 iMX6UL核心板 PX30,RK3368,RK3288,RK3399,i.mx6芯片参数对比分析
- 对你工作很实用的各种表格
- 吴恩达机器学习课程笔记——第一周
热门文章
- Win7环境下MSCOMM32.OCX控件的使用
- typescript 装饰器
- HTML基本网页结构
- tif怎么转成jpg格式?
- NOIP 2005 篝火晚会
- Access的DateAdd 函数
- Ant Design中Form组件重置验证条件resetFields()方法
- Deep Match to Rank Model for Personalized Click-Through Rate Prediction
- 【论文笔记】Personalized Federated Learning with Theoretical Guarantees: A MAML Approach
- 机器学习/深度学习资源下载合集(持续更新...)