Part Number:TMS570LS3137Other Parts Discussed in Thread: HALCOGEN
我现在使用TMS570LS3137的CAN进行数据发送,ID使用的是29位扩展ID,ID的最后8位是做了一个帧序号累加的处理,即第一帧是00,第二帧是01,以此类推,最后一帧是FF。
现在发送数据是出现如下现象:
ID DATA
xx xx xx 00 xx xx xx xx xx xx xx xx
xx xx xx 02 xx xx xx xx xx xx xx xx
xx xx xx 03 xx xx xx xx xx xx xx xx
. .
. .
. .
xx xx xx FF xx xx xx xx xx xx xx xx
本来第二帧ID最低8位应该是01,变成了02,数据未丢还是第二帧的数据,后续的ID都正常。我发送前调用canUpdateID更改ID,随后调用canTransmit发送数据。
请问下有什么解决办法可以解决上述问题?
Cherry Zhou:
您好,我们已收到您的问题并升级到英文论坛寻求帮助,如有答复将尽快回复您。谢谢!
,
Cherry Zhou:
您好,假设HALCoGen 生成的 CANTransmit() API 是邮箱发送的 (例如 mailbox1) 具有预定义的messageID。 预定义的message ID 在 CANInit() 中定义或者通过调用 canUpdateID() 来定义。
UINT32 CANTransmit (canton_t * 节点、 UINT32 MessageBox 、 const uint8 * data) -> 不包含message ID。
如果您不使用预定义的message ID,那么必须在调用 canTransmit() 之前调用 canUpdateID()。 请问您是否使用 HALCOGen 生成的 API ?
在发送 ID=1 的消息之前,您有没有调用 canUpdateID() 将消息 ID 更新为 0x1 ? 以及您是如何在下表中检查消息是否已发送的?
ID DATA
xx xx xx 00 xx xx xx xx xx xx xx xx
xx xx xx 02 xx xx xx xx xx xx xx xx
xx xx xx 03 xx xx xx xx xx xx xx xx
. .
. .
. .
xx xx xx FF xx xx xx xx xx xx xx xx
,
jayelva2003:
您好,我是使用HALCOGen 生成的 API ,我再调用canTransmit前已调用canUpdateID更行ID
,
Cherry Zhou:
好的感谢您提供的信息,已经跟进给工程师了哈,有答复尽快给到您。
,
Cherry Zhou:
您好,如果在调用 canTranmi () 函数之前已经更新了 mailbox1 中的message ID,那么应该发送在 mailbox1 中包含新message ID 的message。
您可以使用
msgID = canGetID(canREG1, canMESSAGE_BOX1);
重新读取 ID 来确保 ID 已更新;
或者可以配置message RAM为RDA:
1. DCAN CTL |= 1<<7; //enable TEST mode
2. DCAN_TEST |= 1<<9; //configure CAN msg RAM as RDA