69

帖子

0

TA的资源

一粒金砂(初级)

41
 
好的,我试试0001000,另外这些地址有特殊用途我在I2C文档上为什么没有看到?可否把相关资料发到我邮箱,真的很感谢
 

回复

83

帖子

0

TA的资源

一粒金砂(高级)

42
 
我的是打印出来的文档,也不知道原始文件在哪里,你用google找一下吧。
Philips Semiconductors

The I2C-BUS SPECIFICATION
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

43
 
我试过了仍然不行,你仔细看一下我发给你的图,第九个脉冲应该发送ACK,在第九个脉冲上升沿到来之前SDA已经置位高电平了,也就是说释放了,但是还是没有ACK位,不知道是不是寄存器的问题呢?
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

44
 
仔细看了一下,和我这边的I2C通信图作了个比较,发现我这边主控方在第8个时钟下降之前已经释放了SDA线,这样在第8个时钟的下降沿DSP会控制SDA为低。
你的这个图,可能在第8个时钟下降沿时仍然由主控方控制SDA线,此时DSP也把SDA设置为低了,但是在其后主控方才释放SDA,成了高电平。

也就是说你的这个图可能是先DSP拉SDA为低,然后主控方才释放SDA。

把主控方的释放SDA的时间提前到时钟下降沿之前试试看?

 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

45
 
问题是第8个脉冲主控方要发给我R/W数据,这一位为一个时钟的低电平,所以不可能再第8个脉冲下降沿时就释放SDA,而且是第9个脉冲才发送ACK,这样在第9个脉冲上升沿到达之前释放数据线就行了,真的很迷惑呀
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

46
 
现在数据接收正确,我总觉得我已经发了应答位,我觉得好想工作在NCAK模式一样,但是我明明在CDMR寄存器里设为ACk了。请问还有什么地方要设置吗?
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

47
 
引用:

问题是第8个脉冲主控方要发给我R/W数据,这一位为一个时钟的低电平,所以不可能再第8个脉冲下降沿时就释放SDA,而且是第9个脉冲才发送ACK,这样在第9个脉冲上升沿到达之前释放数据线就行了,真的很迷惑呀
你试试看阿,我觉得应该就是这个问题了。

寄存器设置没有问题,和我这边的程序一样。
第8个时钟的R/W数据是在第8个时钟的上升沿由DSP读入。因此你在第8个时钟的下降沿之前释放SDA没有问题。DSP硬件上都是在时钟的上升沿或下降沿对数据线进行操作。

假设主控方在第8个时钟的下降沿之后,第9个时钟上升沿之前任意时间释放数据线的话,那么DSP在这中间何时拉低SDA呢,这样势必造成先拉低SDA后释放的问题,因为没有固定的时序。
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

48
 
我按照你说得那样做了,但是发现在第八个脉冲下降沿之前释放SDA我根本就收不到数,当然也检测不到ACK。也就是说检测不到r/w发送的数据了,我问了做发送端MCU程序的同事,他说在这样不符合标准I2C协议,一个脉冲对应发送一个数据,同事说应该在第8个脉冲下降沿和第9个脉冲上升沿之前释放SDA就可以了。但是这样我检测不到ACk,比较困惑。再帮忙分析一下

另外又发现一个比较奇怪的现象,我在CMDR寄存器里把工作方式设为master,为什么还能够正确接收到数据,是不应该的呀?

还有I2CSTR寄存器中NACKSNT位体现有没有发送NACK(如果发了,那肯定没有ack),但是I2CSTR不能改动,NACKSNT这一位怎么体现出来呢?怎么能修改呢?
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

49
 
引用:

我按照你说得那样做了,但是发现在第八个脉冲下降沿之前释放SDA我根本就收不到数,当然也检测不到ACK。也就是说检测不到r/w发送的数据了,我问了做发送端MCU程序的同事,他说在这样不符合标准I2C协议,一个脉冲对应发送一个数据,同事说应该在第8个脉冲下降沿和第9个脉冲上升沿之前释放SDA就可以了。但是这样我检测不到ACk,比较困惑。再帮忙分析一下

另外又发现一个比较奇怪的现象,我在CMDR寄存器里把工作方式设为master,为什么还能够正确接收到数据,是不应该的呀?

