单片机关于I2C的ack问题

uchar I2C_SendByte(uchar dat, uchar ack)函数其中与ack相关的部分是

while(I2C_SDA && (ack == 1))//等待应答,也就是等待从设备把I2C_SDA拉低
{
b++;
if(b > 200) ** //如果超过200us没有应答发送失败,或者为非应答,表示接收结束
**{
I2C_SCL = 0;
I2C_Delay10us();
return 0;
}
}

I2C_SCL = 0;
I2C_Delay10us();

在main中有
I2C_SendByte(0xa0, 1);//发送写器件地址
I2C_SendByte(addr, 1);//发送要写入内存地址
I2C_SendByte(dat, 0)_; //发送数据

为什么发送数据时 ack为0了不为1,以及这个ack代表什么意义,ack不是从机将sda下拉的信号吗?

0
扫码支付0.1元 ×
其他相关推荐
i2c 调试OLED之无ACK
最近在tiny4412上调试一款oled,此oled具有SPI 和I2c两种接口,可以供选择。 SPI接口的很快调试好了。但是I2c接口的却调试了很久没有调试出来。 通过逻辑分析仪抓波形,发现是oled不回复ack信号,导致所有的初始化命名都没有发送出去。 但是为什么没ACK信号呢? 按淘宝店家提供的资料,硬件上已经确认无误。 无奈用公司的小开发去试试,也是用的硬件i2c,竟然可以点...
基础自学-关于基于单片机的模拟I2C的学习
1.什么是协议 协议就是双方在进行通讯时,都遵循的一系列规则,举个例子,在使用手机的时候,只有你的指纹才能打开手机,其他人的不行,这就是手机和人之间的通讯协议,(有些不恰当) 2.I2C协议的简单理解: 1) 他的作用 将主设备和从设备联系起来进行数据通讯(前提是设备有I2C通讯的能力) 2) 目前遇到的通讯设备 MPU6050,MFRC522,单片机 ...
对 IIC 总线的理解、调用函数以及常见面试问题
一、IIC 总线概述:IIC 即Inter-Integrated Circuit(集成电路总线) I2C总线是PHLIPS公司推出的一种串行总线, I2C总线只有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。 每个接到I2C总线上的器件都有唯一的地址。主机与其它器件间的数据传送可以是由主机发送数据到其它器件,这时主机即为发送器。由总线上接收数据的器件则为接收器。 二、IIC 总线通
I2c源代码分享
Verilog I2C学习源代码,类似与SCCB的双线制I2C可以配置常用摄像头模块
I2C 调试记录之——无应答 (ACK) 信号
Author:DriverMonkey 欢迎交流:196568501(QQ)                bookworepeng@Hotmail.com   以下是我的调试日志,目前无应答信号的原因未明   I have tried to use MCU to control the active Probes(ZS1000) by writing Regsiter(0x46)
C51进行I²C通信
I²C(Inter IC Bus)是由 Philips 推出的数据总线协议。 #include void display(unsigned int n) { unsigned char i; char table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79
PIC单片机之I2C通信(从模式)
网上有许多讲解单片机 实现I2C主模式,但是从模式的很少。我现在就来讲讲PIC单片机使用MSSP模块实现I2C从模式。     有关I2C协议的具体介绍可以看 《PIC单片机之I2C(主模式)》,我们这里直接讲解实例     实例讲解:我们模仿 AT24C02 EEPROM 的协议。让一个主模式的单片机,来读取从模式单片机的数据。        下面为AT24C02的随机地址读取
STM32单片机硬件I2C驱动程序(软件轮询方式)---摘自:FeoTech
感谢原作者:FeoTech   原文网址:http://feotech.com/?p=69 本程序主要用于驱动STM32单片机芯片的硬件I2C寄存器,实现通过使用芯片自带的I2C寄存器进行数据的发送与接收. 本例程中采用I2C寄存器查询的方式来实现数据传输,当I2C对应寄存器指定状态时方可执行下一步操作. /** ************************************...
I2C中关于ACK和NACK的几点东西
在最近的编程过程中,会经常使用I2C来读写数据,用示波器来查看I2C的波形,所以想总结一下I2C中关于ACK和NACK的几点东西。 I2C简介I2C是由Philips公司发明的一种串行数据通信协议,仅使用两根信号线:SerialClock(简称SCL)和SerialData(简称SDA)。I2C是总线结构,1个Master,1个或多个Slave,各Slave设备以7位地址区分,地址后面再跟1位读写位
i2c信号的ACK与NACK
我们平时在调试I2C的时候可能很少去关注NACK信号,只知道如果Master发送数据,MSB先发,LSB后发,连续发送一个字节(8个bit),之后Slave会回复一个ACK信号,但是有时I2C slave可能会发出NACK信号,下面让我们来看看NACK信号存在的情况。 1、从spec下摘取一段: 2、翻译:         每个字节后会跟随一个ACK信号。ACK bit使
I2C设备调试及波形分析
http://blog.csdn.net/smallmuou/article/details/7183656 最新在开发OLED屏驱动,需要用到I2C总线,下面大体上讲解一下I2C设备的调试及波形分析,为大家做一些参考,由于刚涉及这部分内容,因此有什么错误的,还请赐教~ 一、概要 I2C总线只需要两条线,一条SDA数据线,一条SCL时钟线;根据这两条线
【转载】对I2C总线中ACK的理解
                           &a
