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.

[参考译文] TMS320F280049:CAN 发送数据丢失

Guru**** 1565925 points
Other Parts Discussed in Thread: SN74LVC1G11, C2000WARE
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1054036/tms320f280049-can-transmitting-data-losing

器件型号:TMS320F280049
主题中讨论的其他器件:SN74LVC1G11C2000WARE

您好:

 配置 F280049的 CAN 外设时遇到了问题:如图所示,CAN 总线有三个节点,F280049传输的 CAN ID 以0x61_开头,传输周期为100ms,问题是在我监控通信时 总线数据我发现0x61_帧很容易 消失大约 几秒钟!我发现当我将 大量  0x203数据帧传输到总线时(每20ms 大约50次)使用我的计算机很容易导致0x61_DATA 帧丢失 当我发送0x701时、不会发生损失。  现在我的困惑是、为什么 F280049传输的0x61_数据帧在总线上丢失了? 是 因为总线仲裁,总线 干扰或其他原因?我如何解决这个问题?

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

    一  以下测试可能会有所帮助:

    使用 USBCAN 监控总线、发现最大损耗为11s(发送周期为100ms)  

    使用 USBCAN 将数据帧0x203快速发送到总线将很容易触发 F28009帧丢失

    3.擦除总线上其它两个节点的程序,仅保留 F280049。 F280049不会丢失帧。

    4、如果 F280049的程序中只保留了 CAN 模块和 Timer1定时器模块、帧仍将丢失。

    5.将 F280049发送的其中一个帧的 ID 更改为0x199 (目前 、CAN 总线上的最小帧 ID 为0x201、F280049的 ID 全部以6开始)、使用 USBCAN 向总线发送0x203、不会发生0x199的帧丢失。

    6.禁用自动总线开启功能、使用 USBCAN 在不丢失帧的情况下发送大量0x203总线。 但是、在这种情况下、如果总线中添加了800kbps 波特率的异常节点以使总线裸片、则总线在移除异常节点后无法自动重新启动。

    7.启用 F280049的自动重传功能可以减少帧丢失、但无法完全避免。

    二 根据上述现象、以下因素可能会影响 F280049 CAN 传输的稳定性:

    1、总线仲裁、F280049发送的数据可能会被高优先级数据帧拥挤

    2.自动总线开启功能的初始化

    3.自动重传功能的初始化

    4、程序中其他中断对 CAN 中断的影响目前只是一个推测、尚未确认

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

    您好!

    数据丢失可以是多个因素的组合:

    首先、确保总线没有噪声/干扰、并遵循建议的~120欧姆总线终端以最大限度地减少反射和振铃。 建议通过能够使用 CAN 帧触发的示波器捕获总线上的多个 CAN 帧、这样您就可以看到数据在 CAN 总线上是否正确传输。 对于似乎丢失数据的节点、您可以监控 CAN_ES 寄存器以查看报告了哪些错误(例如:是否设置了 TxOk 标志?  LEC 的值是什么、总线处于关闭状态或是否报告了奇偶校验错误等) 您可以参阅以下应用手册、了解 CAN 总线的基础知识、遇到的典型问题以及帧上引入的不同 CAN 错误:

     http://www.ti.com/lit/sprace5

     http://www.ti.com/lit/spracq3

    第二、确保 CAN 总线不会过载。  建议的总线负载不应超过30%。  要计算负载、请确定 CAN 帧长度。  这只是(1/缓冲速率)*帧长度(STD ID 的 CAN 帧长度典型值为~125、而 EXT ID 为~150)除以 CAN 帧设置的周期。  示例:对于节点0x203,假设是500kbps,总线加载将是((1/500kbps)*125*50帧)/20ms = 62.5%-因此在这种情况下,节点0x203发送的数据太多。  您可以通过发送较少数量的消息或增加消息发送的周期来减轻总线负载、例如、每60ms 发送一次消息、而不是每20ms 发送一次。  同时检查其他两个节点上的负载。

    我建议先调查 我上面提到的前两项、然后再转到您指出的其他项。

    此致、

    Joseph  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的帮助。总线 终端为138欧姆。我监控了 CAN_ES 寄存器、发现错误代码为4或5、而且在正常使用时、我监控的总线负载约为3%。
    此外、我改进了 CAN 初始化的配置、启用了自动重发送、然后当 我使用 USBCAN 向总线发送0x203时、数据丢失消失 、总线 loaing 增加到大约60%! 但我不能确定它是否可以完全解决我的问题。我也有一个困惑:它是否可以因为总线仲裁而导致数据丢失、即使总线负载也低至3%。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    根据您描述的内容、我认为数据丢失是因为接收节点的速度不够快、无法接收帧并发出应答。  根据我对设置的理解、有三个 CAN 节点来自 F280049、ID 为0x61、0x203和0x701。  

      -所有3个 F280049 CAN 节点是否只是发送/发送数据、只有 USBCAN 接收来自 CAN 总线的所有数据?

      -您的 USBCAN 中是否有配置在收到消息时发出 ACK 信号?  我认为大多数 CAN 分析仪都具有这种仅侦听功能(不发送 ACK 位) 如果是这种情况、发送节点将尝试不断地发送同一帧、并阻止其他节点发送数据、因此最好打开 USBCAN 上的 ACK 信号。

      -当 USBCAN 接收到一条消息时、在它开始再次接收消息之前是否采取了任何进一步的操作(也许它与 PC 交互并等待它处理接收到的数据)?

    只是尝试查看上面是否有任何情形会阻止接收节点捕获总线上的所有有效 CAN 帧。  理论上、CAN 总线可以100%加载、但是每个发送的帧都应尽快接收和确认、以便具有下一个优先级 ID 的节点恢复其传输。  无论总线负载如何、您都应确保及时接收和确认发送的所有帧、以确保仲裁队列中的所有节点都有机会继续传输。

    此致、

    Joseph

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

    总线中的三个节点来自 F280049、F28069和 SPC5748G。   在这三个节点的 CANID 分配过程中、您可以看到我在请求过程中发送给您的图片、ID 以0x6_开头是 F280049、ID 以0x5_、0x7_、0x4_开头是 F28069、ID 以0x2_开头是 SPC5748G。  USBCAN 只是 一种在产品发现数据丢失问题后、我用来侦听和测试总线的工具、它可以帮助我  接收和显示 PC 上的所有数据、而无需采取其他进一步的措施。因为数据 丢失问题的重复率很高 正常使用时为低电平、所以我 也使用 USBCAN 将大量0x203帧发送到总线、 以重现问题。我如何确认问题"所有发送的帧都被及时接收和确认、以确保仲裁队列中的所有节点都有一个 在  数据丢失率低的情况下、是否有机会继续传输它们? 使用 示波器?

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

    遗憾的是、您所提及的图片并未在帖子中显示、因此我很难理解您的设置。  是否可以再次连接?  这三个节点是否仅传输数据?

    谢谢、

    Joseph

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

    图片仅包含总线中的 ID、我直接列出它:

    F280049->0x611~0x620;

    F28069->0x710/0x701/0x704/0x700/0x703/0x700/0x400/0x490/0x510/0x560;

    SPC5748->0x210/0x211/0x201/0x203。

    除了传输数据外、这三个节点还用作电源控制器和系统控制器。 我将发布 F280049的 CAN 初始化功能。(此 CAN 初始化不启用 自动重传 功能 )

    void CanService_CANBInit(void)
    {
        struct CAN_REGS CanbShadow;
    
        EALLOW;
        /*CAN-B GPIO12 RXD ,GPIO13 TXD*/
       GpioCtrlRegs.GPAPUD.bit.GPIO12   = 0;         // Disable pullup on GPIO12
       GpioCtrlRegs.GPAGMUX1.bit.GPIO12 = 0;        // GPIO12 = CANTXB
       GpioCtrlRegs.GPAMUX1.bit.GPIO12  = 2;        // GPIO12 = CANTXB
    
       GpioCtrlRegs.GPAPUD.bit.GPIO13   = 0;         // Disable pullup on GPIO13
       GpioCtrlRegs.GPAGMUX1.bit.GPIO13 = 0;         // GPIO13 = CANRXB
       GpioCtrlRegs.GPAMUX1.bit.GPIO13  = 2;        // GPIO13 = CANRXB
       GpioCtrlRegs.GPAQSEL1.bit.GPIO13 = 3;        // Asynch input
    
        EDIS;
        //
    
            CanbShadow.CAN_CTL.all = CanbRegs.CAN_CTL.all;
            CanbShadow.CAN_CTL.all = 0x0;//
            CanbShadow.CAN_CTL.bit.Init = 0x1;//Initialization & 0101 Parity function disabled
            CanbShadow.CAN_CTL.bit.PMD = 0x5;///0101
            CanbRegs.CAN_CTL.all = CanbShadow.CAN_CTL.all;
    
            //CanbShadow.CAN_RAM_INIT.all = CanbRegs.CAN_RAM_INIT.all;
            CanbShadow.CAN_RAM_INIT.all = 0x1A;
            CanbRegs.CAN_RAM_INIT.all = CanbShadow.CAN_RAM_INIT.all;
    
            while(!((CanbShadow.CAN_RAM_INIT.all) & CAN_RAM_INIT_MASK == (CAN_RAM_INIT_RAM_INIT_DONE) | (CAN_RAM_INIT_KEY2) | (CAN_RAM_INIT_KEY0)))         /*这一段程序有歧义*/
            {
                // Wait until RAM Init is complete
            }
    
            EALLOW;
            CanbShadow.CAN_CTL.all = CanbRegs.CAN_CTL.all;
            CanbShadow.CAN_CTL.bit.SWR = 0x1;
            CanbRegs.CAN_CTL.all = CanbShadow.CAN_CTL.all;
            DELAY_US(2.0);
    
            CanbShadow.CAN_CTL.all = CanbRegs.CAN_CTL.all;
            CanbShadow.CAN_CTL.bit.ABO = 0x1;
            CanbShadow.CAN_CTL.bit.DAR = 0x1;
            CanbRegs.CAN_CTL.all = CanbShadow.CAN_CTL.all;
    
            CanbShadow.CAN_ABOTR = 0xFF;
            CanbRegs.CAN_ABOTR = CanbShadow.CAN_ABOTR;
            EDIS;
    
            // Delay for 14 cycles
            DELAY_US(2.0);
            // Enable write access to the configuration registers
            CanbShadow.CAN_CTL.all = CanbRegs.CAN_CTL.all;
            CanbShadow.CAN_CTL.bit.CCE = 0x1;
            CanbRegs.CAN_CTL.all = CanbShadow.CAN_CTL.all;
    
            // To set the bit timing register, the controller must be placed in init
            // mode (if not already), and also configuration change bit enabled.
            // State of the init bit should be saved so it can be restored at the end.
            CanbShadow.CAN_CTL.all = CanbRegs.CAN_CTL.all;
            CanbShadow.CAN_CTL.bit.Init = 0x1;
            CanbShadow.CAN_CTL.bit.CCE = 0x1;
            CanbRegs.CAN_CTL.all = CanbShadow.CAN_CTL.all;
    
            ///Configue for 500Kbps
            CanbShadow.CAN_BTR.all = CanbRegs.CAN_BTR.all;
            CanbShadow.CAN_BTR.bit.BRPE = 0x0;
            CanbShadow.CAN_BTR.bit.BRP = 0x9;
            CanbShadow.CAN_BTR.bit.TSEG1 = 0xA;
            CanbShadow.CAN_BTR.bit.TSEG2 = 0x7;
            CanbShadow.CAN_BTR.bit.SJW = 0x3;
            CanbRegs.CAN_BTR.all = CanbShadow.CAN_BTR.all;
    
            CanbShadow.CAN_CTL.all = CanbRegs.CAN_CTL.all;
            CanbShadow.CAN_CTL.bit.CCE = 0x0;
    
            // If Init was not set before, then clear it.
            if(CanbRegs.CAN_CTL.bit.Init == 0x1u)
            {
                CanbShadow.CAN_CTL.bit.Init = 0x0;
            }
            CanbRegs.CAN_CTL.all = CanbShadow.CAN_CTL.all;
    
            CanbShadow.CAN_CTL.all = CanbRegs.CAN_CTL.all;
            CanbShadow.CAN_CTL.bit.IE0 = 0x1;//
        //  CanbShadow.CAN_CTL.bit.EIE = 0x1;
        //  CanbShadow.CAN_CTL.bit.SIE = 0x1;
            CanbRegs.CAN_CTL.all = CanbShadow.CAN_CTL.all;
    
            CanbShadow.CAN_GLB_INT_EN.all = CanbRegs.CAN_GLB_INT_EN.all;
            CanbShadow.CAN_GLB_INT_EN.bit.GLBINT0_EN = 0x1;//
            CanbRegs.CAN_GLB_INT_EN.all = CanbShadow.CAN_GLB_INT_EN.all;
    
            DELAY_US(10.0);
    
    /***************************************************************************
     *  配置CAN发送接收邮箱
    ***************************************************************************/
            CanbMailBoxConfigure(CANMsgOB_WORK_INFO,CANMsgID_WORK_INFO,BitCANTxEnable,FrameStandrad);
            DELAY_US(10.0);
    
            CanbMailBoxConfigure(CANMsgOB_SAMPLE_INFO1,CANMsgID_SAMPLE_INFO1,BitCANTxEnable,FrameStandrad);
            DELAY_US(10.0);
    
            CanbMailBoxConfigure(CANMsgOB_SAMPLE_INFO2,CANMsgID_SAMPLE_INFO2,BitCANTxEnable,FrameStandrad);
            DELAY_US(10.0);
    
            CanbMailBoxConfigure(CANMsgOB_SAMPLE_INFO3,CANMsgID_SAMPLE_INFO3,BitCANTxEnable,FrameStandrad);
            DELAY_US(10.0);
    
            CanbMailBoxConfigure(CANMsgOB_CALIBRATIONCOEFF_REQ,CANMsgID_CALIBRATIONCOEFF_REQ,BitCANTxEnable,FrameStandrad);
            DELAY_US(10.0);
    
            CanbMailBoxConfigure(CANMsgOB_VERSION_INFO,CANMsgID_VERSION_INFO,BitCANTxEnable,FrameStandrad);
            DELAY_US(10.0);
    
            CanbMailBoxConfigure(CANMsgOB_Tst_INFO1,CANMsgID_Tst_INFO1,BitCANTxEnable,FrameStandrad);
            DELAY_US(10.0);
    //
            CanbMailBoxConfigure(CANMsgOB_Tst_INFO2,CANMsgID_Tst_INFO2,BitCANTxEnable,FrameStandrad);
            DELAY_US(10.0);
    
            CanbMailBoxConfigure(CANMsgOB_Soft_TURNONFF_SET,CANMsgID_Soft_TURNONOFF_SET,BitCANRxEnable,FrameStandrad);
            DELAY_US(10.0);
    
            CanbMailBoxConfigure(CANMsgOB_Soft_SNATCH_SET,CANMsgID_Soft_SNATCH_SET,BitCANRxEnable,FrameStandrad);
            DELAY_US(10.0);
    
            CanbMailBoxConfigure(CANMsgOB_Vbus_SET,CANMsgID_Vbus_SET,BitCANRxEnable,FrameStandrad);
            DELAY_US(10.0);
    
            CanbMailBoxConfigure(CANMsgOB_CalibrationCeff_SET,CANMsgID_CalibrationCeff_SET,BitCANRxEnable,FrameStandrad);
            DELAY_US(10.0);
    
            CanbMailBoxConfigure(CANMsgOB_INV_FaultINFO,CANMsgID_INV_FaultINFO,BitCANRxEnable,FrameStandrad);
            DELAY_US(10.0);
    
    
    
            CanbShadow.CAN_CTL.all = CanbRegs.CAN_CTL.all;
            CanbShadow.CAN_CTL.bit.Init = 0u;
            CanbShadow.CAN_CTL.bit.CCE = 0u;
            CanbRegs.CAN_CTL.all = CanbShadow.CAN_CTL.all;
            DELAY_US(100.0);
        }
        
        
        
    static void CanbMailBoxConfigure(Uint16 MbNum,Uint32 MsgID,Uint16 MsgKind,Uint16 FrameKind)
    {
        struct CAN_REGS CanbShadow;
    
        while(CanbRegs.CAN_IF1CMD.bit.Busy == 0x1u)
        {
    
        }
        //CanbShadow.CAN_IF1MSK.all = CanbRegs.CAN_IF1MSK.all;
        CanbShadow.CAN_IF1MSK.all = 0x0;//
        CanbRegs.CAN_IF1MSK.all = CanbShadow.CAN_IF1MSK.all;
    
        //CanbShadow.CAN_IF1ARB.all = CanbRegs.CAN_IF1ARB.all;
        CanbShadow.CAN_IF1ARB.bit.Dir = MsgKind;//1 for Recieve
        CanbShadow.CAN_IF1ARB.bit.MsgVal = Enable;//enable the Message Object
        CanbShadow.CAN_IF1ARB.bit.Xtd = FrameKind;//Standard/Extend frame
        if(0u!=FrameKind)
        {
            CanbShadow.CAN_IF1ARB.bit.ID = MsgID;//Extend frame
        }
        else
        {
            CanbShadow.CAN_IF1ARB.bit.ID = ((MsgID<<12<<6)&0x1FFC0000UL);//Standard
        }
        CanbRegs.CAN_IF1ARB.all = CanbShadow.CAN_IF1ARB.all;
    
    
        //CanbShadow.CAN_IF1MCTL.all = CanbRegs.CAN_IF1MCTL.all;
        CanbShadow.CAN_IF1MCTL.bit.DLC = 0x8;//Data Length is 8
        CanbShadow.CAN_IF1MCTL.bit.EoB = 0x1;
        CanbShadow.CAN_IF1MCTL.bit.RxIE = ~MsgKind;//enable Receive Interrupt
        CanbShadow.CAN_IF1MCTL.bit.TxIE = MsgKind;//enable Receive Interrupt
        CanbRegs.CAN_IF1MCTL.all = CanbShadow.CAN_IF1MCTL.all;
    
        //CanbShadow.CAN_IF1CMD.all = CanbRegs.CAN_IF1CMD.all;
        CanbShadow.CAN_IF1CMD.bit.Arb = 0x1;
        CanbShadow.CAN_IF1CMD.bit.Control = 0x1;
        CanbShadow.CAN_IF1CMD.bit.Mask = 0x1;
        CanbShadow.CAN_IF1CMD.bit.DIR = 0x1;
        CanbShadow.CAN_IF1CMD.bit.MSG_NUM = MbNum;
        CanbRegs.CAN_IF1CMD.all = CanbShadow.CAN_IF1CMD.all;
    }
    
    void CanService_SendByCanb(Uint16 MSG_NUM,
                               Uint16 data0_tx,Uint16 data1_tx,Uint16 data2_tx,Uint16 data3_tx,
                               Uint16 data4_tx,Uint16 data5_tx,Uint16 data6_tx,Uint16 data7_tx)
    {
    
        struct CAN_REGS CanbShadow2;
    /*Test for CAN*/
    //CanbShadow.CAN_IF1CMD.all  = CanbRegs.CAN_IF1CMD.all;
    
    CanbRegs.CAN_IF1DATA.bit.Data_0 = (data0_tx & 0xFFu);
    CanbRegs.CAN_IF1DATA.bit.Data_1 = (data1_tx & 0xFFu);
    CanbRegs.CAN_IF1DATA.bit.Data_2 = (data2_tx & 0xFFu);
    CanbRegs.CAN_IF1DATA.bit.Data_3 = (data3_tx & 0xFFu);
    
    CanbRegs.CAN_IF1DATB.bit.Data_4 = (data4_tx & 0xFFu);
    CanbRegs.CAN_IF1DATB.bit.Data_5 = (data5_tx & 0xFFu);
    CanbRegs.CAN_IF1DATB.bit.Data_6 = (data6_tx & 0xFFu);
    CanbRegs.CAN_IF1DATB.bit.Data_7 = (data7_tx & 0xFFu);
    while(CanbRegs.CAN_IF1CMD.bit.Busy == 1u){}
    //CanbShadow.CAN_IF1CMD.all  = CanbRegs.CAN_IF1CMD.all;
    
    CanbShadow2.CAN_IF1CMD.bit.Control = 1;
    CanbShadow2.CAN_IF1CMD.bit.MSG_NUM = MSG_NUM;
    CanbRegs.CAN_IF1CMD.all = CanbShadow2.CAN_IF1CMD.all;
    while(CanbRegs.CAN_IF1CMD.bit.Busy == 1u){}
    
    CanbShadow2.CAN_IF1CMD.all = 0x0;
    CanbShadow2.CAN_IF1CMD.bit.DATA_A = 0x1;
    CanbShadow2.CAN_IF1CMD.bit.DATA_B = 0x1;
    CanbShadow2.CAN_IF1CMD.bit.DIR = 0x1;
    CanbShadow2.CAN_IF1CMD.bit.TXRQST = 0x1;
    //        CanbShadow2.CAN_IF1CMD.bit.MSG_NUM = 0x1;
    while(CanbRegs.CAN_IF1CMD.bit.Busy == 1u){}
    CanbRegs.CAN_IF1CMD.all = CanbShadow2.CAN_IF1CMD.all;
    
    }

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

    需要明确的是、ID 为0x611-0x620的 F280049是否 是唯一丢失数据的节点、而其他两个节点 F28069和 SPC5748不会丢失数据?  很抱歉,我刚才不清楚。  对于这三个节点、CAN 收发器的类型是否相同?  您能否为 F280049发送正确的 CAN 功能?  您所附的是 F28069的初始化。

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

    另外两个节点不会丢失数据、三个节点的 Tx 是 SN74LVC1G11的输入(单路3输入正与门) 在单个施密特触发缓冲器之后  、  然后 SN74LVC1G11的输出到达 iso1042bdwvr 的 TXD 引脚、三个节点的 Rx   分别连接到单个施密特触发缓冲器、然后 再连接到 iso1042bdwvr 的 RXD 引脚。 我所附的内容实际上是  我的程序中 F280049的初始化和数据发送功能、它有什么问题吗?

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

    很抱歉我上星期外出时反应很晚。  好的、那么您将使用与门和缓冲器来代替收发器。  F280049/F28069运行在3.3V I/O 电平上。  我检查了 SPC5748的数据表、它看起来支持3.3和5V I/O 电平。  只是想确认您是否已将 SPC5748配置为使用3.3V 电平。

    至于 CAN 初始化、不确定其工作原理、因为 F280049 CAN 设计不使用 CAN 影子寄存器、而我认为这适用于 F28069器件。  F280049例程来自哪里?  这是通过 F28069例程开发的、以便使其正常工作吗?   

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

    SPC5748已配置为使用3.3V 电平。至于 CAN 初始化、我已确认我们将 F280969的影子寄存 器的用法与 F280049的配置结合在一起。

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

    不确定如何使用 F28069寄存器的 CAN 结构与 F280049配合使用。  这是两种非常不同的 CAN 设计。  F28069为 eCAN 类型、F280049为 DCAN。  如果您看一下器件 TRM CAN 寄存器部分、它们会使用不同的寄存器集。  使用 F280069 CAN 例程时、F280049中可能有一些 CAN 寄存器未针对 F280049进行正确映射/编程。

    F28069运行在90MHz SYSCLK 上。  F280049为100MHz SYSCLK。  您无法对 F280049使用 F28069的位时序设置、这可能是您丢失 F280049节点消息的原因之一。

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

    很抱歉、我可能没有清楚地描述 "F280969的影子寄存器方式"的用法。正如您在代码中看到的、 我刚刚将 CAN_regs 类型 变量 CanbShadow 定义为"初始 化影子 变量"、但不使用 F28069的影子寄存器、 并且 CAN_regs 类型也来自 f28004x_CAN.h。在 CAN 初始化过程中、我只 需将值分配给影子变量 CanbShadow、然后再分配真实的 CAN 寄存器 从 CanbShadow 获取配置。 也许这个过程不是"官方的"、但是我使用的寄存器是 F280049的寄存器。

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

    什么因素会阻止您使用 C2000Ware 中 F280049的 CAN 例程?  我们的软件团队已经测试了其中的函数和例程、因此强烈建议使用这些函数来确保 CAN 寄存器的正确编程和排序。

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

    我尝试在 Resource Explorer 中安装 f28004x_driverlid 并在  Launch Pad 上运行 CAN_Ex5_Transmit _Receive 、但始终失败、并显示注释"您的操作系统不支持此软件包"、如何在 CCS 中安装该库?

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

    您在计算机中使用的是哪种操作系统以及您尝试安装的是哪种驱动程序版本?

    谢谢、

    Joseph  

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

    我正在使用 Win10 、我想安装 C2000Ware - v:4.00.00.00。或者如何从    C2000Ware 中配置 F280049的 CAN 例程、使其编译成功?它 看起来是在 Driverlib 中编程的、但我以前没有使用库。如何将库插入项目中。是否有任何指导 可以提供帮助吗?

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

    好的、我们一直在使用 Win10和 C2000Ware v4.0、因此这不是问题。  第一步是从 C2000Ware 站点安装该软件。  在"C2000WARE - C2000Ware for C2000 Microcontrollers"下的下载选项按钮中、选择"Windows Installer for C2000Ware"。  按照所有说明下载并执行安装程序。  成功安装后、如果您选择了默认安装位置、您应该会看到安装在 C:\ti\c2000\C2000Ware_4_00_00_00中的文件。  此安装不会覆盖 PC 中以前版本的 C2000Ware。

    确保先成功安装 C2000Ware driverlib、然后我们将完成使用现有位字段类型项目添加所需头文件和文件的步骤。  请告诉我您何时安装了 C2000Ware v.4.0、并将成功引导您完成后续步骤。