<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

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

3天內不再提示

一文淺談FlexCAN OTA

jf_pJlTbmA9 ? 來源:靈動MM32MCU ? 作者:靈動MM32MCU ? 2023-09-27 16:17 ? 次閱讀

1、簡介

FlexCAN OTA 是由靈動提供的一種基于 UDS 協議使用 CAN 總線實現對 MCU 的 App 固件更新的解決方案。該解決方案的軟件部分主要由:Bootloader、App和PC Tool三部分構成,硬件部分如圖 1 所示。

wKgaomUDzKKATx6NAADC5W2H_0Q899.png

圖 1 MCU 與 PC 機交互示意圖

1.1 關鍵特性

基于 UDS(ISO14229) 標準

基于 CAN(ISO11891-1) 標準

具備對 App 固件 CRC 完整性校驗功能

使用主機上傳 Flash driver 到 MCU

在 Bootloader 中進行 App 有效性檢查

提供用于驗證 App 固件更新的 PC 端上位機工具

1.2 什么是 FlexCAN ?

CAN 是控制器域網 (Controller Area Network, CAN) 的簡稱,是一種功能豐富的車用總線標準,被設計用于在不需要主機(Host)的情況下,允許網絡上的單芯片和儀器相互通信。是由研發和生產汽車電子產品著稱的德國 BOSCH 公司開發,并最終成為國際標準(ISO11898),是國際上應用最廣泛的現場總線之一。

FlexCAN 是 CAN 協議的一個高完成度版本。以靈動 MM32F0140 系列 MCU 內嵌的 FlexCAN 為例,其符合 ISO 11898-1 標準,支持 CAN 2.0B 版本協議,位速率高達 1 Mbps,具有非常靈活的用于傳輸和接收的郵箱系統,可以接收和發送 11 位標識符的標準幀,也可以接收和發送 29 位標識符的擴展幀,主要被設計用作車載串行總線,可滿足實時處理、車輛在電磁干擾環境下的可靠操作、成本效益、帶寬等要求。

1.3 什么是 UDS ?

UDS(Unified Diagnostic Services,統一診斷服務)是一種用于汽車電子控制器 ECU (Electronic Control Units) 環境下的一種診斷通信協議,可實現診斷、固件更新、日常測試等功能,在 ISO 14229 中規定了其實現標準。

在本實例中,UDS 通信是在客戶端-服務端關系中執行的??蛻舳耸巧衔粰C下載軟件運行于 PC 機,服務端是帶有FlexCAN IP模塊的 MM32 MCU。例如,將 CAN 總線接口連接到 MCU,并將 UDS 請求發送到 MCU。當 MCU 支持 UDS 服務時,它將根據客戶端發出的請求做出相應的響應。

1.4 為什么用 Bootloader ?

對于 MCU 而言,如果程序內置有基于FlexCAN 的 Bootloader,則每次更新 MCU 的固件則不需要拆開外殼也不必再使用燒錄器進行燒錄,而可直接通過 CAN 總線來更新程序,這樣更方便也更安全,而且隨著智能化的普及,甚至可以對 MCU 進行遠程升級。Bootloader 程序結構對比如圖 2 所示:

wKgZomUDzKOAC9SsAABwZBPH-eE189.jpg

圖 2 程序結構對比框圖

1.5 為什么基于 UDS ?

為了規范 Bootloader 的全過程,通過使用成熟的平臺進而提供高質量 Bootloader。因 UDS 在設計時考慮了 Bootloader 的需求,并為 Bootloader 提供了相關服務以供使用,比如診斷會話控制、ECU 重置、讀取數據、請求下載、傳輸數據、請求傳輸退出等,可以實現更高效和可靠的刷寫功能。故主機廠普遍會要求在 UDS 規范的基礎上完成 Bootloader 功能。

1.6 用到了哪些 UDS 服務?

在 Bootloader 中,使用到 UDS 的 $10、$11、$27 和 $3E 基礎診斷服務,$22、$2E 讀寫 DID 服務,$31、$34、$36 和 $37 固件數據傳輸相關服務。UDS 服務概覽如表 1-1 所示:

表 1-1

wKgaomUDzKSAKxJnAAGP6uvAfgQ512.jpg

2、Bootloader

