在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

主從系統中i.MXRT系列MCU從主處理器接收App數據包超時機制

恩智浦MCU加油站 ? 來源:恩智浦MCU加油站 ? 2025-04-17 10:54 ? 次閱讀

在痞子衡舊文《RT四位數Boot模式》里的1.2.1 Serial Downloader模式;《RT三位數Boot模式》里的p1.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協議到主處理器代碼里,這可能會遇到一些協議細節上的設計問題。

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

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

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

二、i.MXRT從主機接收數據包超時機制

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

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

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

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

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

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

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

Note2:RT1160/1170/1180 ROM程序里數據包處理僅有接收超時,沒有發送超時。

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

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

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

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

三、客戶主機發送數據包設計

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

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

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

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

NXP

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 處理器
    +關注

    關注

    68

    文章

    19761

    瀏覽量

    233018
  • mcu
    mcu
    +關注

    關注

    146

    文章

    17751

    瀏覽量

    358749
  • APP
    APP
    +關注

    關注

    33

    文章

    1585

    瀏覽量

    73671
  • 數據包
    +關注

    關注

    0

    文章

    269

    瀏覽量

    24836
  • i.MX
    +關注

    關注

    1

    文章

    57

    瀏覽量

    36105

原文標題:主從系統中i.MXRT系列MCU從主處理器接收App數據包超時機制

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

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    i.MXRT設計更新Segger J-Link Flash下載算法文件

    給大家分享的是為i.MXRT設計更新Segger J-Link Flash下載算法文件。  想要在Flash調試,基本是離不開Flash下載算法的,畢竟要先將代碼燒寫進Flash,然后才能調試
    發表于 12-15 06:11

    IAR開發環境下i.MXRT的串行NOR Flash下載算法設計

      大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是IAR開發環境下i.MXRT的串行NOR Flash下載算法設計。  在i.MXRT硬件那些事系列之《在串行NOR Flash
    發表于 01-26 07:46

    FlexSPI復位方式不當會導致i.MXRT系列下OTFAD加密啟動失敗怎么解決?

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

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

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

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

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

    i.mxRT MCU+ESP8266,能否提供MCU SDIO接口ESP8288的驅動程序?

    你好!1、產品平臺是i.mxRT MCU+ESP8266,能否提供MCU SDIO接口ESP8288的驅動程序?2、WIFI傳送音視頻到音視頻服務,是否有WIFI傳送音視頻流的參考代
    發表于 02-16 08:19

    s32k144evb如何與i.MXRT通信?

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

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

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

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

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

    了解在MCU實現串口的不定長數據包接收的過程

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

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

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

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

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

    i.MXRT系列的ROM API設計

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

    痞子衡嵌入式:FlexSPI復位方式不當會導致i.MXRT系列下OTFAD加密啟動失敗

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

    MCU,如何實現串口的不定長數據包接收

    MCU的應用,經常需要通過串口進行不定長數據包的傳輸。發送方很簡單,不需特別的考慮,而接收方則需要能夠偵測到數據包的結束。
    發表于 02-10 12:16 ?1次下載
    在<b class='flag-5'>MCU</b><b class='flag-5'>中</b>,如何實現串口的不定長<b class='flag-5'>數據包</b><b class='flag-5'>接收</b>?
    主站蜘蛛池模板: 午夜无码国产理论在线 | 老湿影院免费体验区 | 一级毛片看真人在线视频 | 九色在线 | 欧美人与zoxxxx视频 | 一级做a爱过程免费视 | 亚洲国产综合人成综合网站00 | 亚洲成a人片在线观看88 | 四虎884tt紧急大通知 | 怡红院网址| 黄色片 720p 黄色片链接 | 四虎影视免费 | 激情六月天婷婷 | 男人的天堂视频网站清风阁 | 午夜啪 | 午夜啪| 最新人妖shemaletube人妖 最新日本免费一区二区三区中文 | 如果我们是季节韩剧在线观看 | 欧美一区二区三区影院 | 男女视频在线观看免费高清观看 | 四虎最新免费网址 | 网站在线播放 | 三级黄色在线观看 | 啪啪免费视频网站 | 久久精品国产免费观看99 | 免费一级欧美在线观看视频片 | 国产伦精品一区二区免费 | 恨恨操| 亚洲国产情侣偷自在线二页 | 欧美黄区 | 天天躁狠狠躁夜躁2021 | 夜夜夜精品视频免费 | 亚洲午夜精品一区二区 | 久久99精品国产麻豆宅宅 | 特黄色一级毛片 | 免费视频爱爱 | 亚洲伊人久久大香线蕉影院 | 欧美aaaav免费大片 | 久久国产视频一区 | 天天干天天射天天爽 | 女人本色高清在线观看wwwwww国产 |