还有I2CSTR寄存器中NACKSNT位体现有没有发送NACK(如果发了,那肯定没有ack),但是I2CSTR不能改动,NACKSNT这一位怎么体现出来呢?怎么能修改呢?
那就奇怪了。怎么你的I2C碰到这么多问题。我这边的确是在第8个脉冲的下降沿之前释放的SDA(也可以说是同时,释放SDA和下降沿之间没有延时),然后时钟下降沿之后不到400ns的地方,SDA被DSP拉低了。MCU的程序不是我写的,所以我也不知道为什么要在下降沿之前释放SDA。如果你那边修改了之后,连数据都收不到了的话,那我就不清楚了。

master也能接收,可能是I2C自动转成slave模式了。

NACKSNT为1表示发了NACK,也就是出错了。 从波形看DSP发了NACK,那么你检查一下NACKSNT是否为1,如果是的话,那么DSP的确发了NACK,否则就是DSP发送的是ACK。
NACKSNT不是设置用的,是读取用的,读取之后,再写入1将其清零,和中断IFR类似。
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

50
 
我现在也比较迷茫,不知道怎么解决,我现在第8个脉冲下降沿3us后SDA拉高,我想问一下,你那边ACK低电平持续多长时间?
  另外您说的发送端我的同事说做不到释放SDA与第8个脉冲下降沿同时到达,因此我现在不知道是不是他们之间的延迟太大的原因?可否帮我分析一下呢?真的麻烦你了。
  还由您说的设为Master recieve 方式还能接收,是因为会自动变为slave recieve方式,我不太明白,在寄存器里CMDR设好工作在哪种方式应该就不会变了吧?怎么会自动变呢?另外是否工作在ack方式除了设置寄存器I2C_I2CMDR_NACKMOD_ACK,还有哪些地方需要设置呢?可否把你工作在此方式下寄存器设置发给我看一下,发到邮箱也行,我在对比一下,不胜感激
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

51
 

怎么没有答复了

麻烦你再给我说一下,谢谢呀,这边很着急,总是弄不出来,我改为发送方式也发送不出去数据
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

52
 
引用:
写道:
我现在也比较迷茫,不知道怎么解决,我现在第8个脉冲下降沿3us后SDA拉高,我想问一下,你那边ACK低电平持续多长时间?
  另外您说的发送端我的同事说做不到释放SDA与第8个脉冲下降沿同时到达,因此我现在不知道是不是他们之间的延迟太大的原因?可否帮我分析一下呢?真的麻烦你了。
  还由您说的设为Master recieve 方式还能接收,是因为会自动变为slave recieve方式,我不太明白,在寄存器里CMDR设好工作在哪种方式应该就不会变了吧?怎么会自动变呢?另外是否工作在ack方式除了设置寄存器I2C_I2CMDR_NACKMOD_ACK,还有哪些地方需要设置呢?可否把你工作在此方式下寄存器设置发给我看一下,发到邮箱也行,我在对比一下,不胜感激
我这边从第8个时钟的下降沿开始到第9个时钟的下降沿为止SDA全部是低电平。只是在第8个时钟的下降沿处SDA有瞬间的高电平。

关于自动转换工作方式请参考C6000 I2C的文档,Arbitration一节。

寄存器方面我已经和你的程序对照过了,应该是一样的。

I2C_Config C6713_I2C_Config = {

//        Uint32 i2coar;
        I2C_FMKS(I2COAR,A,OF(DSP_ADDRESS)),        // test用アドレス

//        Uint32 i2cimr;
        I2C_FMKS(I2CIMR,ICXRDY,MSK)        |
        I2C_FMKS(I2CIMR,ICRRDY,UNMSK)        |
        I2C_FMKS(I2CIMR,ARDY,MSK)                |
        I2C_FMKS(I2CIMR,NACK,MSK)                |
        I2C_FMKS(I2CIMR,AL,MSK),       

//        Uint32 i2cclkl;
        I2C_FMKS(I2CCLKL,ICCL,DEFAULT),

//        Uint32 i2cclkh;
        I2C_FMKS(I2CCLKH,ICCH,DEFAULT),

//        Uint32 i2ccnt;
        I2C_FMKS(I2CCNT,ICDC,DEFAULT),

//        Uint32 i2csar;
        I2C_FMKS(I2CSAR,A,DEFAULT),

//        Uint32 i2cmdr;
        I2C_FMKS(I2CMDR,NACKMOD,ACK)        |
        I2C_FMKS(I2CMDR,FREE,BSTOP)                |
        I2C_FMKS(I2CMDR,STT,START)                |
        I2C_FMKS(I2CMDR,STP,NONE)                |
        I2C_FMKS(I2CMDR,MST,SLAVE)                |
        I2C_FMKS(I2CMDR,TRX,RCV)                |
        I2C_FMKS(I2CMDR,XA,7BIT)                |
        I2C_FMKS(I2CMDR,RM,NONE)                |
        I2C_FMKS(I2CMDR,DLB,NONE)                |
        I2C_FMKS(I2CMDR,IRS,NRST)                |
        I2C_FMKS(I2CMDR,STB,NONE)                |
        I2C_FMKS(I2CMDR,FDF,NONE)                |
        I2C_FMKS(I2CMDR,BC,BIT8FDF),               

//        Uint32 i2cpsc;
        I2C_FMKS(I2CPSC,IPSC,DEFAULT)
};



 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