Bootloader 是一段允許在不使用燒錄器的情況下更新App固件的代碼,基于靈動 MindSDK 實現的 Bootloader 樣例工程支持 MDK、IAR 和 ARMGCC 三種工具鏈進行開發。在實際的使用過程中只需要在第一次使用時通過燒錄器將 Bootloader 燒錄進 MCU,后續的 App 都可以通過使用基于 CAN 總線的 UDS協議完成固件更新。

2.1 Bootloader 功能特性

支持 Service 27,用戶可根據自身需求添加安全訪問算法。

支持 Service 22 和 Service 2E,用戶可以根據自身需求添加策略,進行信息讀出與存儲。

外置 Flash driver,使用時通過外部 PC 或后臺將 Flash driver 加載到 MCU 的 RAM 中進行安全的 Flash 擦寫操作。

提供看門狗監控功能,用戶可根據自身需求選擇性開啟看門狗監控程序。

2.2 客制化修改說明

修改診斷 ID

可在樣例工程的 board/FblHalCan.h 中修改診斷 ID 的值。

指定數據填充值

當需要發送的數據長度不滿足 8 字節長度時,通過宏定義可以更改填充,用戶可以在樣例工程的 board/FblHalCan.h 中指定填充值。

使能看門狗

用戶可以在樣例工程的 board/FblMacros.h 中打開宏開關 WDG_ENABLE 使能看門狗服務,并且實現 ResetWdg 操作。

安全訪問算法接口

Bootloader中支持 27 Service,用戶可在樣例工程的 board/FblMacros.h 中使能宏開關 ENABLE_SECURITY_ALGORITHM_VERIFICATION 根據自身需求添加安全訪問算法。

2.3 Flash driver 介紹

什么是Flash driver?

在OTA程序升級過程中,發送App可執行文件之前,向底層先發送一段二進制文件,這段代碼實現了對MCU片內 Flash 的擦寫功能,稱為 Flash driver。

Flash driver存在的意義

在車載ECU控制器中,為了安全考慮,會盡可能的避免在代碼中固化有對flash進行擦寫操作,主要為了避免在程序跑飛時誤調用該部分代碼,使軟件代碼部分受到破壞。

Flash driver的實現方式

a.將flash driver固化在底層flash中,在運行的時候將flash中的flash driver拷貝到ram中來運行,這是比較傳統的方式,但是避免不了提到的安全性問題。

b.將flash driver這段代碼保存在PC端或后臺,在每次執行OTA升級前,將這段代碼先發送給MCU,這樣可以避免方式 a 中提到的安全性問題。

3、App

基于靈動 MindSDK 提供的 flexcan_ota_app 樣例工程進行開發和生成用于更新的 HEX 格式 App 固件生成,無需任何適配操作即可生成用于 OTA 升級的 App 固件。

3.1 使用說明

將 Bootloader 通過下載器下載到 MCU 中后,可通過提供的 PC Tool 來刷寫生成的固件,通過 PC Tool 下載成功后,一方面 PC 終端會有下載成功提示,另一方面也可以查看開發板上對應固件實現的功能是否開始執行。

關于 App 固件可從提供的 flexcan_ota_app 樣例工程編譯源碼并將生成“.hex”格式的 App 固件進行加載。

3.2 App 設計規范

App 與 Bootloader 存放在 MCU 的同一塊 Flash 的兩個不同區域中,為保證兩個軟件的正常使用,App 設計遵循表 2-1 和表 2-2 所述規范。

表 2-1

wKgZomUDzKaAWI5KAABVoL-V9Ys846.png

表 2-2

wKgaomUDzKiAXeNUAAA7O3AacIg993.png

4、PC Tool

Flexcan OTA PC Tool 是用于驗證靈動 MindSDK 中提供的 FlexCAN OTA 解決方案的簡易 PC 端上位機工具。

4.1 功能特性

支持 CAN 通信速率自定義

支持 Win10 操作系統下運行

支持默認參數直接運行和命令行下帶參數運行

支持直接加載 MDK 和 IAR 工具鏈下生成的 HEX 格式文件

基于 Python 使用 python-udsoncan 開發,可根據不同需求靈活進行二次開發

4.2 開發環境

本工具在 Win10 平臺使用 Python 進行開發,基于 UDS 使用 CAN 協議,支持 PEAK CAN卡與 MCU 進行通訊。

4.3 使用說明

請按照如下步驟進行操作:

