TI中文支持网
TI专业的中文技术问题搜集分享网站

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

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

Susan Yang:

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

硬件方面的话,您是使用的TI开发板还是您的自制板?

user6262184:

回复 Susan Yang:

我最近使用280049C的板子运行can_loopback例程时也是不能接收数据,看库函数的实现过程看得有点难受。。。还有请问TI什么时候能提供28004xCAN模块的寄存器版本的库orz

Susan Yang:

回复 user6262184:

我使用280049C的板子运行can_loopback例程时是可以接收数据的。您现在测试时是什么反应?

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

user6262184:

回复 Susan Yang:

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

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

Susan Yang:

回复 user6262184:

很高兴能帮到您!

关于时钟问题,您可以参考 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表和原理图

Y2Crystal, 20 MHz, 25 ppm, 18, SMD 5×3.2mm ECS-200-18-30B-AGN-TR ECS Inc.

user6154130:

回复 Susan Yang:

非常感谢你的回答,使用未修改的例程时进行的是环回模式,CCS调试是可以实现自发自收,板子是自制板,用的28377D,没有终端电阻,但分析仪上有2个120欧姆电阻,例程我只改过can_loopback.c里的程序,我把测试模式注释掉了,具体代码如下:

intmain(void){InitSysCtrl();//对应28377D引脚InitGpio();GPIO_SetupPinMux(13, GPIO_MUX_CPU1, 2); //GPIO13 - CANRXBGPIO_SetupPinMux(12, GPIO_MUX_CPU1, 2);//GPIO12 - CANTXBGPIO_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:

回复 Susan Yang:

程序已经给出,麻烦帮我看下程序是否有问题,其他没有修改,谢谢啦

Susan Yang:

回复 user6154130:

user6154130使用未修改的例程时进行的是环回模式,CCS调试是可以实现自发自收,板子是自制板,用的28377D,没有终端电阻,但分析仪上有2个120欧姆电阻,例程我只改过can_loopback.c里的程序,我把测试模式注释掉了

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

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

user6154130:

回复 Susan Yang:

对的,注释掉测试模式后,CAN分析仪只能接收377D板子发过来的数据,但自制板子不能接收CAN分析仪发送的数据

Susan Yang:

回复 user6154130:

如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 例程

赞(0)
未经允许不得转载:TI中文支持网 » 使用28377d和CAN分析仪通信问题
分享到: 更多 (0)