打印
[MCU]

三个板子连接后无法通信

[复制链接]
1022|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zwll|  楼主 | 2020-2-23 14:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
houcs| | 2020-2-23 14:06 | 只看该作者

还有什么现象?能再详细描述下吗?

使用特权

评论回复
板凳
ousj| | 2020-2-23 14:08 | 只看该作者

还有什么现象?能再详细描述下吗?

使用特权

评论回复
地板
zwll|  楼主 | 2020-2-23 14:10 | 只看该作者

测试时使用DSP板发送数据帧,两个BB板上接收,结果是BB板上无法收到数据帧。观察到DSP板的发送位TRSn置位后没有复位,一直为1,CANES寄存器里的应答位ACKE也置一,有应答错误位,错误计数器显示为128,说明数据并没有发送成功。然后将其中的一个BB断开,退出CAN总线连接,测试DSP板和一块BB板收发,结果是收发正常。

使用特权

评论回复
5
gongche| | 2020-2-23 14:12 | 只看该作者

楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
6
zwll|  楼主 | 2020-2-23 14:15 | 只看该作者

下面是DSP上的CAN配置,BB上移植了linux,使用的是candump、cansend

void InitECana(void)
{
EALLOW;

/* Configure eCAN pins using GPIO regs */
GpioMuxRegs.GPFMUX.bit.CANTXA_GPIOF6 = 1;
GpioMuxRegs.GPFMUX.bit.CANRXA_GPIOF7 = 1;

ECanaRegs.CANRIOC.bit.RXFUNC = 1;
ECanaRegs.CANTIOC.bit.TXFUNC = 1;

/* Configure eCAN for HECC mode , enable 0~31 mailboxes */
ECanaRegs.CANMC.bit.SCB = 1;
ECanaRegs.CANES.all
/* Initialzation the master control register of mailbox to zero (CANMCTRL) */
ECanaMboxes.MBOX0.MCF.all = 0x00000000;

/* Configure bit timing parameters */
ECanaRegs.CANMC.bit.CCR = 1;

while(ECanaRegs.CANES.bit.CCE != 1){}

ECanaRegs.CANBTC.bit.BRP = 14;
ECanaRegs.CANBTC.bit.TSEG1 = 13;
ECanaRegs.CANBTC.bit.TSEG2 = 4;

ECanaRegs.CANMC.bit.CCR = 0;
while(ECanaRegs.CANES.bit.CCE != 0){}

/* Disable all the mailboxes */
ECanaRegs.CANME.all = 0x00000000;

/* 开中断 */
ECanaRegs.CANGIM.bit.I0EN = 1;
ECanaRegs.CANGIM.bit.I1EN = 1;
ECanaRegs.CANGIM.bit.SIL = 1;

ECanaRegs.CANMIL.all = 0x00000000;
ECanaRegs.CANMIM.all = 0xffffffff;

EDIS;
}