IIC通讯之TM1650
本篇博文最后修改时间:2017年08月14日 22:00。 一、简介 本文以Upd79F8513A(NEC)编程为例,介绍Upd79F8513A(NEC)与TM1650通讯 二、实验平台 电脑平台:Windows7 64位旗舰 编译软件:PM+ V6.30 硬件平台:Upd79F8513A(NEC) 、TM1650 ...
51模拟I2c,原理+程序
1、I2c启动     由上图可知SDA在SCL为高电平时由高变为低表示启动I2c,注意时间。 2、I2c关闭     由上图可知SDA在SCL为高电平时由低变为高表示启动I2c,注意时间。 3、数据0     由上图可知SDA在SCL为高电平时拉低表示0,注意时间。 4、数据1     由上图可知SDA在SCL为高电平时拉高表
关于I2C应答位异常现象的总结文档
 问题描述: 为利用I2C协议实现KV5芯片与MS5611气压计芯片的通信,在初始化I2C协议(包括引脚复用,设置波特率)后,主机给从机发送启动信号、从机地址及读写位(R/W)后,检测不到应答位(ACK,低电平)。利用示波器观测SDA和SCL信号,如下图。 可以看到,应答位有拉低现象,说明MS5611接收到自身地址及读写位后有应答,但拉低能力不够,KV5没有识别到。 解决方法:
