发 帖  
原厂入驻New
申请华秋企业认证 多层板首单免费打样!
30s提交资料,10分钟通过审核(免费赔付+顺丰包邮)>>立即报名
[问答] 2.02bHarmony版本中I2C不能很好地工作
63 Harmony PIC32 I2C
分享
我正在使用PIC32 MZ2048 EFM100 Rev。A1和我周期性地掌握母线碰撞问题。总线速度是100千赫(我也测试了50千赫和10千赫),我无法解决它。我已经使用IntHandlerDrvI2CErrorInstanceISR函数中的这段代码测试了一个解决方法:DRV_I2C_Bus_Clear函数是在HARMony 2.03b中引入的。调试非常棘手,我必须等待10小时或更长时间才能捕获bug来测试这个解决方案。我还测试了位块模式,但由于我的应用程序运行在50Mhz,所以其他任务有些抖动。这是因为I2C在BITBUG模式下使用的定时器中断会导致代码上的开销。在2.02bHarmony版本中,位板I2C不能很好地工作(DRV_I2C_TransmitThenReceive函数存在一些问题)。A3似乎已经解决了I2C问题,但是我找不到任何关于它的反馈。有人经历过同样的问题吗?有切实可行的办法吗?A3是否比A1更好?有没有关于RoAMAP发布新B1版本的消息?我得走了,因为这个项目很快就要投产了,我没有时间。我对这个问题感到非常沮丧。我已经花了很多资源来解决USAT DRIV.CF中的一个问题。
0
2019-11-7 07:37:24   评论 分享淘帖 邀请回答

相关问题

15个回答
嗨,你好,关于修订的一些历史和I2C>原始的PIC32MZ系列(PIC32MZEC等)在所有版本中都有这些问题。PIC32MZEF修订版A1与eratta一起发布,但在勘误表中注明,它将在下一个硅修订版中修复。我记得修订版A2从来没有发布过,修订版A3仍然有问题。一位微芯片代表在论坛上提到,I2C3已经被人为地拆分,以便将部件借给其他I2C硬件,以及在设计中使用一些备用门/单元,但是它仍然没有修复它。然后“手动”模块产生长时间的停止条件,使总线返回空闲状态,然后在继续之前重新启用I2C外围设备,但是我现在找不到链接。低于100千赫。
2019-11-7 07:52:59 评论

举报

几个小时前,一个问题问得更好。星期一再问
2019-11-7 08:33:33 评论

举报

我在我的办公桌上有两个PIC32 MZ2048 EFM100样本,需要做一些其他的BOAD原型来测试A3版本。我无法从包装标识中了解HW版本是什么。这是打印在这两个代码上的数据:LOT 1:PIC32MZ2048EFM100代码:1551AR8LOT2:PIC32MZ2048EFM100代码:1648GHVDO,有人知道如何从这些代码中得到HW版本吗?
2019-11-7 08:42:23 评论

举报

我认为您必须将它们与程序员连接以识别修订——这些代码的确告诉您生产1551的年份和周是2015年的第51周,而1648是2016年的第48周或最近一周。我猜1648的是A3。
2019-11-7 08:59:17 评论

举报

无法连接到程序员,因为这些设备还没有在板上。我需要了解,如果它们是A3之前,安装在PCB上。
2019-11-7 09:17:54 评论

举报

用硝酸溶解外壳和上部金属,并用高功率范围读取模具的修正?交替地放在一张票上支持询问。很抱歉,我不能提供更好的解决方案,但我真的不知道除了使用程序员。
2019-11-7 09:44:22 评论

举报

我打算用X光检查一下在I2C区的模具的不同之处:-)无论如何,我已经开了一张支持票,并且给我当地的FAE发了一封电子邮件,希望很快能收到回复。
2019-11-7 09:50:15 评论

举报

2019-11-7 10:08:46 评论

举报

JNYN90099,DRVIII2CYBuxOffice函数是阻塞的。此外,您必须在应用程序代码中允许重新发送可能在进程中的任何消息。我做了一个测试,我可以在几分钟内让问题发生。通过在总线中断内设置标志,我能够向应用程序添加代码(它正在检查事务是否完成)以检测此标志,并使用DRV_I2C_Bus_Clear函数重置I2C总线。但是,我还必须清除/重置几个内部值,并使用DRV_I2C_QueueFlush函数,以便让我的状态机可靠地重发事务。经过这次改动,我连续一个多星期没有发现问题。说完,我不能保证你的情况和我的一样。但我建议将总线清除功能从中断中移出。它是阻塞的。我还建议使用队列刷新功能来取消以前的传输。然后剩下的只有STO简单地重新发送它。我希望这有帮助。
2019-11-7 10:20:31 评论

举报

有没有办法得到A3芯片样品?
2019-11-7 10:48:27 评论

举报

GDA,您的建议非常有用,我将尝试在错误中断ISR之外调用DRV_I2C_Bus_Clear函数,并通过调用DRV_I2C_QueueFlush函数来重置状态机。你是否使用了DRVIII2CYBuxOffice函数,或者你写了一个非阻塞函数?会让你知道这个解决办法能否解决我的问题。
2019-11-7 10:54:16 评论

举报

不能。外围设备被锁住了,所以您必须按住引脚,手动清除条件。您必须创建一个由定时器触发的状态机,以便以非阻塞方式执行该操作,并且在完成之前不使用外围设备。
2019-11-7 11:10:44 评论

举报

对我来说,这是清楚的,被阻断,需要去银行解锁。只是试图理解是否以非阻塞方式重写DRVIII2CYBuxOffice函数是有意义的。在此之前,我需要找到一个有效的解决办法。
2019-11-7 11:23:59 评论

举报

我尝试这样做:I2CyError被标记在I2C错误ISR中,与之前的情况没有太大的不同。工作8次以上,但迟早I2C不会重启。会做一些调试来了解正在发生的事情。
2019-11-7 11:35:33 评论

举报

我不确定我是否理解那个代码中的第二个if块。这将导致启动信号。传输函数是这样为您服务的。1:当您说“I2C不重新启动”时,您是否意味着不再看到SCL和SDA线路上的切换?你看见他们中的任何一个都卡得很低吗?2:如果线路在总线清除后返回很高,那么驱动程序内部的问题就开始了。我怀疑你可能需要清理队列。如果硬件保持一条线保持低,那么外围设备将拒绝启动,因为它认为总线不是空闲的。但是,如果调用传输函数并且驱动程序未能将数据发送到外围设备,那么即使取消了该传输,它也可能正在等待上一次传输完成。队列刷新功能应该清除队列。总线清除函数可以写成状态机。然而,正如QHB所建议的,你需要一些方法来计时信号。您还需要一些方法来继续运行状态机,直到它完成为止。QHB的建议意味着使用计时器和它的中断来实现这两个目的。您也可以简单地调用一个状态机函数,它使用核心定时器值进行定时,然后继续调用它,直到它完成。我希望这能有所帮助。
2019-11-7 11:50:26 评论

举报

只有小组成员才能发言,加入小组>>

64个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表