i2c中怎么判断数据发送完成?

协议中说数据发送完成后接收器产生响应或不响应,但接收器怎么判断数据是否发送完成呢?
我也来说两句 查看全部回复

最新回复

  • deaddy (2008-8-26 14:54:07)

    怎么没有人回答?
  • 下雨天儿 (2008-8-26 15:24:09)

    同问。。。。。。
  • yadog (2008-8-26 16:10:15)

    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上的数据可随意改变;
  • deaddy (2008-8-26 16:45:24)

    谢谢楼上的回复,你说的这些我明白,协议里面有说。
    我想说的是:接收机在接受到发送机发送的最后一个数据后,在响应位产生一个响应或者不响应,但是接收机怎么知道它接收到的这个数据是最后一位呢?
    还有一种情况就是接收机不能接收更多数据是怎么回事?

    [ 本帖最后由 deaddy 于 2008-8-26 16:52 编辑 ]
  • nqq (2008-8-26 17:24:49)

    我觉得这是看在具体的使用环境下的问题,在特定环境下应该有说明需要多少字节,然后接收机判断是否结束
  • clwyl (2008-8-26 17:31:21)

    QUOTE:

    原帖由 deaddy 于 2008-8-26 16:45 发表
    谢谢楼上的回复,你说的这些我明白,协议里面有说。
    我想说的是:接收机在接受到发送机发送的最后一个数据后,在响应位产生一个响应或者不响应,但是接收机怎么知道它接收到的这个数据是最后一位呢?
    接收机里面是用状态机实现的, 接收机运行到最后一个数据状态后就进入应答状态了。
  • deaddy (2008-8-26 17:37:56)

    但是发送多少数据是由发送机决定的啊,我要做的是从机-接收机,发送机放松多少数据事先应该是不知道的啊,我应该根据SCL和SDA线的状态来判断吧?但是我想不出来怎么判断,好像应该有个预判一样
  • deaddy (2008-8-26 17:39:51)

    进入应答状态我知道,我说的最后一位不对,应该是最后一个字节
  • nqq (2008-8-26 17:50:00)

    QUOTE:

    原帖由 deaddy 于 2008-8-26 17:37 发表
    但是发送多少数据是由发送机决定的啊,我要做的是从机-接收机,发送机放松多少数据事先应该是不知道的啊,我应该根据SCL和SDA线的状态来判断吧?但是我想不出来怎么判断,好像应该有个预判一样
    既然你是做从机,那发送机就是主机,主机可以发结束而不需从机判断来发不响应。那你不用考虑这个问题
    我仍认为I2C只是作为一个接口,在实际使用中需要配合其他具体的功能,比如要传送什么数据,干什么用的之类的,那么怎么会不知道要发送多少数据呢
  • deaddy (2008-8-26 18:09:22)

    我觉得从机的不响应还是要发的吧,因为协议里面说:“如果从机接收器响应了从机地址但是在传输了一段时间后不能接收更多数据字节主机必须再一次终止传输,这个情况用从机没有产生响应来表示,从机使数据线保持高电平,主机产生一个停止或重复起始条件。”所以从机应该发送不响应来使数据线为高电平吧?
    还有不能接收更多数据是怎么回事?
  • nqq (2008-8-26 18:49:51)

    我觉得可能是在发生错误后,需要从机发不响应来提前结束,但是为什么会出错,我也不知道。在从机接收时,处于完全被动,除了接收地址外,不知道有什么情况会让它知道自己接收错误。
  • ilove314 (2008-8-26 22:57:21)

    比如说,传输的速率太快以至于从机还没有把数据写进去,当然就有可能出错了
  • deaddy (2008-8-27 10:01:09)

    那这种情况写程序的时候怎么表达呢?
  • nqq (2008-8-29 16:31:14)

    13#的意思应该是说,比如接收的最后一位数据为‘1’,从机打算发低电平响应,但是由于时钟的速度太快,‘0’还没有发出去就已经过了当前时钟周期,总线上就会认为是高电平不响应。
    这个写程序不需要考虑