一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

主從系統(tǒng)中i.MXRT系列MCU從主處理器接收App數(shù)據(jù)包超時機制

恩智浦MCU加油站 ? 來源:恩智浦MCU加油站 ? 2025-04-17 10:54 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在痞子衡舊文《RT四位數(shù)Boot模式》里的1.2.1 Serial Downloader模式;《RT三位數(shù)Boot模式》里的p1.2.2 Serial Boot模式里都介紹到了i.MXRT芯片內(nèi)置ROM程序里支持與主機進行數(shù)據(jù)交互,而交互的通信協(xié)議均是blhost協(xié)議(這最早來自于飛思卡爾Kinetis系列ROM), 有了這個功能,我們便可以直接將應(yīng)用程序灌進i.MXRT內(nèi)部SRAM去加載執(zhí)行,這個功能在多處理器系統(tǒng)里(尤其是i.MXRT作為協(xié)處理器)大有用處。

最近有個客戶設(shè)計了高通AR1+恩智浦i.MXRT600 的主從系統(tǒng),RT600作為協(xié)處理器直接通過SPI接口從主處理器AR1接收應(yīng)用程序App并加載到自身內(nèi)部SRAM執(zhí)行,這樣硬件上便可省去RT600的專屬非易失性存儲器。客戶已經(jīng)將blhost協(xié)議代碼集成進了AR1程序里,但在實際測試過程中發(fā)現(xiàn)有一定概率導(dǎo)致RT600程序加載失敗,RT600 ROM會返回kStatus_AbortDataPhase (0x5A,0xA3), 這是怎么回事?今天痞子衡就來聊聊這個話題:

一、i.MXRT與主機交互方法

我們首先簡單回顧下i.MXRT內(nèi)置ROM程序配套的與主機交互方法,有如下三種。其中方法一是比較常用的,把PC當(dāng)作主機,因為UART/USB接口可以直接從PC引出,這種方式一般集成在上位機GUI工具里(比如恩智浦官方的SPT以及痞子衡的NXP-MCUBootUtility)。方法二本質(zhì)上和方式一差不多,主機仍然是PC, 只不過通信接口是SPI/I2C,因為無法直接從PC引出,需要有一個橋接板,恩智浦一共做了三種不同的橋接實現(xiàn)。方式三就是本文提及的客戶所用到的方法,把主處理器當(dāng)作主機,因為處理器接口豐富,所以不管哪種通信方式均可以直連。

因為方式一和方式二均可以直接使用恩智浦提供的配套工具鏈,因此blhost協(xié)議實現(xiàn)細節(jié)以及注意事項都被包在了工具鏈里面,客戶使用起來基本不會遇到問題。而方式三需要客戶自己移植實現(xiàn)blhost協(xié)議到主處理器代碼里,這可能會遇到一些協(xié)議細節(jié)上的設(shè)計問題。

605fc772-1b26-11f0-9310-92fbcf53809c.png

這里需要特別提一下方式二里的Embedded Host橋接實現(xiàn),在恩智浦官網(wǎng)MCUBoot主頁我們可以下載到NXP_Kinetis_Bootloader_2_0_0.zip包,NXP_Kinetis_Bootloader_2_0_0validationembedded_host 路徑下我們可以找到基于Kinetis K65的實現(xiàn),如果你想移植blhost協(xié)議到處理器上運行,不妨參考這個代碼。

60781ad4-1b26-11f0-9310-92fbcf53809c.png

二、i.MXRT從主機接收數(shù)據(jù)包超時機制

現(xiàn)在我們談回到blhost協(xié)議本身,這是一套數(shù)據(jù)包傳輸格式與支持命令的定義集合。打開RT600參考手冊的Non-Secure Boot ROM章節(jié),可以找到具體的協(xié)議細節(jié),這里就不再贅述。我們只取其中關(guān)于write-memory命令的介紹,主機給i.MXRT下載數(shù)據(jù)(App)主要就是借助這個命令。

6084ba96-1b26-11f0-9310-92fbcf53809c.png

