本文將介紹在使用 MM32F0140 系列 MCU 實(shí)現(xiàn) UDS Bootloader 過(guò)程中涉及到的 FlexCAN、UDS 和 Bootloader 等相關(guān)基本概念。
MM32F0140 簡(jiǎn)介
MM32F0140 使用高性能的 Arm? Cortex-M0 內(nèi)核的 32 位微控制器,最高工作頻率可達(dá) 72MHz,內(nèi)置 64KB Flash 和 8KB SRAM,有豐富的增強(qiáng)型 I/O 端口和包括 FlexCAN 在內(nèi)等多種外設(shè),適用于汽車(chē)診斷儀,后裝汽車(chē)協(xié)控制器和消防監(jiān)控等多種應(yīng)用場(chǎng)合。
圖 1 MM32F1040 簡(jiǎn)介
什么是 FlexCAN?
CAN 是控制器域網(wǎng) (Controller Area Network, CAN) 的簡(jiǎn)稱,是一種功能豐富的車(chē)用總線標(biāo)準(zhǔn),被設(shè)計(jì)用于在不需要主機(jī)(Host)的情況下,允許網(wǎng)絡(luò)上的單芯片和儀器相互通信。是由研發(fā)和生產(chǎn)汽車(chē)電子產(chǎn)品著稱的德國(guó) BOSCH 公司開(kāi)發(fā)了,并最終成為國(guó)際標(biāo)準(zhǔn)(ISO11898)。是國(guó)際上應(yīng)用最廣泛的現(xiàn)場(chǎng)總線之一。FlexCAN 是 CAN 協(xié)議的一個(gè)高完成度版本。
MM32F0140 系列 MCU 內(nèi)嵌的 FlexCAN,符合 ISO 11898-1 標(biāo)準(zhǔn),支持 CAN 2.0B 版本協(xié)議,位速率高達(dá) 1 Mbps,具有非常靈活的用于傳輸和接收的郵箱系統(tǒng),可以接收和發(fā)送 11 位標(biāo)識(shí)符的標(biāo)準(zhǔn)幀,也可以接收和發(fā)送 29 位標(biāo)識(shí)符的擴(kuò)展幀,主要被設(shè)計(jì)用作車(chē)載串行總線,可滿足實(shí)時(shí)處理、車(chē)輛在電磁干擾環(huán)境下的可靠操作、成本效益、帶寬等要求。
什么是 UDS?
UDS(Unified Diagnostic Services,統(tǒng)一診斷服務(wù))是一種用于汽車(chē)電子控制器 ECU (Electronic Control Units) 環(huán)境下的一種診斷通信協(xié)議,可實(shí)現(xiàn)診斷、固件更新、日常測(cè)試等功能,在 ISO 14229 中規(guī)定了其實(shí)現(xiàn)標(biāo)準(zhǔn)。
在本實(shí)例中,UDS 通信是在客戶端-服務(wù)端關(guān)系中執(zhí)行的。客戶端是上位機(jī)下載軟件運(yùn)行于 PC 機(jī),服務(wù)端是 MM32F0140 系列 MCU。例如,將 CAN 總線接口連接到 MCU,并將 UDS 請(qǐng)求發(fā)送到 MCU。當(dāng) MCU 支持 UDS 服務(wù)時(shí),它將根據(jù)客戶端發(fā)出的請(qǐng)求做出相應(yīng)的響應(yīng)。
為什么用 Bootloader?
對(duì)于 ECU 而言,如果程序內(nèi)置有基于FlexCAN Bootloader,則每次更新 ECU 的固件可不必再使用燒錄器進(jìn)行燒錄,而可直接通過(guò) CAN 總線來(lái)更新程序,而且隨著汽車(chē)智能化的普及,甚至可以對(duì) ECU 進(jìn)行遠(yuǎn)程升級(jí)。有無(wú) Bootloader 功能程序結(jié)構(gòu)對(duì)比如圖 2 所示:
圖 2 程序結(jié)構(gòu)對(duì)比框圖
為什么要基于 UDS?
為了規(guī)范 Bootloader 的全過(guò)程。因 UDS 在設(shè)計(jì)時(shí)考慮了 Bootloader 的需求,并為 Bootloader 提供了相關(guān)服務(wù)以供使用,故主機(jī)廠普遍會(huì)要求在 UDS 規(guī)范的基礎(chǔ)上完成 Bootloader 功能。
使用到哪些 UDS 服務(wù)?
● 在 Bootloader 中,使用到 UDS 的 $10、$11、$27 和 $3E 基礎(chǔ)診斷服務(wù),$22、$2E 讀寫(xiě) DID 服務(wù),$31、$34、$36 和 $37 固件數(shù)據(jù)傳輸相關(guān)服務(wù)。
● 在 APP 中,使用到 UDS 的 $85 和 $28 服務(wù),保證暫停 CAN 正常通信,暫停記錄 DTC,讓被升級(jí)設(shè)備升級(jí)。
UDS 提供的服務(wù)概覽如圖 3 所示:
圖 3 UDS 服務(wù)概覽
CAN、UDS 和 OSI 模型之間的關(guān)系
為了更好的理解 UDS, 讓我們了解一下 CAN 總線、UDS 和 OSI 模型之間的關(guān)系。
CAN 對(duì)應(yīng)于 OSI 模型中的數(shù)據(jù)鏈路層和物理層描述(根據(jù) ISO 11898)。
與 CAN 相比, UDS (ISO 14229) 是一種 “更高層協(xié)議”, 在 OSI 模型中使用到會(huì)話層和應(yīng)用層,如下圖 4 所示:
圖 4 UDS 與 OSI 模型對(duì)應(yīng)圖
UDS 的消息結(jié)構(gòu)
PDU
Network_Protocol Data Unit, 網(wǎng)絡(luò)層協(xié)議數(shù)據(jù)單元
PDU 是用于建立對(duì)等實(shí)體間的通信,是一組信息和數(shù)據(jù)的集合,表示了發(fā)送發(fā)和接收方對(duì)等實(shí)體之間傳遞的信息和數(shù)據(jù)。由地址信息(CAN ID)、協(xié)議控制信息(PCI) 和數(shù)據(jù)構(gòu)成。
圖 5 為 UDS 消息結(jié)構(gòu)示意圖,圖 6 為 UDS 消極響應(yīng)示意圖。
圖 5 UDS 消息結(jié)構(gòu)
圖 6 UDS 消極響應(yīng)示意
PCI
Protocol Control Information,協(xié)議控制信息
PCI 字段本身與 UDS 請(qǐng)求本身沒(méi)有關(guān)系,但是對(duì)于在 CAN 總線上發(fā)出的診斷 UDS 請(qǐng)求是必需的。PCI 字段可以長(zhǎng)達(dá) 1 ~ 3 字節(jié),并且包含與傳輸不適合單個(gè) CAN 幀的消息有關(guān)的信息。
SID
Service ID,服務(wù)標(biāo)識(shí)符
當(dāng)希望使用特定的 UDS 服務(wù)時(shí),UDS 請(qǐng)求消息應(yīng)該在數(shù)據(jù)有效負(fù)載中包含 UDS 服務(wù)標(biāo)識(shí)符 (SID)。標(biāo)識(shí)符分為請(qǐng)求 SID 和響應(yīng) SID。
SFB
Sub Function Byte,子函數(shù)字節(jié)
在一些 UDS 請(qǐng)求幀中使用,在一些 UDS 服務(wù)中,如 0x22,子函數(shù)字節(jié)沒(méi)有使用。一般來(lái)說(shuō),當(dāng)一個(gè)請(qǐng)求被發(fā)送到 ECU 時(shí),ECU 可以做出正向或負(fù)向的響應(yīng)。在響應(yīng)為正向的情況下,測(cè)試人員可能想要抑制響應(yīng)(因?yàn)樗赡苁遣幌嚓P(guān)的)。這是通過(guò)在子函數(shù)字節(jié)中將第 1 位設(shè)置為 1 來(lái)完成的。負(fù)向的反應(yīng)是無(wú)法被抑制的。剩下的7位可以用來(lái)定義最多 128 個(gè)子函數(shù)值。例如,當(dāng)通過(guò) SID 0x19(讀取診斷信息)讀取 DTC 信息時(shí),子函數(shù)字節(jié)可用于控制報(bào)告類(lèi)型。
DID
Data Identifier,數(shù)據(jù)標(biāo)識(shí)符
在大多數(shù) UDS 請(qǐng)求服務(wù)中,各種類(lèi)型的請(qǐng)求數(shù)據(jù)參數(shù)用于提供 SID 和可選子函數(shù)字節(jié)以外的請(qǐng)求進(jìn)一步配置。
ISO-TP 標(biāo)準(zhǔn)
ECU 固件更新通常涉及大量有效載荷的通信,而 ISO-TP 標(biāo)準(zhǔn)(ISO 15765 )就是為了解決基于 CAN 的車(chē)輛診斷的大量有效載荷問(wèn)題而提出。該標(biāo)準(zhǔn)指定了基于CAN 的車(chē)輛網(wǎng)絡(luò)傳輸協(xié)議和網(wǎng)絡(luò)層服務(wù),最常見(jiàn)的用例就有 UDS (ISO 14229-1)。
ISO-TP 標(biāo)準(zhǔn)概述了如何通過(guò)分段、流量控制和重組來(lái)傳輸高達(dá) 4096 字節(jié)的 CAN 數(shù)據(jù)有效載荷。ISO-TP 定義了用于通信的 CAN 幀,如下圖 7 所示。
圖 7 ISO-TP 幀類(lèi)型
通過(guò)使用 ISO-TP 標(biāo)準(zhǔn)將 UDS 的消息結(jié)構(gòu) PDU 分為了四種類(lèi)型:
SF (Single Frame, 單幀)
描述單幀傳輸。
FF (First Frame, 首幀)
描述多幀傳輸?shù)钠鹗肌?/p>
CF (Consecutive Frame,連續(xù)幀)
用于在多幀傳輸中傳輸數(shù)據(jù)。
FC (Flow Control Frame,流控幀)
用于在多幀傳輸過(guò)程中,對(duì)報(bào)文流控制。
UDS 的單幀通信和多幀通信:
單幀通信如圖 8 所示:
圖 8 單幀通信
多幀通信過(guò)程如圖 9 所示:
圖 9 多幀通信
基于 UDS Bootloader 實(shí)現(xiàn)更新 APP 流程框圖
MM32F0140 系列 MCU 使用 FlexCAN 實(shí)現(xiàn)基于 UDS Bootloader 更新 APP 的流程框圖如10所示:
圖10 更新 APP 流程
結(jié)語(yǔ)
本文以 MM32F0140 系列 MCU 的 FlexCAN 為例,簡(jiǎn)要介紹了在使用 MM32F0140 系列 MCU 實(shí)現(xiàn) UDS Bootloader 過(guò)程中涉及到的 FlexCAN、UDS 和 Bootloader 等相關(guān)基本概念,并介紹了 UDS 的消息結(jié)構(gòu)和 ISO-TP 標(biāo)準(zhǔn),以及展示了 MM32F0140 系列 MCU 使用 FlexCAN 實(shí)現(xiàn) UDS Bootloader 更新 APP 的流程框圖。
來(lái)源:靈動(dòng)MM32MCU
審核編輯:湯梓紅
-
微控制器
+關(guān)注
關(guān)注
48文章
7900瀏覽量
153645 -
mcu
+關(guān)注
關(guān)注
146文章
17821瀏覽量
359938 -
bootloader
+關(guān)注
關(guān)注
2文章
238瀏覽量
46432
發(fā)布評(píng)論請(qǐng)先 登錄
評(píng)論