a、下載 Bootloader 到 MCU

將提供的 flexcan_ota_bootloader 樣例工程編譯并下載到開發板中。

b、安裝 CAN 卡驅動并連接 MCU

在這里我們用到的是PCAN-USB,下載并安裝驅動(https://peak-system.com.cn/driver/) ,并將 PCAN-USB 和開發板上的 CAN 收發器通過雙絞線連接以及通過 USB 和 PC 機連接。

c、運行 FlexCAN OTA PC Tool

方式一:按照默認參數直接運行

直接雙擊 flexcan_ota_pc_tool_v1.0.exe,如圖 3 所示,默認將按照 500Kbps 的比特率進行 CAN 通信,Flash_driver 文件的加載地址為當前路徑下的文件(./flash_driver.hex), App 文件的加載路徑為當前路徑下文件(./app.hex)。

wKgZomUDzKmAbg3kAAEbTv4T9NU992.jpg

圖 3

方式二:按照指定參數運行

在 Win10 平臺下啟動命令行窗口并切換到當前路徑下,獲取幫助如圖4所示,輸入如下指令并按回車鍵:

flexcan_ota_pc_tool_v1.0.exe-h

wKgZomUDzKuAQMSWAACkH2Hr0Mg825.jpg

圖 4

按照指定參數運行如圖 5 所示,輸入如下指令并按回車鍵:flexcan_ota_pc_tool_v1.0.exe-b500000-f"./flash_driver.hex"-a"./app.hex"

其中 flash_driver.hex 文件為用于安全地擦寫片內 flash 的代碼,在每次 OTA 更新中復用即可。

wKgaomUDzK2AJK4OAAFWKSqCh8Q417.jpg

圖 5

d、結束

等待 FlexCAN OTA 固件更新流程結束,并按任意按鍵退出。

5、注意事項

FlexCAN OTA Tool 為用于驗證基于 UDS 使用 CAN 協議進行 App 固件更新的上位機工具,PC 端使用 PEAK-CAN 與 MCU 通訊,僅支持在 Win 10 操作系統下運行, 且用于功能性驗證,若遇到軟件閃退等問題請重啟該軟件并復位 MCU。該工具可根據開發者項目需求進行二次開發。

以上介紹是基于MM32F0140 系列 MCU 進行介紹和示例演示,相關源碼請訪問靈動官網進行獲?。?/p>

01)進入靈動官網(www.mm32mcu.com)

02)打開“產品”菜單下 MM32F0140 頁面,瀏覽“文檔”列表。

wKgZomUDzK-AQcBfAAAq_aLy538130.png

03)在“應用筆記”中下載“AN0035_FlexCAN_OTA”文檔,獲取源碼。

wKgaomUDzLCAC2KmAABBEty7Zfo463.png

6、參考文獻

《ISO11898-1》

《ISO14229》

來源:靈動MM32MCU

免責聲明:本文為轉載文章,轉載此文目的在于傳遞更多信息,版權歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權問題,請聯系小編進行處理


審核編輯 黃宇

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

    關注

    56

    文章

    2471

    瀏覽量

    459343
  • 總線
    +關注

    關注

    10

    文章

    2716

    瀏覽量

    87230
  • OTA
    OTA
    +關注

    關注

    7

    文章

    527

    瀏覽量

    34601
