This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS570LS1114:CAN 问题

Guru**** 2392765 points
Other Parts Discussed in Thread: TMS570LS1114

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1036195/tms570ls1114-can-issue

器件型号:TMS570LS1114

尊敬的团队:

在 TMS570LS1114的 CAN 通信中、我实现了 CAN1之间的通信;但 CAN2和 CAN3之间无法通信(配置 与 CAN1相同);您知道 原因吗? 是否对不同 CAN 端口之间的通信有任何特别注意?图片中显示了我的设计方案。

SDM1/2/3为 TMS570LS1114芯片、每个芯片具有相同 的过程

首先 、我使用 SDM1的 CAN1的 messageBox1进行发送、 使用 SDM2的 CAN1的 messageBox2进行接收、 同一地址正常通信。

然后、我使用 SDM1的 CAN3的 messageBox1进行发送、使用 SDM2的 CAN2的 messageBox1进行接收、同一地址无法通信。  

感谢你的帮助。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    对于 CAN 2和 CAN3没有什么特别之处。

    当您调用 canTransmit()和 cangetData(): canREG2时,是否使用了 CAN2的正确寄存器帧指针?

    CANInit()中是否启用了 CAN2和 CAN3?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢你的帮助。

    1.在调用 canTransmit()和 cangetData()时,是否为 CAN2使用正确的寄存器帧指针: canREG2?

    我想 我 是对的。我会给你 我的程序、请看一下。

    CANInit()中是否启用了 CAN2和 CAN3?

    是的、当然。我启用所有 CAN (CAN1/CAN2/CAN3)驱动器。

    void can_function(void)
    {
    
    	u8gv_tmr_addr = get_sdm_addr();
    	if (u8gv_tmr_addr == ADDR_TMR_A)
    	{
    
    		canTransmit(canREG1, canMESSAGE_BOX1, (const uint8 *)&tx_data1[0]);		//CAN1 sends data1 to A and B
    //		canTransmit(canREG2, canMESSAGE_BOX1, (const uint8 *)&tx_data1[0]);		//CAN2 sends data1 to C
    //		canTransmit(canREG3, canMESSAGE_BOX1, (const uint8 *)&tx_data1[0]);		//CAN3 sends data1 to B
    
    		canGetData(canREG1, canMESSAGE_BOX5, (uint8 *)&rx_data1[0]);	//CAN1 receive data for B
    		canGetData(canREG1, canMESSAGE_BOX6, (uint8 *)&rx_data1[0]);	//CAN1 receive data for C
    //		canGetData(canREG3, canMESSAGE_BOX5, (uint8 *)&rx_data1[0]);	//CAN3 receive data for B
    		canGetData(canREG2, canMESSAGE_BOX6, (uint8 *)&rx_data1[0]);	//CAN2 receive data for C
    	}
    	else if (u8gv_tmr_addr == ADDR_TMR_B)
    	{
    		canTransmit(canREG1, canMESSAGE_BOX2, (const uint8 *)&tx_data2[0]);		//CAN1 sends data2 to A and C
    		canTransmit(canREG2, canMESSAGE_BOX2, (const uint8 *)&tx_data2[0]);		//CAN2 sends data2 to A
    		canTransmit(canREG3, canMESSAGE_BOX2, (const uint8 *)&tx_data2[0]);		//CAN3 sends data2 to C
    
    		canGetData(canREG1, canMESSAGE_BOX4, (uint8 *)&rx_data2[0]);	//CAN1 receive data for A
    		canGetData(canREG1, canMESSAGE_BOX6, (uint8 *)&rx_data2[0]);	//CAN1 receive data for C
    //		canGetData(canREG2, canMESSAGE_BOX4, (uint8 *)&rx_data2[0]);	//CAN2 receive data for A
    //		canGetData(canREG3, canMESSAGE_BOX6, (uint8 *)&rx_data2[0]);	//CAN3 receive data for C
    	}
    	else if (u8gv_tmr_addr == ADDR_TMR_C)
    	{
    		canTransmit(canREG1, canMESSAGE_BOX3, (const uint8 *)&tx_data3[0]);		//CAN1 sends data3 to A and B
    		canTransmit(canREG2, canMESSAGE_BOX3, (const uint8 *)&tx_data3[0]);		//CAN2 sends data3 to B
    		canTransmit(canREG3, canMESSAGE_BOX3, (const uint8 *)&tx_data3[0]);		//CAN3 sends data3 to A
    
    		canGetData(canREG1, canMESSAGE_BOX4, (uint8 *)&rx_data3[0]);	//CAN1 receive data for A
    		canGetData(canREG1, canMESSAGE_BOX5, (uint8 *)&rx_data3[0]);	//CAN1 receive data for B
    		canGetData(canREG2, canMESSAGE_BOX5, (uint8 *)&rx_data3[0]);	//CAN2 receive data for B
    		canGetData(canREG3, canMESSAGE_BOX4, (uint8 *)&rx_data3[0]);	//CAN3 receive data for A
    
    	}
    }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的帮助、他们找到了原因;
     由于他们自己的疏忽、我发送了标准帧、但 CAN3默认在代码生成器中选择扩展帧、 这会导致 客户  发送和接收不一致的数据。