53
 
您好!嗯,寄存器应该是一样的,但是为什么看不到ACK真的觉得很奇怪,MCU的时钟为50K左右,我现在把我的从模式工作的工程发到你邮箱,你帮我看看有什么问题没有。如果你方便的话可不可以把你I2C工作在从模式下的测试过有应答位工程发给我,我加载试一下。谢谢

 另外改为从发送程序时,示波器显示的SDA是前七个脉冲显示的是MCU发来的地址1000,第8个地址显示的是r/w的发送发式下的高电平1,然后第九个脉冲应该是ACk的现在为高电平,之后8个脉冲一直保持高电平。
 
 我现在怀疑我的DSP是不是不能够发送数据呀,真的很奇怪呀,在接收方式下,我改变寄存器CMDR为主发送仍然能够进入中断,真晕呀,我觉得现在实在是搞不出来了,请高手帮助一下吧。
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

54
 
由于工作较忙,只测试了你的接收程序。

你发过来的程序是master的,我修改为slave之后可以看到ACK信号。由于我的硬件使用的是I2C0,所以把所有的I2C1的寄存器修改为了I2C0的寄存器。

刚才把你的接收程序稍作修改,发现发送数据也没有问题。



 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

55
 
真不好意思,打扰你工作了,嗯我的接收程序是改为master xmt 方式了,那是我做实验时改的试了一下,你加载了我的程序跑了没有问题吗?只是修改了那个MASTER 和XMT吗?那真是奇怪了,会不会是使用I2C0的缘故。如果您有时间帮我试一下从发送的程序。

我现在想把程序改为master xmt方式看看有没有时钟输出,现在写完没有发现有时钟输出,我想着是不是我计算的错误,我的SYSCLK2为110.5MHz,由于I2C主模式下时钟要在6.7-13.3之间我现在I2CPSC IPSC设为 2,ICCL设为0,ICCH=0,这样的话
主钟频率=(110.5/1)/( (6+0)+(6+0) )=9.1M符合那个范围,其中d=6,你觉得我算得对吗?
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(初级)

56
 
再问一下你使用的是什么I2C主设备?另外如果你有时间的话可不可以把我发送数据时的时序图发给我一份,谢谢呀,现在我实在是找不出是什么原因。如果你想到有什么可以让我试验的请告诉我,要不我这边进行不下去了。
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

57
 
MCU是
M16C M30620FCP...
I2C的程序应该是直接控制SCL和SDA两根线,没有6713那样的硬件I2C设备。
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

58
 
“MCU是
M16C M30620FCP...
I2C的程序应该是直接控制SCL和SDA两根线,没有6713那样的硬件I2C设备。”
不太明白什么意思?你也使用的6713芯片吗?我想知道你加载我的程序时的主机端是什么?

另外请您帮我看一下我楼上发给你的如果配置成master 发送形式时钟设置对不对?谢谢呀


 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

59
 
我这个硬件是DSP和MCU之间通信。
DSP是6713
MCU是M16C M30620FCP
MCU做I2C的master
不知道你所说的主机端是什么意思。

我的硬件无法配置成master,因为时钟线由MCU控制。
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

60
 
欧,那你的通信环境与我的相同,我的master MCU C51,slave是6713,同样我的DSp也不能够做master,我现在配成MASTER是想测试一下DSP上拉电阻有没有问题,并没有想让它与MCU通信的用途,而是我想看看DSP是不是能够发出数据,因为配成master SDA至少应该可以发送出地址。我现在还没有试验成功,SDL和SDA都没有数据出来。

我们的通信环境很相似,可否把你的I2C工程发给我邮箱我直接加载试一下,你应该也使用中断实现的吧?另外可不可以把你的接收时序图发给我看一下呢?我现在怀疑是不是master端有问题,真的不好意思请你帮助一下。

另外你使用的是I2C0,而我使用的是I2C1,应该没有区别吧?我这边的SDA管脚是不是被什么嵌住了呢?我现在不知道怎么试验测试?
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表