“线程:测试”中讨论的其它部件
我正在尝试将以太网或 CAN 引导加载器示例调整为使用 TMS570LS3137DPGE 芯片的自定义板,但运气不好。 我在 CSS 中构建项目并刷新我的主板。 在这两个项目中,我一直关注调试器,直到它等待输入,但以太网和都无法响应外部 ping。
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.
我正在尝试将以太网或 CAN 引导加载器示例调整为使用 TMS570LS3137DPGE 芯片的自定义板,但运气不好。 我在 CSS 中构建项目并刷新我的主板。 在这两个项目中,我一直关注调试器,直到它等待输入,但以太网和都无法响应外部 ping。
如果您在 CAN bootloader 的以下部分添加断点,是否可以从外部主机获取任何命令输入?
While (1)(同时)
{
//Lite_TOPRIGHT_LED;
ulBytes = 0;
ulCmd = PacketRead (节点,g_pucCommandBuffer,&ulBytes);
ucStatus = CAN_CMD_Success;// 0x00
开关(ulCmd)
{
//
//这是一个 ping 数据包。
//此命令用于接收确认命令
//从引导加载程序发出,表示已建立通信。
//此命令没有数据。 如果设备存在
//将使用 CAN_COMMAND_BPING 回复 CAN 更新应用程序。
// CAN_command_ping = 0x1F02,0000
// ACK = 0x1F02,0100
Case CAN_command_ping:
{
PacketWrite (节点,CAN_COMMAND_ACK,&ucStatus,1);
休息;
}
使用断点后,我能够确认未收到任何消息。 我检查了我使用的 NI USB-8502的电缆是否正确,然后尝试将 Little _endian 定义从1更改为0。 然后我可以在总线上看到 CAN 消息。 外部代码上的 ping 命令不再超时,但我现在收到如下错误信息:
CAN0已成功初始化...
正在发送 command_pping 命令...
NI-CAN:(十六进制0xBFF62105)您提供的大小或长度无效(太小或太大),操作无法继续。 解决方案:阅读功能说明并验证您是否提供了有效的大小(或长度)。
Source = ncReadMult
似乎没有来自主机的 CAN 消息传输。 请在附件中找到有关 PC 主机大小的 VC++项目示例。
e2e.ti.com/.../7633.TMS570LS_5F00_canBootloader_5F00_Test.zip
我已经找到并安装了 Visual Studio 2010并运行了您的外部代码。 代码成功地将 ping 发送到 TMS570,TMS570标识 ping 并将 ACK 发回。 然后,测试代码在 ncRead 调用期间崩溃,就像在 VS2019中一样
CAN0已成功初始化...
正在发送 command_pping 命令...
NI-CAN:(十六进制0xBFF62105)您提供的大小或长度无效(太小或太大),操作无法继续。 解决方案:阅读功能说明并验证您是否提供了有效的大小(或长度)。
Source = ncReadMult
使用两个 MCU 代码中的断点,我可以提供以下附加反馈。 当 MCU 代码运行时,我看到 ping 进入,我看到它被 MCU 解析,我看到它在 CAN 总线上响应 以下是在监视该总线时发回的消息。

PC 端代码的当前状态更改为3
然而,RecieveBuff 没有改变。
并且抛出了大小错误。
断开 CAN 电缆连接后,当前状态保持为0,Ping 超时。
为什么我在 CAN 总线监视器上看到500k 的消息,但 PC 端代码似乎无法读取该消息?
我成功地与 PC 端代码建立了双向通信。 NcRead 呼叫是问题所在。 我将所有 ACK 读取请求更改为使用以下 NcReadMult。
状态= ncReadMult (RxHandle,sizeof (ReceiveBuf),(vo*)ReceiveBuf,&ActualDataSize);
通过建立通信,我可以下载我们的二进制文件(编译后以0x00010020地址开始 )并将其传输到我们的 MCU。 但是,更新检查失败,UpdateStatusAddr 显示以下值。

我们的映像是否需要设置0x5A5A5A5A 值,或者引导加载程序是否需要设置?
添加了一堆调试语句,我现在就可以看到出现了什么问题。 尽管组合正在正确传输,但数据似乎没有传输。 外部代码正在接收来自 MCU 的 ACK,并将其传输和信号成功。 MCU 未能通过地址和大小,也未接受或写入任何数据。 这是发送地址的外部代码。

地址(DEC 格式)和大小正确,分类也正确。 这是 MCU 接收到的内容

G_pucCommandBuffer[]元素全部为32个,导致转换错误以及地址和大小不正确。 这会导致 g_ulTransferSize 设置为0,而不会写入任何内容。
在对大小进行故障排除时,我已确定读取 CAN 数据 aa 和 B 寄存器的例程工作不正常。
pusData =(uint8_t*) pucData;
/**-将 RX 数据复制到目标缓冲区*/
对于(i = 0U;i < ulBytes;I++)
{
#IF ((__Little _endian__=1)||(__Little _ENDIAN__=1))
*pusData++= node->IF1DATx[i];
#else
*pusData++= node->IF1DATx[g_ulCanByteOrder [i];
#endif
}
GADataBuffer[0]=节点->IF1DATx[3U];
GADataBuffer[1]=节点->IF1DATx[2U];
GADataBuffer[2]=节点->IF1DATx[1U];
GADataBuffer[3]=节点->IF1DATx[0U];
GADataBuffer[4]=节点->IF1DATx[7U];
GADataBuffer[5]=节点->IF1DATx[6U];
GADataBuffer[6]=节点->IF1DATx[5U];
GADataBuffer[7]=节点->IF1DATx[4U];
pusData 从未在寄存器中获取实际数据,因此 g_ulTransferSize 和 g_ulTransferAddress 都填充了所有'32。 我 能够使用自己的缓冲区正确解析数据,并将其输入地址和大小。
随着 ulWholeFlashSize 在0时推出,该代码与尺寸检查错误。 我取消了地址大小检查,现在我正在关注访问冲突。

BL_Flash 函数似乎不能正确分析我的芯片的闪存定义。 您能想到会导致这种情况的任何原因吗?