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

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

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

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

主從系統(tǒng)中i.MXRT系列MCU從主處理器接收App數(shù)據(jù)包超時(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程序里支持與主機(jī)進(jìn)行數(shù)據(jù)交互,而交互的通信協(xié)議均是blhost協(xié)議(這最早來自于飛思卡爾Kinetis系列ROM), 有了這個(gè)功能,我們便可以直接將應(yīng)用程序灌進(jìn)i.MXRT內(nèi)部SRAM去加載執(zhí)行,這個(gè)功能在多處理器系統(tǒng)里(尤其是i.MXRT作為協(xié)處理器)大有用處。

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

一、i.MXRT與主機(jī)交互方法

我們首先簡(jiǎn)單回顧下i.MXRT內(nèi)置ROM程序配套的與主機(jī)交互方法,有如下三種。其中方法一是比較常用的,把PC當(dāng)作主機(jī),因?yàn)?a href="http://www.www27dydycom.cn/tags/uart/" target="_blank">UART/USB接口可以直接從PC引出,這種方式一般集成在上位機(jī)GUI工具里(比如恩智浦官方的SPT以及痞子衡的NXP-MCUBootUtility)。方法二本質(zhì)上和方式一差不多,主機(jī)仍然是PC, 只不過通信接口是SPI/I2C,因?yàn)闊o法直接從PC引出,需要有一個(gè)橋接板,恩智浦一共做了三種不同的橋接實(shí)現(xiàn)。方式三就是本文提及的客戶所用到的方法,把主處理器當(dāng)作主機(jī),因?yàn)樘幚砥鹘涌谪S富,所以不管哪種通信方式均可以直連。

因?yàn)榉绞揭缓头绞蕉梢灾苯邮褂枚髦瞧痔峁┑呐涮坠ぞ哝?,因此blhost協(xié)議實(shí)現(xiàn)細(xì)節(jié)以及注意事項(xiàng)都被包在了工具鏈里面,客戶使用起來基本不會(huì)遇到問題。而方式三需要客戶自己移植實(shí)現(xiàn)blhost協(xié)議到主處理器代碼里,這可能會(huì)遇到一些協(xié)議細(xì)節(jié)上的設(shè)計(jì)問題。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

NXP

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

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

    關(guān)注

    68

    文章

    19740

    瀏覽量

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

    關(guān)注

    146

    文章

    17718

    瀏覽量

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

    關(guān)注

    33

    文章

    1584

    瀏覽量

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

    關(guān)注

    0

    文章

    269

    瀏覽量

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

    關(guān)注

    1

    文章

    57

    瀏覽量

    35986

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

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    i.MXRT設(shè)計(jì)更新Segger J-Link Flash下載算法文件

    給大家分享的是為i.MXRT設(shè)計(jì)更新Segger J-Link Flash下載算法文件?! ∠胍贔lash調(diào)試,基本是離不開Flash下載算法的,畢竟要先將代碼燒寫進(jìn)Flash,然后才能調(diào)試
    發(fā)表于 12-15 06:11

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

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

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

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

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

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

    介紹i.MXRT啟動(dòng)頭FDCB里的lookupTable

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

    i.mxRT MCU+ESP8266,能否提供MCU SDIO接口ESP8288的驅(qū)動(dòng)程序?

    你好!1、產(chǎn)品平臺(tái)是i.mxRT MCU+ESP8266,能否提供MCU SDIO接口ESP8288的驅(qū)動(dòng)程序?2、WIFI傳送音視頻到音視頻服務(wù),是否有WIFI傳送音視頻流的參考代
    發(fā)表于 02-16 08:19

    s32k144evb如何與i.MXRT通信?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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