iic协议+ack
答:你去看一下IIC的协议。发送8个地址位或者数据位后,会由从机返回一个信号 在协议中成为ACK。ACK=0时,表明主机和从机通信正常,ACK=1时,即NACK 表示从机无应答。硬件连线错误或者时序错误,也有可能是地址错误。看示波器就能明显看出来,在2个字节数据之间还间隔了1位。这就是ACK 我们就是通过判断...
答:以AT89c52单片机为例,主机发送指令过程中,当需要判断SDA是否被拉低时,先值高SDA,然后反复读取SDA电平,当SDA=0时就判断SDA被拉低了,在一定时间内没有读取到SDA=0就判断出错。汇编举例:aACK: MOV R7,#0 ;LOOP: CLR C ;MOV C, IO_SDA ;NOP;JNC IO_SDA , LOO...
答:首先,调用,在循环中逐字节发送数据(while(len)),每次发送后等待ACK(I2C_Ack())。数据传输完毕,如果没有收到ACK,会发送NACK并终止通信(I2C_NAck(); I2C_Stop();)。在解锁总线后,务必先写入寄存器地址再读取数据,以确保信息的准确交换。深入探索IIC的原理和应用,可以参考诸如《IIC总线详解》、...
答:IIC通信协议采用2条信号线,1条时钟线(SCL)和1条数据线(SDA),属于串行半双工通信。标准模式的传输速率为100Kb/s,快速模式为400Kb/s。总线上可以接多个从设备,从设备的地址必须不同。也可也接多个主设备,但同一时刻只能有一个主设备控制总线。最大设备数量受总线的最大负载电容400pf限制。每个...
答:从你的程序片段的注释来看 "//从机响应信号", 猜测这个部分可能是从机的处理程序, 从机在检测到SCL的下降沿的时候, 要送出ACK. 所以当然检测SCL了.由于只有部分代码, 而且不知道ADD2的处理内容, 你确定ADD2是发送BYTE_ADDR?
答:串口通信就是232,只有两根线txd和rxd,双方必须设定相同的波特率,传输距离比较近。 I2C号称是最简单的串行通讯协议,只需要一根数据线一根时钟线就可以完成半双工通讯。一根是双向的数据线SDA,另一根是时钟线SCL。I2C协议:1.谁主动发起数据请求(读/写)谁就是主机。2.主机提供时钟。3.SCL为高电平...
答:当SDA的电平为低时就跳出循环,说明此时从机已经ACK,就可说明是I2C器件拉低;如果为高时,则一直判断完整个循环,到最后还为高时,就说明没有应答。2、写应答和读应答肯定有所区别的。写应答是在你读从机数据期间,当你接收到一个数据时,可以应答的(想继续通信就应答),就将SDA复位(拉低),不想...
答:输出到SDA线上的每个字节必须是8位,每次传输的字节不受限制,但每个字节必须要有一个应答ACK。如果一接收器件在完成其他功能(如一内部中断)前不能接收另一数据的完整字节时,它可以保持时钟线SCL为低,以促使发送器进入等待状态;当接收器准备好接受数据的其它字节并释放时钟SCL后,数据传输继续进行。...
答:SDA=1;SCL=1;然后在一定时间内不断检测SDA脚的电平状态,比如说你弄个循环for(i=255;i>0;i--){..;if(...)break;...}进行不断判断,当SDA的电平为低时就跳出循环,说明此时从机已经ACK,就可说明是I2C器件拉低;如果为高时,则 一直判断完整个循环,到最后还为高时,就说明没有应答。2...
答:按下【Decode】键,将解码类型设置为IIC协议,将协议触发设为ON,由于在自动触发模式下,波形显示会不稳定。按下面板上的【Auto/Normal】键,将触发方式切换为普通触发,打开协议参数,可进行总线和触发设置,触发模式包括3种模式:起始位、结束位和地址值,我们选中地址值,设置触发地址为0×50,写模式...
网友评论:
郟度17654806680:
如何使用示波器解码IIC信号? -
12467牛悦
: IIC解码功能是一个示波器的高端功能,在泰克、安捷伦的示波器中都不是一个选配件,今天我就用ZLG的ZDS2022给楼主演示一下,因为其IIC解码功能为免费标配功能. 按下【Decode】键,将解码类型设置为IIC协议,将协议触发设为ON,由...
郟度17654806680:
iic协议中应答和非应答的区别,我的意思是在应用中有什么区别. -
12467牛悦
: IIC中的应答是由从机在第9个SCL周期拉低SDA实现的 若不能产生应答或者说是在第9个周期使SDA为高电平即非应答则说明从机忙或者有其他的原因无法响应,主机应该发送停止或者重新开始发送 而应答说明了主机发送的一字节数从机已经收到,可以继续操作
郟度17654806680:
单片机iic总线问题 -
12467牛悦
: I2C总线理解上的难点就是在于 ACK和NACK的使用上,估计你就没看明白I2C协议.简要的给你说下:ACK的时候,SCL=1,表示时钟拉高,增加Delay是为了等待SDA的数据回传(这时master的SDA是输入态,slave的SDA是输出态,SDA==...
郟度17654806680:
I2C协议从机怎么发送ACK信号啊,就是把SDA拉低,要怎么编程实现啊 -
12467牛悦
: 以AT89c52单片机为例,主机发送指令过程中,当需要判断SDA是否被拉低时,先值高SDA,然后反复读取SDA电平,当SDA=0时就判断SDA被拉低了,在一定时间内没有读取到SDA=0就判断出错.汇编举例:aACK: MOV R7,#0 ; LOOP: CLR C ; MOV C, IO_SDA ; NOP; JNC IO_SDA , LOOP_OK ;有确认信号转 DJNZ R7, LOOP ; LOOP_ERR: //一定时间内没有检测到ACK信号. ...... LOOP_OK: //一定时间内检测到ACK信号. ......
郟度17654806680:
一个IIC协议的小问题~~求前辈点拨 -
12467牛悦
: 建议详细了解IIC的协议,按照协议规定,总线空闲时两线为高,当进行通信时,SDA在SCL高电平时由高变低表示通信开始( void iic_start(void) ),以后传输数据,SDA只能在SCL为低的时候才能发生变化,在SCL上升抓取数据;而停止位是在SCL高时SDA由低变高 (void iic_stop(void) ). 其实只要满足了协议要求最终两线处于什么状态也许都是可以的,或者你也可以试下在某些地方将SCL最终由低又拉为高是否能正常,当然首要还是在符合协议规定的前提下.
郟度17654806680:
stm8模拟IIC与硬件IIC区别 -
12467牛悦
: 您好,模拟IIC是需要了解IIC的协议,自己通过时序图去模仿那种协议实现的.该电平拉高的时候控制IO口拉高,该低的时候就拉低.优点是自己可以控制电平保持时间,便于调试.缺点也很明显,就是代码过于繁琐,所有操作都给自己来完成. 硬件IIC是由控制芯片已经写好了一种接口,并提供了配套函数(如果没有配套函数,也可以直接看手册操作控制寄存器).优点是代码简单,很多事情都不用本人去考虑,缺点是时序固定,有可能对于某些对时序要求极严格的芯片可能存在无ACK回应的情况.
郟度17654806680:
i2c通信从机 -
12467牛悦
: 看一下iic协议就明白了,一个始终一个数据,按顺序发送写命令,发送高地址,发送器件地址(单片机存储器地址),写数据,发送低地址,进入接收模式,直到退出.
郟度17654806680:
java协议中的ack是什么? -
12467牛悦
: ACK跟java没有直接关系,他是tcp/ip协议里的一部分.对应用层透明,无需你显示发送.当然自定协议除外. ACK (Acknowledgement)即是确认字符,在数据通信中,接收站发给发送站的一种传输类控制字符.表示发来的数据已确认接收无误.
郟度17654806680:
FPGA双向IO口和IIC协议 -
12467牛悦
: iic透传,你这样不行的.透传电路应该是跟踪通讯的状态,比如一次传输可以定义状态IDLE,START,MOSI,ACK,MOSI,ACK,RESTART,MOSI,ACK,MISO,ACK,STOP.每次状态机到了ACK状态的时候切换一下透传方向.
郟度17654806680:
在单片机中IIC中如果没有应答信号单片机如何处理 -
12467牛悦
: 应答是接收设别自动产生的,不一定是从机.在IIC上除了开始,停止和重复开始外,所有数据都在在时钟的低电平变化的,也就是为高后,数据就应该稳定了.所以如果是模拟...