工具/软件:
大家好!
我正在使用两个 TMS320F28379D DSP (DSP1 和 DSP2) 通过 CANB 通道进行通信、并且我面临一个问题、即从 DSP2 到 DSP1 的数据传输没有收到、而反向 (DSP1 到 DSP2) 运行良好。
我的问题是 :“为什么 DSP1 无法从 DSP2 接收数据,即使反向工作?“ 。 请建议如何解决此问题。 随附屏幕截图以供您参考 。
谢谢、此致、
Sameer
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.
工具/软件:
大家好!
我正在使用两个 TMS320F28379D DSP (DSP1 和 DSP2) 通过 CANB 通道进行通信、并且我面临一个问题、即从 DSP2 到 DSP1 的数据传输没有收到、而反向 (DSP1 到 DSP2) 运行良好。
我的问题是 :“为什么 DSP1 无法从 DSP2 接收数据,即使反向工作?“ 。 请建议如何解决此问题。 随附屏幕截图以供您参考 。
谢谢、此致、
Sameer
尊敬的 Wang:
感谢您的及时答复。
1. DSP2 端的 CAN 错误状态是什么?
最后一个错误状态为 111。
2.是否已启用自动重新传输?
是的。 自动重新发送已启用。
分配给 sys_mode_int.u8[0]和 sys_mode_int.u8[1]的值是多少?
SYS_MODE_int 是一个包含一个 16 位变量和一个由两个 8 位变量组成的数组的联合体。
在这种联合体中、sys_mode_int.u8[0]存储低 8 位 (LSB)、sys_mode_int.u8[1]存储高 8 位 (MSB)。
sys_mode 变量的值为 200、首先存储为 16 位值、然后分为其 LSB 和 MSB 分量
4.只需传输 2 个字节的数据 (txMsgData[1:0])、但代码中的 MSG_DATA_LENGTH=8。 DLC 编程到 IFxCTL 寄存器是什么? 如果 DLC 与 MSG_DATA_LENGTH 不匹配、则可能无法传输消息
DLC 是 1000、它与 MSG_DATA_LENGTH (8) 相同。
随附的屏幕截图供您参考。
谢谢、此致、
Sameer
谢谢你。
屏幕截图中的 TxOK 为 0、这意味着自 CPU 上次读取该位以来、没有成功发送消息。
当 DSP2 向 DSP1 传输消息时、您是否测量了 CAN 总线上的信号波形? 任何 CAN 控制器都可以在检测到空闲总线时启动传输。 这可能导致 DSP1 和 DSP2 上的两个控制器(几乎)同时启动一条消息。 由于总线是“线与“、显性位为逻辑 0、因此具有数字最低仲裁字段的消息将赢得仲裁。 DSP1 上的 MSG ID 为 0x1 (DSP2 上为 0x2)、因此将传输 DSP1 上的 MSG。
尊敬的 Wang:
感谢您的帮助—问题现已解决。 不过、我想澄清一点。
最初、对于 DSP1、我使用的是组合了基于寄存器和基于 DriverLib 的代码的项目模板、而 DSP2 仅使用基于 DriverLib 的代码实现。 在此设置中、可以在 DSP1 中接收 ISR 是通过基于寄存器的代码调用的、而在 DSP2 中、接收 ISR 是通过 DriverLib 函数触发的。 在这些情况下、DSP2 能够从 DSP1 接收数据、但 DSP1 没有从 DSP2 接收任何数据。
随后、我修改了设置、以便 DSP1 和 DSP2 使用相同的混合方法(基于寄存器和 DriverLib)。 然后我观察到在 DSP1 中、CAN 接收 ISR 仍然未被调用。 但是、一旦我使用 DriverLib 函数注册 ISR、它就会开始正确执行。
您能否解释一下为什么会出现这种行为差异?
随附的屏幕截图供您参考。
谢谢、此致、
Sameer
