大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是i.MXRT10xx系列ROM的UART SDP設(shè)置不同波特率的方法。
恩智浦 i.MXRT 四位數(shù)系列目前分為 RT10xx 和 RT11xx,前者的 BootROM 支持的上位機(jī)通信協(xié)議叫 SDP(來自于 i.MX),后者通信協(xié)議是 blhost(來自于 Kinetis),兩種協(xié)議都實(shí)現(xiàn)了通過 UART/USB 與上位機(jī)通信的一系列命令。blhost 協(xié)議支持 UART 波特率自動識別,而 SDP 協(xié)議不支持自動識別,但可以通過專用命令設(shè)置不同 UART 波特率。
近期有一個 RT1011 日本客戶,在查看芯片參考手冊時發(fā)現(xiàn)?System Boot?章節(jié)介紹了 UART SDP 可以支持設(shè)置不同的波特率,客戶想知道能夠支持的最大波特率,這點(diǎn)在手冊里并未提及,而在恩智浦官方工具(Secure Provisioning Tool,簡稱 SPT)里可設(shè)的最大波特率是 460800(V10 版本),那么這就是極限嗎?今天痞子衡來實(shí)測一下:
一、SDP協(xié)議簡介
SDP 協(xié)議在不同的 RT10xx 型號上是有區(qū)別的,其中在 RT1060 上協(xié)議最全,一共支持 7 條命令,而在 RT1010 上則簡化為僅支持 4 條命令。不管怎樣 SET_BAUDRATE 是基礎(chǔ)命令。
SDP 協(xié)議命令組成也足夠簡單,固定 16 個字節(jié),由 COMMAND TYPE + ADDRESS + FORMAT + DATA COUNT + DATA + RESERVED 組成,簡單又粗暴。
二、Secure Provisioning Tool設(shè)置
恩智浦官方工具 SPT 里集成了 SDP 協(xié)議支持,我們只需要在界面里選擇不同波特率即可,從最低 14400 到最高 460800,不過遺憾的是波特率窗口并不支持用戶手動輸入,所以在這個上位機(jī)工具里沒法測極限波特率。
熟悉這個上位機(jī)的朋友應(yīng)該知道,其底層依賴得是 SPSDK,這是一個基于 Python 實(shí)現(xiàn)的命令集合 SDK。其用于 SDP 通信的工具是 sdphost,命令列表里有 set-baudrate 支持,我們當(dāng)然可以使用這個工具來做測試。
https://spsdk.readthedocs.io/en/latest/apps/sdphost.html
三、在RT1010上手工測試
痞子衡也開發(fā)過一個上位機(jī) MCUBootUtility (這是官方工具 SPT 的前身),其底層依賴得是 toolssdphostwinsdphost.exe,這個程序是最早的 SDP 協(xié)議工具,但是比較遺憾的是其不支持 set-baudrate 命令并且該工具已經(jīng)不再升級。今天我們就結(jié)合這個古早的工具以及串口調(diào)試助手來做極限波特率測試,順便了解一下 SDP 協(xié)議里的數(shù)據(jù)包格式。
準(zhǔn)備一塊 RT1010 板卡,調(diào)到 SDP 模式,將 UART 連接好便可以開始測試,先用 sdphost.exe -- error-status 命令測試一下連通性(-d 參數(shù)可以看到與上位機(jī)交互數(shù)據(jù)包),波特率僅能設(shè)置為默認(rèn)的 115200:
當(dāng)然也可以直接用串口調(diào)試助手(依然是默認(rèn) 115200 波特率),手工打入 16 個字節(jié)的 error-status 數(shù)據(jù)包,看看結(jié)果是不是和 sdphost.exe 一致:
這時候繼續(xù)在串口調(diào)試助手里使用默認(rèn) 115200 波特率發(fā)送 set-baudrate 數(shù)據(jù)包,注意數(shù)據(jù)包里 ADDRESS 為波特率值時是大端模式(0x0000E100 對應(yīng)波特率 57600),當(dāng)收到 RT1010 傳來的 ACK 0x900dd009 時表明波特率設(shè)置"成功"(這里有個誤區(qū),MCU 發(fā)送 ACK 并不是用新設(shè)置的波特率,而用得與當(dāng)前上位機(jī)一致的波特率,這個 ACK 僅僅代表正確收到了上位機(jī) set-baudrate 命令)。如果在此基礎(chǔ)上再次設(shè)波特率,則需要調(diào)整串口調(diào)試助手里的波特率與上次設(shè)置一致。
要測試新波特率是否設(shè)置成功,還是要繼續(xù)使用 sdphost -- error-status 命令做一次新的測試。最終痞子衡實(shí)測 RT1010 上最高波特率可達(dá) 512000 (614400 測試失?。?,由于痞子衡基于的環(huán)境里 Host 是 RT1010-EVK 上的 DAP-LINK 里自帶的 USB 轉(zhuǎn) UART 功能,實(shí)際最高波特率性能可能也受此影響,大家可以選擇更高性能的 Host 做更極限的測試。
至此,i.MXRT10xx系列ROM的UART SDP設(shè)置不同波特率的方法痞子衡便介紹完畢了,掌聲在哪里~~~