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.

[参考译文] RM44L920:引导加载程序-使用任意 CAN 节点

Guru**** 2513185 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1019480/rm44l920-bootloader---use-arbitrary-can-node

器件型号:RM44L920

我一直在项目中使用 TI 提供的 CAN 引导加载程序、其中有两个活动的 CAN 节点。 引导加载程序的原始版本经过硬编码、仅使用 CAN 节点1。 我稍微修改了它以允许在初始化软件更新时选择节点-要使用的节点被放置在应用程序和引导加载程序读取的不正确幻数的低半字节中。 这可能就足够了。

但是、最好是引导加载程序使用初始 ping 进入的任何节点、这样在上执行软件更新的人员就不必考虑使用哪个通道了。 我可以想象这种工作方式的唯一方法是向引导加载程序添加 CAN 中断、这将包括消息出现的节点。  

我的问题是-是否有任何方法可以在不使用 CAN 中断的情况下确定特定消息进入的节点?

谢谢!

-Tom

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Tom、

    DCAN 节点不支持节点 ID。 相反、接收器通过接受过滤过程来处理消息。  DCAN 网络中的所有节点同时接收相同的消息、但消息过滤器保证、如果消息通过接受过滤、则接收节点只会将接收到的消息存储到相应的消息对象中。

    您可以对 DCAN 网络上的 DCAN 节点使用不同的消息过滤器设置。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我在使用"port"时使用的方式不正确。 是 CAN 总线上的特定器件。 很抱歉。

    在 Hercules^器 CCS 项目中(由一些 QJ Wang Guy 编写、我认为 `8 μ s)、从 SPNA241链接的 git repo、` BL_main.c `使用` CAN_PORT`的硬编码值、在`BL_CONFIG.h`中定义为`canREG1。  我在几个地方做了简单的修改、这样不正确的"魔法编号"的最低半字节决定了可以使用哪个节点-`canREG1`或`canREG2`。以下是`BL_main.c`中的 mods、例如:

    fnRetValue = CheckForceUpdate();
        if (fnRetValue == 2) {
            UART_putString(UART, "\r Using canREG2 for update! \r\n");
        } else {
            UART_putString(UART, "\r Using canREG1 for update! \r\n");
        }
    
        //fnRetValue = 0;  //qj for testing application code
    
        if ( !fnRetValue )
        {
    #ifdef DEBUG_MSG
        	UART_putString(UART, "\r Jump to application...  \r\n");
    #endif
            g_ulTransferAddress = (uint32_t)APP_START_ADDRESS;
            ((void (*)(void))g_ulTransferAddress)();
        }
    
        //
    	//  Configure the microcontroller.
    	//
    	//EnterBootLoader
    	#ifdef CAN_ENABLE_UPDATE
    	    ConfigureCANDevice(fnRetValue == 2 ? canREG2 : canREG1);
    	#endif
    	#ifdef SPI_ENABLE_UPDATE
    	    ConfigureSPIDevice(SPI_PORT);
    	#endif
    	#ifdef UART_ENABLE_UPDATE
    	    ConfigureUartDevice();
    	#endif
    
    	//
    	// Branch to the update handler. Use can1
    	//
    	#ifdef CAN_ENABLE_UPDATE
    	    UpdaterCAN(fnRetValue == 2 ? canREG2 : canREG1);
    	#endif
    }

    我在发送原始问题后意识  到、由于我的应用程序代码确实使用 CAN 中断、我可以将用于启动软件更新的端口传递到魔法号中、而不是让引导加载程序确定要动态使用的 CAN_PORT。  在通过 canREG2发送"初始化更新"消息时、没有理由指定使用 canREG1进行更新。

    希望这是有道理的。 我只是想确保避免在开始更新时指定 CAN 端口(使用另一条总线发送消息)的情况、并且指定的总线出现故障、从而使该单元起作用、因为它会一直等待可能永远不会出现的 ping。 实际上、我在测试期间完成了这一操作、幸运的是、当我可以交换可能会导联或只重新加载引导加载程序时。 我在生产中不会有这种选择。

    像往常一样、感谢您的快速响应! 对这种混乱和我的延迟答复表示歉意。

       -Tom

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在我的国防中、"节点"在整个 CAN HAL 代码中使用。 我知道我从某个地方取了它。  

    ¯ツ¯μ μ V/μ F