收藏 人收藏

    評論

    相關推薦

    基于MM32G5330的FlexCAN實現CANopenNode協議棧移植

    本文將介紹如何基于靈動MM32G5330的FlexCAN實現CANopenNode協議棧的移植,并使用靈動官方提供的開發板Mini-G5333進行驗證。
    發表于 04-12 09:15 ?332次閱讀
    基于MM32G5330的<b class='flag-5'>FlexCAN</b>實現CANopenNode協議棧移植

    請問BlueNRG ota升級中ota_sw_activation變量上電是隨機值嗎?

    最近在看BlueNRG ota升級代碼時有個疑惑,ota_sw_activation變量是個未初始化的值,按照ram特性上電應該是個隨
    發表于 03-13 08:29

    MM32F0140 FlexCAN一致性測試 (2)

    MM32F0140 FlexCAN一致性測試 (2)
    的頭像 發表于 11-10 18:23 ?384次閱讀
    MM32F0140 <b class='flag-5'>FlexCAN</b>一致性測試 (2)

    MM32F0140 FlexCAN一致性測試(1)

    MM32F0140 FlexCAN一致性測試 (1)
    的頭像 發表于 11-10 17:50 ?274次閱讀
    MM32F0140 <b class='flag-5'>FlexCAN</b>一致性測試(1)

    MPC5746C Flexcan無法觸發接收中斷,無法接收SDK 3. 0的數據怎么解決?

    我用SDK 3. 0將Flexcan 配置在圖形界面中的Flexcan 配置為附件SDK 3. 0, 細節作為附件。 當我初始時, 使用以下代碼 : flexcan
    發表于 11-10 07:57

    MM32F0160的FlexCAN FD位時間采樣點如何計算?

    FlexCAN模塊是一個通信控制器,擴展了CAN FD功能,遵循ISO 11898-1標準、CAN FD和CAN 2.0B協議規范。
    的頭像 發表于 11-09 17:43 ?839次閱讀
    MM32F0160的<b class='flag-5'>FlexCAN</b> FD位時間采樣點如何計算?

    MM32F0140學習筆記——FlexCAN 控制器局域網

    MM32F0140學習筆記——FlexCAN 控制器局域網
    的頭像 發表于 10-27 09:25 ?1124次閱讀
    MM32F0140學習筆記——<b class='flag-5'>FlexCAN</b> 控制器局域網

    MindSDK中FlexCAN驅動程序及樣例工程

    前文介紹了FlexCAN外設模塊,一種典型的CAN總線引擎子系統的工作機制。那么,用戶在軟件開發平臺對CAN總線引擎進行編程,需要根據硬件外設模塊的功能進行建模,將對CAN總線通信引擎的操作封裝
    的頭像 發表于 06-23 15:41 ?727次閱讀
    MindSDK中<b class='flag-5'>FlexCAN</b>驅動程序及樣例工程

    微控制器集成的FlexCAN外設模塊

    FlexCAN(由Silvaco International公司設計),這些CAN總線通信引擎在汽車電子應用中已經被廣泛使用,用以實現內存中的數據與CAN總線上串行信號的的相互轉換。靈動微電子
    的頭像 發表于 06-16 11:06 ?1365次閱讀
    微控制器集成的<b class='flag-5'>FlexCAN</b>外設模塊

    CAN0_ORed_Err_Wakeup_IRQHandler() 被觸發并且FLEXCAN_GetErrorCounters返回0是為什么?

    我在 s32k116 上使用 flexcan 驅動程序。我有個總共有 2 個節點的 CAN 網絡。我正在嘗試不同的測試用例,試圖測試驅動程序和相關代碼的耐用性。有種情況
    發表于 05-31 07:52

    “s32k148 flexCan with fifo and DMA”條目“Callback func”只有次是怎么回事?

    我的“s32k148 flexCan with fifo and DMA”條目“flexcancom_Callback func”只有次 sdk3.0.0 void
    發表于 05-30 12:21

    MPC5777C上的FlexCAN停止了怎么處理?

    初始化用于接收的 FlexCAN 模塊時出現問題: 當包含少于 8 個數據字節的 CAN ID 作為消息緩沖區上電后的第條消息被接收時,它被接收(次)并且不再接收所有后續消息。 FlexC
    發表于 05-22 08:52

    如何使用定制板上的FlexCAN模塊在秒鐘內發送3000個CAN幀?

    我寫信是想詢問我們 i.MX8QM-Apalis-Ixora 板上的 FlexCAN 模塊。我們目前正在測試使用 FlexCAN 模塊在秒鐘內發送 3000 個 CAN 幀的能力,但我們面臨
    發表于 05-18 06:16

    FlexCAN配置為Legacy RxFIFO模式的步驟是什么?

    FlexCAN 的 IRQ。 9. 我正在通過我的 PC 使用 USB 向 PEAK 系統的控制器發送數據包。 10. 我收到條消息說公共汽車很重,但在我自己停止通信之前我看不到任何變化。 我
    發表于 05-17 08:37

    如何在Mx1051的FlexCAN1中配置簡單信號多路復用和擴展信號多路復用?

    我們正在研究 FlexCAN1 的 mxrt1051。我們是第次在 FlexCAN 上工作,請協助以下幾點: - 如何在 Mx1051 的 FlexCAN1 中配置簡單信號多路復用和
    發表于 05-05 11:05
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>