Part Number:TMS320F28034
如题,我在使用eCAN模块的时候,正常情况下都是没问题的。 但是其中有一个系列的电源板可能相对干扰比较大。在带电机运行过程中,我以20ms通讯一次的周期在两台机器之间进行CAN通讯。 大概运行几分钟后出现通讯掉线现象,经排查,发现所有发送邮箱都处于忙碌状态导致无法正常发送数据。 当周期改成200ms试,大概坚持了半个多小时还是出现了这个现象。 相同程序用在另外一款机器上就没有类似现象,估计是板件干扰比较大。 我想通过软件解决这个问题,试过在检测到所有邮箱出现忙碌状态后利用发送请求复位寄存器CANTRR强制终止数据发送。可惜没有成功,现象表现为:当前周期确实清除了忙碌状态,当下一个发送数据指令到来时,邮箱还是无法正常发送数据,又出现了一直处于忙碌状态。 请问,我需要怎么设置才能有效的解决这个干扰问题(偶尔的数据丢失是被允许的)。 如果实在不行的话是否可以在出现这个现象后重新初始化eCAN模块,不知道这样操作有没有作用。
user4077200:
其实简单的概括就是,如何在发送数据不成功的时候,终止此次数据的发送,并且不能影响到下次数据的发送
,
Green Deng:
我看到像F280049等DCAN的CAN模块有一个CAN_CTL.Init位,置位的话可以复位CAN模块。但是我看F28034应该是没有这个位的,不知道CANES.CCE能不能起到复位CAN模块的作用
,
user4077200:
谢谢回复,我目前使用的方法是遇到这种全部邮箱忙碌的情况直接重新初始化eCAN模块再进行通讯。 临时先这样解决问题。 后续我再研究下看看还有没有其他办法。 有个问题,请问一般是什么样的情况下才会出现让一个邮箱一直显示忙碌,确又不发送数据。
,
Green Deng:
说实话,一般情况下还真不太会邮箱一直忙碌,除非波特率实在设置太快了数据量又比较大。