write-memory命令的過程其實很簡單,主機(Host)先要發(fā)送含write-memory信息的命令包(0x5A, 0xA4 ...) 給i.MXRT(圖中叫target),收到確認的回復(fù)(0x5A, 0xA1)后,主機繼續(xù)發(fā)送含App程序數(shù)據(jù)的數(shù)據(jù)包(0x5A, 0xA5...),等待i.MXRT處理完成返回確認信息,然后主機不斷發(fā)送數(shù)據(jù)包,直到App數(shù)據(jù)全部發(fā)送完成,最后還有一個結(jié)束命令包。

Note: 注意這里的App數(shù)據(jù)不是一個數(shù)據(jù)包就全部發(fā)送完的,而是被拆分成了很多個小數(shù)據(jù)包,每個小數(shù)據(jù)包最大長度是512字節(jié)。拆分成小包的目的是防止通信過程中有干擾導(dǎo)致數(shù)據(jù)錯誤,出現(xiàn)錯誤就只需要重新發(fā)送該包數(shù)據(jù)。如果不拆分數(shù)據(jù)包,出現(xiàn)錯誤就得全部App數(shù)據(jù)重發(fā),效率太低。

6098397c-1b26-11f0-9310-92fbcf53809c.png

關(guān)于每個數(shù)據(jù)小包的接收與發(fā)送, i.MX RT均設(shè)計了超時機制保護。如果主機已經(jīng)開始發(fā)送當(dāng)前小包數(shù)據(jù)(發(fā)完包固定起始字節(jié)0x5A后為超時起點),那么需要在規(guī)定時間內(nèi)(包剩余長度(Bytes)*10ms/Bytes) 完成該包數(shù)據(jù)發(fā)送,如果超時時間內(nèi)未完成,i.MX RT則返回 kStatus_AbortDataPhase。至于read-memory時主機接收小包數(shù)據(jù)時超時機制相同,只不過時間單元是20ms/Bytes。

Note1:RT500/600/700 ROM程序里數(shù)據(jù)包處理超時機制是一樣的,發(fā)送和接收均有超時。

Note2:RT1160/1170/1180 ROM程序里數(shù)據(jù)包處理僅有接收超時,沒有發(fā)送超時。

當(dāng)然文檔里還有未詳盡的地方,主機每發(fā)完一小包數(shù)據(jù)后都需要讀確認信息(0x5A, 0xA1),確認信息這里是否有超時限制?如果有,是怎樣的機制?

痞子衡就不賣關(guān)子了,這里是需要特別注意的,當(dāng)主機發(fā)完一包數(shù)據(jù)后,i.MXRT需要及時處理數(shù)據(jù)的,由于這里是加載程序進內(nèi)部SRAM,所以就是將該數(shù)據(jù)包從緩沖區(qū)搬到 SRAM指定位置,這個時間t2很短,文檔里并未給出。t3是比較關(guān)鍵的時間,這里的計時起點并不是主機收到ACK包的第一個字節(jié),而是i.MXRT處理完數(shù)據(jù)搬移后就開始了,因此主機每次發(fā)完數(shù)據(jù)包之后, 都需要在t2+t3的時間內(nèi)將確認信息數(shù)據(jù)包及時讀走,否則i.MXRT則返回kStatus_AbortDataPhase。

60bae9ae-1b26-11f0-9310-92fbcf53809c.png

那么問題來了,如果一小包數(shù)據(jù)是200 bytes(包含 0x5A包頭等信息),請問主機發(fā)送數(shù)據(jù)和接收確認的超時時間分別是多少?答案是1990ms和t2+40ms (這里主機接收確認消息只拿了2 bytes數(shù)據(jù))。

三、客戶主機發(fā)送數(shù)據(jù)包設(shè)計

最后回到客戶的問題,經(jīng)過和客戶的溝通,主處理器AR1運行得是一個非實時操作系統(tǒng)。在給RT600加載App程序過程中會出現(xiàn)任務(wù)調(diào)度情況,發(fā)送完一個小數(shù)據(jù)包后,因為任務(wù)調(diào)度的關(guān)系,導(dǎo)致主機讀取確認消息(0x5A, 0xA1)的時間間隔不確定,有時候小于40ms, 有時候會超出40ms, 顯然這是不符合blhost協(xié)議超時機制規(guī)定的。