I2C通讯常见问题汇总
本文对I2C通信常出现的问题进行一个比较完整的汇总,希望能对大家工程开发过程中有所帮助。 1、简单介绍一下I2C到底是什么,毕竟有新朋友可能还不明白它的概念。 I2C是由飞利浦公司于1982年发明的一种比较简单的通信协议,为什么要发明这个玩意呢?其实并不是无缘无故发明的,而是因为飞利浦自己开发了一款芯片,而当时世界上由没有现成的可靠的简单的通信协议,所以为了让自己开发的芯片简单易用,就发明了这...
IIC协议及其对ACK应答信号的处理
IIC协议及其对ACK应答信号的处理   1,SCL一直由Master控制,SDA依照数据传送的方向,读数据时由Slave控制SDA,写数据时由Master控制SDA。当8位数据传送完毕之后,应答位或者否应答位的SDA控制权与数据位传送时相反。 2,开始位“Start”和停止位“Stop”,只能由Master来发出。 3,地址的8位传送完毕后,成功配置地址的Slave设备必须
滄海详解面试的必答题——I2C协议
目录 第一部分:I2C协议的概述 第二部分:I2C协议的阐述 第三部分:AT24C04简述 第四部分:基于verilog的程序设计(暂无) 对于大多从事FPGA行业的应届生来说,在面试过程中很可能会被问到关于I2C协议的一些内容,尤其是碰到比较重视基本功的面试官,答好了,就是大大的加法,答不上了,也是大大的减分。为什么呢?首先因为这个协议简单,简单的都不会必然容易引起人的遐想,其次,它很...
【蓝桥杯|单片机组】| I2C通信(官方代码) + EEPROM
     之前我写的I2C通信协议是基于“金沙滩”的教程,代码比较繁琐,为了能在之后的比赛中提高效率,本次就以官方提供的I2C通信协议来实现单字节的存取,同时也当作对I2C协议的复习。该协议有关主机(单片机)与从机(板子上焊的芯片AT24C02)之间的数据传输。首先我们先来认识一下AT24C02       AT24C02提供2024位的连续的可擦除的可编程的只读的存储器(就是我们所说的EEPRO...
STM32F10x_模拟I2C读写EEPROM综合版(切换SDA方向、检测ACK位)
STM32F10x_模拟I2C读写EEPROM综合版(切换SDA方向、检测ACK位)。
GD32硬件IIC+DMA程序
GD32硬件IIC+DMA程序,使用的IIC时序如下。 写寄存器操作为: START+ACK(从机的ACK信号)+IIC设备地址+(从机的ACK信号)+START+ACK(从机的ACK信号)+IIC写寄存器地址+ACK(从机的ACK信号)+IIC写数据(4Byte,每个数据后都有ACK)+STOP 读寄存器操作为: START+ACK(从机的ACK信号)+IIC设备地址+(从机的ACK信号)+START+ACK(从机的ACK信号)+IIC读寄存器地址+ACK(从机的ACK信号)+IIC读数据(4Byte,前n个数据后都有(主机发送的)ACK,最后1byte数据后如果发ACK,表示还有数据要读,如果最后1byte数据后为NACK,后面紧接着就是停止位)+STOP
51单片机I2C总线驱动程序
I2C总线是PHLIPS公司推出的一种串行总线,是具备多主机系统所需的包括总线裁决和高低速器件同步功能的高性能串行总线。I2C总线只有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。一.I2C系统结构每个接到I2C总线上的器件都有唯一的地址。主机与其它器件间的数据传送可以是由主机发送数据到其它器件,这时主机即为发送器。由总线上接收数据的器件则为接收器。二.数据位的有效性规定I2C总线进行数
FPGA中iic总线上,应答ACK解析
首先要明白一点,有效ACK是指第9位为低电平,第十位,十一位就管不着了,(我写的代码发现第九位为低电平,之后复位为高电平,开始没注意后来搞的很是头痛)    主机发ack和主机检测ack,主机发ack是在从机发数据给主机的时候,主机检测ack是在主机发完一个字节后从机发的ack,ack就是第九个时钟时sda为低电平,主机发ack就是拉低sda,主机检测ack就是从机拉低sda   空了慢慢...
I2C总线 利用IO口实现方式(1)
1、#define LCD1602_DB = P0    //后面没有;  长点记性!!!2、mask>>=1     //被自己写成      mask >>1  编译不报错,自己检查还逻辑正确,找了好久才找到错误!!main().c 文件 I2C子函数 ①起始位 ②结束位 ③传输byte ④确定应答值ack#include <reg52.h&gt...
I2C总线与EEPROM
前几章我们学了一种通信协议叫做UART异步串口通信,这节课我们要来学习第二种常用的通信协议I2C。I2C总线是由PHILIPS公司开发的两线式串行总线,多用于连接微处理器及其外围设备。I2C总线的主要特点是接口方式简单,两条线可以挂多个参与通信的器件,即多机模式,而且任何一个器件都可以作为主机,当然同一时刻只能一个主机。 从原理上来讲,UART属于异步通信,比如电脑发送给单片机,电脑只负
IIC连续读写出错检查办法
单片机连续读写出错 现象:读取单个字节的时候是正确的,但连续读或连续写会出错 经过排查, 1、发现单片机连续读epprom时,没有回应ack 2、start –> send 器件地址写–> epprom存储地址 –> 器件地址读 时,中间有步骤出错 #include <reg52.h> #include "intrins.h" #include "type....
14.2 I2C寻址模式
上一节介绍的是 I2C 每一位信号的时序流程,而 I2C 通信在字节级的传输中,也有固定的时序要求。I2C 通信的起始信号(Start)后,首先要发送一个从机的地址,这个地址一共有 7位,紧跟着的第 8 位是数据方向位(R/W),“0”表示接下来要发送数据(写),‘“1”表示接下来是请求数据(读)。 我们知道,打电话的时候,当拨通电话,接听方捡起电话肯定要回一个“喂”,这就是告诉
使用逻辑分析仪分析IIC时序常见问题
1.当IIC时序出现某一连续段出现NAck时,考虑是芯片写入时的时间较长,可以尝试增长延时时间。后面持续出现NAck,则在连续写的中间插入延时函数,同理,前面出现就在最开始的地方延时。 …….持续更新
51单片机I2C程序
http://www.cnblogs.com/zym0805/archive/2011/07/31/2122890.html I2C是由Philips公司发明的一种串行数据通信协议,仅使用两根信号线:SerialClock(简称SCL)和SerialData(简称SDA)。I2C是总线结构,1个Master,1个或多个Slave,各Slave设备以7位地址区分,地址后面再跟1位读写位,表示读(=
GPIO模拟I2C通信协议(一)
通用IO口模拟实现I2C通信协议 1 I2C协议简介 1.1 物理层 1.2 协议层1.2.1 总线空闲与信号起始终止1.2.2 数据有效1.2.3 应答和非应答1.2.4 地址广播1.2.5 总线仲裁1.2.6 时钟同步 2 I2C协议的C代码实现 2.1 单个动作2.1.1 初始化2.1.2 起始信号2.1.3 终止信号2.1.4 主控器读取ACK2.1.5 主控器发送ACK2.1.6 主控器...
51单片机——I2C总线
单片机——I2C 宗旨:技术的学习是有限的,分享的精神是无限的。         UART 属于异步通信,比如电脑发送给单片机,电脑只负责把数据通过TXD 发送出来即可,接收数据是单片机自己的事情。而 I2C 属于同步通信, SCL 时钟线负责收发双方的时钟节拍, SDA 数据线负责传输数据。 I2C 的发送方和接收方都以 SCL 这个时钟节拍为基准进行数据的发送和接收。
i2c 通讯失败(低电平1v)
众所周知,单片机低电平一般都是0v。 结果我发现我的板子上居然是1v,板子上有2个i2c,一个是通讯正常的,一个没有ack, 测了很久发现低电平是1v,有一个i2c是标准i2c,1v可能可以识别为0(3.3v为高)。但另外一个是sccb的, 兼容i2c,高电平只有1.8v左右。1v识别不成低电平,所以当然通讯失败。 检测stio口输出的就是1v(没在后续级联电路测试), 可能
PIC单片机之I2C通信(主模式)。
我们今天来讲I2C通信。那I2C通信的特点是什么能。我们一般使用的串口 (半双工异步串行通信)与I2C 有什么区别呢。     串口(半双工异步串行通信):就是好像朋友在对话。我可以主动和你讲话,你也可以主动和我讲话。     I2C:就好像上下级对话。一个领导面对一个或者多个员工。只有领导主动说话的份儿,下面的员工不能主动说话。只有领导问了,员工才能答。     I2C通信     I2
I2C理解
1.I2C协议   2条双向串行线,一条数据线SDA,一条时钟线SCL。   SDA传输数据是大端传输,每次传输8bit,即一字节。   支持多主控(multimastering),任何时间点只能有一个主控。   总线上每个设备都有自己的一个addr,共7个bit,广播地址全0.   系统中可能有多个同种芯片,为此addr分为固定部分和可编程部份,细节视芯片而定,看datasheet。1.1 I2...
STM8L101-IIC接口操作M24LR64地址错误无ACK响应的波形
M24LR64可以做为EEROM来看待,STM8L101单片机可通过IIC接口对其进行读写。但在调试时,误把M24LR64的地址搞错,在发送完设备选择码之后,主设备(STM8L101)无法接收到从机(M24LR64)的ACK响应,波形如下图。第9个时钟,SDA为低电平则响应。     一定要注意M24LR64工作在RF模式和IIC模式时,各引脚的含义是不同的。
Camera I2C不通的分析思路
常见问题及debug 1) Camera I2C不通的分析思路 I2C不通,有两种原因:一种是device端(也就是我们的camera sensor)本身就没有回ACK,另一种就是在master端(也就是我们的baseband端)。我们可以从kernel log里面搜索I2C的关键字:“I2C_TIMEOUT”和“I2C_ACKERR”。 I2C_ACKERR:问题多半在slave端,需要检...
MPU6050的I2C通信协议
不同硬件有不同的I2C协议
【蓝桥杯单片机组】PCF8591 关于蓝桥杯坑爹I2C的吐槽
根据datasheet的时序: 编程步骤:初始化AD,给AD传送采样通道与输入方式(写过程,上图) (1)打开总线 (2)发送ADDRESS(BIT0 = 0) (3)等待PCF应答 (4)发送控制位(控制参考下图) (5)等待PCF应答 (6)结束总线 附:控制位 地址位: 综上所述:初始化PCF8591时的代码如下: void PCF8591_init
I2C总线学习—查缺补漏—应答信号ACK
I2C总线学习—查缺补漏—应答信号ACK           IIC协议规定,当主机作为接收设备时,主机对最后一个字节不应答,以向发送设备(从设备)标识数据传送结束。这是因为每次传输都应得到应答信号后再进行下一个字节传送。如果此时接收机应答了,那它就接收的不是最后一个字节了。如果是最后一个字节,第9个时钟周期发送的是非应答信号(此时发送的不是应答信号就是非应答信号),最后发送停止信号。
I2C读的几种方式(何时会有NOACK)
以前一直以为所有的应答必须将SDA拉低,最近查了些资料感觉不是那么回事,根据I2C设备的不同及读取方式不同,有时应答可以将SDA拉高,即NOACK信号。相关的例子可以找一下,这里提供一个:I2C总线的读操作的流程
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 关于大数据培训 关于云计算