|
大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是主从系统中i.MXRT系列MCU从主处理器接收App数据包超时机制。
在痞子衡旧文 《RT四位数Boot模式》 里的 1.2.1 Serial Downloader 模式、《RT三位数Boot模式》 里的 1.2.2 Serial Boot 模式里都介绍到了 i.MXRT 芯片内置 ROM 程序里支持与主机进行数据交互,而交互的通信协议均是 blhost 协议(这最早来自于飞思卡尔 Kinetis 系列 ROM ),有了这个功能,我们便可以直接将应用程序灌进 i.MXRT 内部 SRAM 去加载执行,这个功能在多处理器系统里(尤其是 i.MXRT 作为协处理器)大有用处。
最近有一个客户设计了高通 AR1 + 恩智浦 i.MXRT600 的主从系统,RT600 作为协处理器直接通过 SPI 接口从主处理器 AR1 接收应用程序 App 并加载到自身内部 SRAM 执行,这样硬件上便可省去 RT600 的专属非易失性存储器。客户已经将 blhost 协议代码集成进了 AR1 程序里,但在实际测试过程中发现有一定概率导致 RT600 程序加载失败,RT600 ROM 会返回 kStatus_AbortDataPhase(0x5A,0xA3),这是怎么回事?今天痞子衡就来聊聊这个话题:
一、i.MXRT与主机交互方法我们首先简单回顾下 i.MXRT 内置 ROM 程序配套的与主机交互方法,有如下三种。其中方法一是比较常用的,把 PC 当作主机,因为 UART/USB 接口可以直接从 PC 引出,这种方式一般集成在上位机 GUI 工具里(比如恩智浦官方的 SPT 以及痞子衡的 NXP-MCUBootUtility)。方法二本质上和方式一差不多,主机仍然是 PC,只不过通信接口是 SPI/I2C,因为无法直接从 PC 引出,需要有一个桥接板,恩智浦一共做了三种不同的桥接实现。方式三就是本文提及的客户所用到的方法,把主处理器当作主机,因为处理器接口丰富,所以不管哪种通信方式均可以直连。
因为方式一和方式二均可以直接使用恩智浦提供的配套工具链,因此 blhost 协议实现细节以及注意事项都被包在了工具链里面,客户使用起来基本不会遇到问题。而方式三需要客户自己移植实现 blhost 协议到主处理器代码里,这可能会遇到一些协议细节上的设计问题。 |
|