此外即使能滿足超時要求,但是主機如何讀取確認消息也是有講究的,嘗試讀取首字節(jié)0x5A要滿足至少100us延時(如果存在多次嘗試的話,兩次嘗試之間也要延時), 而拿到首字節(jié)后,再去讀取第二個字節(jié) 0xA1, 也需要至少延時50us。

60ccfc7a-1b26-11f0-9310-92fbcf53809c.png

最后還有一點需要提醒,因為RT500/600/700中存在多個核(CM33、DSP、NPU等), 所以主機有時候給i.MXRT灌的程序數(shù)據(jù)是糅合了多個核代碼,write-memory命令里提供的App長度信息要和實際要寫入的數(shù)據(jù)量匹配,否則i.MXRT也會返回異常狀態(tài)碼。

NXP

恩智浦致力于打造安全的連接和基礎(chǔ)設(shè)施解決方案,為智慧生活保駕護航。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19896

    瀏覽量

    235345
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    17984

    瀏覽量

    367172
  • APP
    APP
    +關(guān)注

    關(guān)注

    33

    文章

    1587

    瀏覽量

    74282
  • 數(shù)據(jù)包
    +關(guān)注

    關(guān)注

    0

    文章

    269

    瀏覽量

    24997
  • i.MX
    +關(guān)注

    關(guān)注

    1

    文章

    59

    瀏覽量

    36885

原文標(biāo)題:主從系統(tǒng)中i.MXRT系列MCU從主處理器接收App數(shù)據(jù)包超時機制

