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.

使用28377d和CAN分析仪通信问题

Other Parts Discussed in Thread: CONTROLSUITE, C2000WARE

我用CAN分析仪与28377d通信,只能28377d发送数据,但不能接收数据,而且28377d不断发送相同的数据,我用的是controlsuite的can_loopback的例程,波特率和终端电阻都用对了,例程只修改了GPIO引脚,以及注释掉了测试模式,其他基本没变,但28377一直接收不到数据,搞了好几天没弄明白哪里出错了,救救孩子吧

  • 请问之前使用未修改的例程是否可以成功?您是如何修改的呢?若是可以的话请上传或者私信下您的工程,谢谢

    硬件方面的话,您是使用的TI开发板还是您的自制板?
  • 我最近使用280049C的板子运行can_loopback例程时也是不能接收数据,看库函数的实现过程看得有点难受。。。还有请问TI什么时候能提供28004xCAN模块的寄存器版本的库orz
  • 我使用280049C的板子运行can_loopback例程时是可以接收数据的。您现在测试时是什么反应?

    另外很抱歉目前都是driverlib的例程

  • 非常感谢你的解答,看了你的截图我发现是自己原来调试程序的问题,用单步运行的方式跑到CAN_readMassage的时候会导致收不到数据会出错,如果直接在后面设断点就没问题了,再次感谢

    还想问一下关于外部时钟的问题,我看参考手册学习这块板子的时候一直以为外部时钟XTAL_OSC是需要另外安装到板子上的,但是在例程的库函数里面发现直接使用的就是20MHZ的XTAL_OSC,这是代表280049C上的已经有了外部时钟而且是20MHZ吗?

  • 很高兴能帮到您!

    关于时钟问题,您可以参考 www.ti.com/.../spruii7a.pdf

    2.3.6

    By default, the Launchpad uses an on-board crystal oscillator, Y2, as the clock source for the on-chip Phase-Locked Loop (PLL) that
    requires both X1 and X2 signals of the MCU.

    您可以在C2000ware的默认路径下查找板子的BOM表和原理图

    Y2 Crystal, 20 MHz, 25 ppm, 18, SMD 5x3.2mm ECS-200-18-30B-AGN-TR ECS Inc.
  • 非常感谢你的回答,使用未修改的例程时进行的是环回模式,CCS调试是可以实现自发自收,板子是自制板,用的28377D,没有终端电阻,但分析仪上有2个120欧姆电阻,例程我只改过can_loopback.c里的程序,我把测试模式注释掉了,具体代码如下:

    int
    
    main(void)
    
    {
    
        InitSysCtrl();
    
        //对应28377D引脚
    
        InitGpio();
    
    
        GPIO_SetupPinMux(13, GPIO_MUX_CPU1, 2); //GPIO13 - CANRXB
    
        GPIO_SetupPinMux(12, GPIO_MUX_CPU1, 2);  //GPIO12 - CANTXB
    
        GPIO_SetupPinOptions(13, GPIO_INPUT, GPIO_ASYNC);
    
        GPIO_SetupPinOptions(12, GPIO_OUTPUT, GPIO_PUSHPULL);
    
    
        CANInit(CANB_BASE);
    
        CANClkSourceSelect(CANB_BASE, 0);
    
        CANBitRateSet(CANB_BASE, 200000000, 250000);
    
    
        DINT;
    
    
        InitPieCtrl();
    
    
        IER = 0x0000;
    
        IFR = 0x0000;
    
    
        InitPieVectTable();  
    
    //    HWREG(CANB_BASE + CAN_O_CTL) |= CAN_CTL_TEST;
    
    //    HWREG(CANB_BASE + CAN_O_TEST) = CAN_TEST_EXL;
    
    //    HWREG(CANB_BASE + CAN_O_TEST) = CAN_TEST_RX;
    
        CANEnable(CANB_BASE);
    
        *(unsigned long *)ucTXMsgData = 8;
    
        sTXCANMessage.ui32MsgID = 6;                 
    
        sTXCANMessage.ui32MsgIDMask = 0;              
    
        sTXCANMessage.ui32Flags = MSG_OBJ_TX_INT_ENABLE; 
    
        sTXCANMessage.ui32MsgLen = sizeof(ucTXMsgData); 
    
        sTXCANMessage.pucMsgData = ucTXMsgData;         
    
    
        *(unsigned long *)ucRXMsgData = 8;
    
        sRXCANMessage.ui32MsgID = 5;                 
    
        sRXCANMessage.ui32MsgIDMask = 0;                
    
        sRXCANMessage.ui32Flags = MSG_OBJ_NO_FLAGS;
    
        sRXCANMessage.ui32MsgLen = sizeof(ucRXMsgData); 
    
        sRXCANMessage.pucMsgData = ucRXMsgData;        
    
        CANMessageSet(CANB_BASE, 2, &sRXCANMessage, MSG_OBJ_TYPE_RX);
    
    
        for(;;)
    
        {
    
            CANMessageSet(CANB_BASE, 1, &sTXCANMessage, MSG_OBJ_TYPE_TX);
    
            DELAY_US(1000*1000);
    
            CANMessageGet(CANB_BASE, 2, &sRXCANMessage, true);
    
           if((*(unsigned long *)ucTXMsgData) != (*(unsigned long *)ucRXMsgData)) 
    
            {
    
                //asm(" ESTOP0")
    
            }
    
            g_ulMsgCount++;
    
            (*(unsigned long *)ucTXMsgData)++;
    
        }
    
    }

  • 程序已经给出,麻烦帮我看下程序是否有问题,其他没有修改,谢谢啦
  • user6154130 说:
    使用未修改的例程时进行的是环回模式,CCS调试是可以实现自发自收,板子是自制板,用的28377D,没有终端电阻,但分析仪上有2个120欧姆电阻,例程我只改过can_loopback.c里的程序,我把测试模式注释掉了

    您现在在使用您自制的377D的板子测试TI例程时是可以成功的?

    目前只是修改了测试模式(注释掉),就不可以进行成功收发了?我的理解对吗?

  • 对的,注释掉测试模式后,CAN分析仪只能接收377D板子发过来的数据,但自制板子不能接收CAN分析仪发送的数据
  • 如TRM内的说明( http://www.ti.com.cn/cn/lit/ug/spruhm8i/spruhm8i.pdf )22.4.3 Test Modes

    The CAN module provides several test modes which are mainly intended for self-test purposes. 

    Test Modes主要是用于自测本身CAN通信的,一般是数据通过从CANTX发送后经内部传回CAN core 的

    Data transmitted is visible on the CANTXA pin and is received internally back to the CAN Core 

    若是您想使用Normal Operation Config 也就是一般模式的话,建议您使用

    can_ex4_simple_transmit 和 can_ex5_simple_receive 例程

  • 我把测试模式注释掉了也不行吗?能否告知这是什么原因造成的吗?
  • 我把Test Modes注释掉了以后,那程序不也是可以正常执行吗?程序的配置方法都是对的,但为什么不能直接使用这个程序(即使把测试模式注释掉了)
  • 我会在测试后给您回复,请您等待一下
  • 参考之前的 Figure 22-2. CAN_MUX ( www.ti.com/.../spruhm8i.pdf

    在TEST模式下,ExL = 1,LBACK = 1 也就是所谓的回环模式,将TX的内容直接传到了RX

    而在非TEST模式下,ExL = 0,LBACK = 0,就需要外部给一个CAN发送来让28377的CAN核来接收,只是单纯的注释代码是无法实现的。我看您之前是使用的CAN分析仪来发送数据,这时您就需要像can_ex5_simple_receive例程内一样来设置receive message object

    //
    // Initialize the receive message object used for receiving CAN messages.
    // Message Object Parameters:
    // CAN Module: A
    // Message Object ID Number: 1
    // Message Identifier: 0x1
    // Message Frame: Standard
    // Message Type: Receive
    // Message ID Mask: 0x0
    // Message Object Flags: None
    // Message Data Length: "Don't care" for a Receive mailbox
    //
    CAN_setupMessageObject(CANA_BASE, RX_MSG_OBJ_ID, 0x1,
    CAN_MSG_FRAME_STD, CAN_MSG_OBJ_TYPE_RX, 0,
    CAN_MSG_OBJ_NO_FLAGS, MSG_DATA_LENGTH);
  • 你好,我在由于我使用的编译器版本较低,无法使用can_ex5_simple_receive例程,但我在can_loopback.c文件查看了函数CANMessageObjectSet具体消息对象的寄存器配置,然后看了CAN_setupMessageObject配置函数,大概能知道配置应该是一样的。我这里有个疑问,就是can_loopback程序为什么不能直接执行一般模式接收数据,如果要用这个程序执行的话,需要做哪些修改,由于条件限制,无法使用较高版本的编译器,所以没法测试can_ex5_simple_receive例程。
  • 请问您现在的编译器版本是多少?CCS版本呢?理论上can_ex5_simple_receive和can_loopback是可以使用同一编译器版本的

    要重新配置消息对象设置,请使用CAN_setupMessageObject(),而后您可以一直 Poll CAN_ES 寄存器的 RxOk bit

    如can_ex5_simple_receive所示

    if(((HWREGH(CANA_BASE + CAN_O_ES) & CAN_ES_RXOK)) == CAN_ES_RXOK)
    {
    //
    // Get the received message
    //
    CAN_readMessage(CANA_BASE, RX_MSG_OBJ_ID, rxMsgData);
    GPIO_togglePin(65U);
    rxMsgCount++;
    }
  • 我用的是ccs6.1.3,编译器版本是15.12.1.LTS,我导入can_ex5_simple_receive工程时导入失败,提示我说编译器版本要为18.12.1.LTS
  • 那您可以下载CCS9 或者CCS10并导入工程,毕竟CCS6有点老了
  • 问题已解决:是因为硬件连接出现问题,CANH引脚连接错误,改正后可以正常通信
  • 很高兴您能解决问题!
  • 你好,你的问题解决了吗?我遇到和你一样的问题,我也是用CANB 引脚13、12,用回环模式能够自发自收,并且TX引脚能测试到波形,把回环模式那几行注释掉后,TX引脚的波形就没有了,一直是高电平。哎,搞不懂。。。