void ConfigCAN(void)
{
EALLOW;

/* Write to the MSGID filed of Transmit Mailbox 0~15 */
ECanaMboxes.MBOX0.MID.all = 0x91111111;
ECanaMboxes.MBOX1.MID.all = 0x91111112;
ECanaMboxes.MBOX2.MID.all = 0x91111113;
ECanaMboxes.MBOX3.MID.all = 0x91111114;
ECanaMboxes.MBOX4.MID.all = 0x91111115;
ECanaMboxes.MBOX5.MID.all = 0x91111116;
ECanaMboxes.MBOX6.MID.all = 0x91111117;


ECanaMboxes.MBOX25.MID.all = 0x91111121;
ECanaMboxes.MBOX26.MID.all = 0x91111122;
ECanaMboxes.MBOX27.MID.all = 0x91111123;
ECanaMboxes.MBOX28.MID.all = 0x91111124;
ECanaMboxes.MBOX29.MID.all = 0x91111125;
ECanaMboxes.MBOX30.MID.all = 0x91111126;
ECanaMboxes.MBOX31.MID.all = 0x91111127;
/* set the DLC field of the Transmit Mailboxes MSCTRL */
ECanaMboxes.MBOX0.MCF.bit.DLC = 0x8;
ECanaMboxes.MBOX1.MCF.bit.DLC = 0x8;
ECanaMboxes.MBOX2.MCF.bit.DLC = 0x8;
ECanaMboxes.MBOX3.MCF.bit.DLC = 0x8;
ECanaMboxes.MBOX4.MCF.bit.DLC = 0x8;
ECanaMboxes.MBOX5.MCF.bit.DLC = 0x8;
ECanaMboxes.MBOX6.MCF.bit.DLC = 0x8;
ECanaMboxes.MBOX25.MCF.bit.DLC = 0x8;
ECanaMboxes.MBOX26.MCF.bit.DLC = 0x8;
ECanaMboxes.MBOX27.MCF.bit.DLC = 0x8;
ECanaMboxes.MBOX28.MCF.bit.DLC = 0x8;
ECanaMboxes.MBOX29.MCF.bit.DLC = 0x8;
ECanaMboxes.MBOX30.MCF.bit.DLC = 0x8;
ECanaMboxes.MBOX31.MCF.bit.DLC = 0x8;

/* Write the data field of the Transmit Mailboxes */
ECanaMboxes.MBOX0.MDRH.all = 0x00000000;
ECanaMboxes.MBOX0.MDRL.all = 0x00000000;
ECanaMboxes.MBOX1.MDRH.all = 0x00000000;
ECanaMboxes.MBOX1.MDRL.all = 0x00000000;
ECanaMboxes.MBOX2.MDRH.all = 0x00000000;
ECanaMboxes.MBOX2.MDRL.all = 0x00000000;
ECanaMboxes.MBOX3.MDRH.all = 0x00000000;
ECanaMboxes.MBOX3.MDRL.all = 0x00000000;
ECanaMboxes.MBOX4.MDRH.all = 0x00000000;
ECanaMboxes.MBOX4.MDRL.all = 0x00000000;
ECanaMboxes.MBOX5.MDRH.all = 0x00000000;
ECanaMboxes.MBOX5.MDRL.all = 0x00000000;
ECanaMboxes.MBOX6.MDRH.all = 0x00000000;
ECanaMboxes.MBOX6.MDRL.all = 0x00000000;
ECanaMboxes.MBOX25.MDRH.all = 0x00000000;
ECanaMboxes.MBOX25.MDRL.all = 0x00000000;
ECanaMboxes.MBOX26.MDRH.all = 0x00000000;
ECanaMboxes.MBOX26.MDRL.all = 0x00000000;
ECanaMboxes.MBOX27.MDRH.all = 0x00000000;
ECanaMboxes.MBOX27.MDRL.all = 0x00000000;
ECanaMboxes.MBOX28.MDRH.all = 0x00000000;
ECanaMboxes.MBOX28.MDRL.all = 0x00000000;
ECanaMboxes.MBOX29.MDRH.all = 0x00000000;
ECanaMboxes.MBOX29.MDRL.all = 0x00000000;
ECanaMboxes.MBOX30.MDRH.all = 0x00000000;
ECanaMboxes.MBOX30.MDRL.all = 0x00000000;
ECanaMboxes.MBOX31.MDRH.all = 0x00000000;
ECanaMboxes.MBOX31.MDRL.all = 0x00000000;

/* Enable all Mailboxes */
ECanaRegs.CANME.all = 0xFE00007F;
ECanaRegs.CANMD.all = 0xFE000000;


ECanaRegs.CANTA.all = 0xffffffff;
ECanaRegs.CANRMP.all = 0xffffffff;
ECanaRegs.CANGIF0.all = 0xffffffff;
ECanaRegs.CANGIF1.all = 0xffffffff;
EDIS;
}

使用特权

评论回复
7
tian111| | 2020-2-23 14:17 | 只看该作者

是不是邮箱标识位不对啊

使用特权

评论回复
8
zwll|  楼主 | 2020-2-23 14:20 | 只看该作者
MBOX寄存器组的MSGID寄存器,并配合LAM0寄存器屏蔽无关的位。类似485的地址

使用特权

评论回复
9
juventus9554| | 2020-2-23 14:21 | 只看该作者
多机通讯肯定设计到地址标识的问题。接收发好像是只接收标识符未屏蔽位置相同的ID发过来的数据

使用特权

评论回复
10
dingy| | 2020-2-23 14:26 | 只看该作者
你要确定硬件是总线型连接方式,就是首尾相连,先排除硬件的原因

使用特权

评论回复
11
kangzj| | 2020-2-23 14:28 | 只看该作者

什么是邮箱标识符?

使用特权

评论回复
12
yinxiangh| | 2020-2-23 14:30 | 只看该作者
这个代码上看上去的没啥毛病的啊

使用特权

评论回复
13
morrisk| | 2020-2-23 14:32 | 只看该作者
确定地址对了吗

使用特权

评论回复
14
xxmmi| | 2020-2-23 14:34 | 只看该作者

硬件的问题吗?

使用特权

评论回复
15
huwr| | 2020-2-23 14:38 | 只看该作者
BeagleBone收不到数据吗

使用特权

评论回复
16
happy_10| | 2020-2-23 14:41 | 只看该作者
楼主先检查硬件

使用特权

评论回复
17
tian111| | 2020-2-23 14:42 | 只看该作者
can地址可能有问题。

使用特权

评论回复
18
chenho| | 2020-2-23 14:44 | 只看该作者
如果是硬件问题,肯定收不到数据的。

使用特权

评论回复
19
juventus9554| | 2020-2-23 14:46 | 只看该作者
BeagleBone的代码怎么写的?

使用特权

评论回复
20
juventus9554| | 2020-2-23 14:50 | 只看该作者

软件在哪里弄来的?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

885

主题

11314

帖子

5

粉丝