文章出處:【微信號:NXP_SMART_HARDWARE,微信公眾號:恩智浦MCU加油站】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    多個i.MXRT共享一顆Flash啟動的方法與實踐(上)

    有些客戶應(yīng)用會采用多顆 i.MXRT 芯片設(shè)計一的硬件架構(gòu)(目的不一,或仿多核 MCU 系統(tǒng)、或拓展 GPIO 數(shù)量),因為
    的頭像 發(fā)表于 06-05 10:01 ?527次閱讀
    多個<b class='flag-5'>i.MXRT</b>共享一顆Flash啟動的方法與實踐(上)

    多個i.MXRT共享一顆Flash啟動的方法與實踐(下)

    在 《多個i.MXRT共享一顆Flash啟動的方法與實踐(上)》 一文里痞子衡給大家理論上介紹一種多 i.MXRT 共享 Flash 啟動的方法,但是理論雖好,如果沒有經(jīng)過實踐驗證切實可行,不過是紙上談兵,所以今天痞子衡就找了
    的頭像 發(fā)表于 06-05 10:04 ?536次閱讀
    多個<b class='flag-5'>i.MXRT</b>共享一顆Flash啟動的方法與實踐(下)

    IAR開發(fā)環(huán)境下i.MXRT的串行NOR Flash下載算法設(shè)計

      大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是IAR開發(fā)環(huán)境下i.MXRT的串行NOR Flash下載算法設(shè)計?! ≡?b class='flag-5'>i.MXRT硬件那些事系列之《在串行NOR Flash
    發(fā)表于 01-26 07:46

    FlexSPI復(fù)位方式不當(dāng)會導(dǎo)致i.MXRT系列下OTFAD加密啟動失敗怎么解決?

    FlexSPI復(fù)位方式不當(dāng)會導(dǎo)致i.MXRT系列下OTFAD加密啟動失敗怎么解決?
    發(fā)表于 02-07 08:11

    介紹一種快速定位i.MXRT600板級設(shè)計ISP[2-0]啟動模式引腳上電時序問題的方法

    音頻市場的MCU產(chǎn)品,其也是i.MXRT三位數(shù)平臺的第一款型號。這顆MCU已被眾多知名國際大廠客戶選用,在項目中作為協(xié)處理器負責(zé)音頻相關(guān)子功能。不少客戶都已經(jīng)到了量產(chǎn)階段,最近痞子衡在
    發(fā)表于 02-11 07:49

    介紹i.MXRT啟動頭FDCB里的lookupTable

    大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是i.MXRT啟動頭FDCB里的lookupTable。一個MCU內(nèi)部通常有很多外設(shè)模塊,這些外設(shè)模塊是各MCU廠商做差異化產(chǎn)...
    發(fā)表于 02-17 07:47

    s32k144evb如何與i.MXRT通信?

    的計劃是使用 S32k144EVB 作為 VCU。將從 BMS 和電機控制接收 CAN 詳細信息到 VCU,然后處理并發(fā)送到 i.MXRT1170,并將其推送到提到的 LCD 顯示
    發(fā)表于 03-29 07:49

    i.MXRT上的以太網(wǎng)AVB是否有更多可用的性能測量?

    i.MXRT上的以太網(wǎng) AVB 是否有更多可用的性能測量?在NXP GenAVB /TSNStackFreeRTOS ?發(fā)行說明 (GAVBFRRN) ,只提到了一個用例(1 個立體聲流)?當(dāng)將
    發(fā)表于 03-31 06:42

    i.MXRT1024 MCU是否有用于NXP WiFi的驅(qū)動程序和中間件?

    i.MXRT1024 MCU 是否有用于 NXP WiFi 的驅(qū)動程序和中間件? MCUXpressoSDK 包含對多個基于 NXP WiFi 的模塊以及許多 i.MXRT 處理器
    發(fā)表于 06-09 07:37

    了解在MCU實現(xiàn)串口的不定長數(shù)據(jù)包接收的過程

    MCU的應(yīng)用,經(jīng)常需要通過串口進行不定長數(shù)據(jù)包的傳輸。發(fā)送方很簡單,不需特別的考慮,而接收方則需要能夠偵測到數(shù)據(jù)包的結(jié)束。
    的頭像 發(fā)表于 08-03 16:37 ?7589次閱讀
    了解在<b class='flag-5'>MCU</b><b class='flag-5'>中</b>實現(xiàn)串口的不定長<b class='flag-5'>數(shù)據(jù)包</b><b class='flag-5'>接收</b>的過程

    J-Link工具下i.MXRT的串行NOR Flash下載算法設(shè)計

    Segger 官網(wǎng)上看,目前最新的 J-Link 驅(qū)動版本是 V6.86b,其能夠支持目前所有已量產(chǎn)的 i.MXRT 系列,而痞子衡 PC 上安裝的是 V6.52e, J-Link 歷史各版
    的頭像 發(fā)表于 12-08 10:07 ?1417次閱讀

    Flash不支持SFDP,如何下載適用i.MXRT

    大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是導(dǎo)致串行 NOR Flash 在 i.MXRT 下無法正常下載 / 啟動的常見因素之 SFDP。 i.MXRT 系列 MCU
    的頭像 發(fā)表于 10-30 10:30 ?1130次閱讀

    i.MXRT系列的ROM API設(shè)計

    大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是 i.MXRTxxx 系列 ROM API 設(shè)計細節(jié)。 痞子衡之前寫過兩篇文章 《利用 i.MXRT1xxx 系列 RO
    的頭像 發(fā)表于 10-30 10:52 ?890次閱讀

    痞子衡嵌入式:FlexSPI復(fù)位方式不當(dāng)會導(dǎo)致i.MXRT系列下OTFAD加密啟動失敗

      大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家分享的是FlexSPI復(fù)位方式不當(dāng)會導(dǎo)致i.MXRT系列下OTFAD加密啟動失敗問題。  本篇是《系統(tǒng)時鐘配置不當(dāng)會導(dǎo)致
    發(fā)表于 12-04 17:36 ?9次下載
    痞子衡嵌入式:FlexSPI復(fù)位方式不當(dāng)會導(dǎo)致<b class='flag-5'>i.MXRT</b><b class='flag-5'>系列</b>下OTFAD加密啟動失敗

    MCU,如何實現(xiàn)串口的不定長數(shù)據(jù)包接收

    MCU的應(yīng)用,經(jīng)常需要通過串口進行不定長數(shù)據(jù)包的傳輸。發(fā)送方很簡單,不需特別的考慮,而接收方則需要能夠偵測到數(shù)據(jù)包的結(jié)束。
    發(fā)表于 02-10 12:16 ?1次下載
    在<b class='flag-5'>MCU</b><b class='flag-5'>中</b>,如何實現(xiàn)串口的不定長<b class='flag-5'>數(shù)據(jù)包</b><b class='flag-5'>接收</b>?