chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

一文了解bootloader

Linelayout4 ? 來(lái)源:ZOTECK ? 2023-06-25 10:05 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Bootloader 介紹

大多數(shù)Bootloader 包含兩種操作模式。

啟動(dòng)加載模式

下載模式

對(duì)于大多數(shù)汽車(chē)軟件開(kāi)發(fā)者來(lái)說(shuō),從客戶需求的角度,他們更多關(guān)心Bootloader的下載模式。下面我們將從CAN Bootloader的一般需求入手,來(lái)介紹一下CAN Bootloader 的整個(gè)實(shí)現(xiàn)過(guò)程。

CAN Bootloader 簡(jiǎn)述

通過(guò)CAN網(wǎng)絡(luò)升級(jí)一般需要考慮下面幾個(gè)方向。

01

針對(duì)單一節(jié)點(diǎn)

CAN網(wǎng)絡(luò)是串行結(jié)構(gòu),在對(duì)節(jié)點(diǎn)升級(jí)的時(shí)候,不能被別的節(jié)點(diǎn)影響,也不能影響到別的節(jié)點(diǎn)。這里就需要進(jìn)行點(diǎn)對(duì)點(diǎn)升級(jí)。在OEM 的規(guī)范中會(huì)對(duì)每一個(gè)ECU 都有自己的診斷ID。一般情況下針對(duì)CAN網(wǎng)絡(luò)的ECU有。

兩個(gè)接收ID

功能尋址ID

物理尋址ID

一個(gè)發(fā)送ID

診斷發(fā)送ID

這樣可以確保點(diǎn)對(duì)點(diǎn)的操作,和其他節(jié)點(diǎn)互相不干擾。

02

節(jié)點(diǎn)的智能設(shè)計(jì)

在CAN網(wǎng)絡(luò)中實(shí)現(xiàn)數(shù)據(jù)更新,最進(jìn)本的就是master ECU 把數(shù)據(jù)有效的傳輸給Slave ECU, 這樣Slave ECU 對(duì)自身的flash 進(jìn)行操作。在這個(gè)過(guò)程中需要對(duì)數(shù)據(jù)進(jìn)行一定要求。

保證數(shù)據(jù)傳遞的有效性-->傳輸過(guò)程沒(méi)有錯(cuò)誤

保證數(shù)據(jù)本身的真實(shí)性--> 未被篡改

保證數(shù)據(jù)發(fā)送方的可靠性-->被授權(quán)的ECU

保證數(shù)據(jù)本身的正確性--> 是否與Bootloader 兼容

等等需求

這里對(duì)傳輸過(guò)程的保證,汽車(chē)OEM 一般通過(guò)UDS 讓Master ECU 和 Slave 進(jìn)行交互。通過(guò)握手協(xié)議,以及一些routine 來(lái)對(duì)上面需求進(jìn)行一一實(shí)現(xiàn)。

針對(duì)UDS 這里不一一介紹,可以翻閱14229 自行查詢。

2438d19a-11d1-11ee-962d-dac502259ad0.png

注意這里缺少新版的 0x29 服務(wù)。

UDS診斷29認(rèn)證服務(wù)-Authentication Service

03

進(jìn)入Bootloader 模式

一般來(lái)說(shuō)這里有一下幾種方式

APP 主動(dòng)跳轉(zhuǎn)至 Bootloader 模式

上電啟動(dòng)由于Bootloader 檢測(cè)APP 失效,主動(dòng)停留在Bootloader

APP 軟件異常,自動(dòng)復(fù)位到Bootloader 模式下。

這里針對(duì)OEM 的升級(jí)需求,一般是 第一種, APP 主動(dòng)跳轉(zhuǎn)至Bootloader 模式。因?yàn)锽ootloader 不一定都是需要依賴UDS的,這里統(tǒng)一叫Bootloader 模式,OEM 的 UDS 的規(guī)范里面的名稱叫做programming session。

一般來(lái)說(shuō)OEM 會(huì)在APP 里面先進(jìn)行session 跳轉(zhuǎn),身份驗(yàn)證。

最后通過(guò) 10 02 命令讓APP 跳轉(zhuǎn)到Bootloader 模式下。

在我們進(jìn)行bootloader設(shè)計(jì)的時(shí)候,可以通過(guò)任何特定方式,注意這里的特定方式不能是隨隨便便就可以觸發(fā) 的,防止誤觸進(jìn)入bootloader 模式。

因?yàn)樘D(zhuǎn)的邏輯是 APP 檢測(cè)到一定的條件,然后 對(duì)某些寄存器,或者某些Bootloader 可讀的內(nèi)存空間進(jìn)行寫(xiě)flag. 隨后進(jìn)行reset. 這樣在reset完成之后, bootloader 會(huì)檢測(cè)到,這次不需要跳轉(zhuǎn)至APP 了。

04

對(duì)bootloader的要求

從實(shí)際的研發(fā)需求出發(fā),這里列出了一些常用的需求。實(shí)際OEM 的bootloader 可能會(huì)細(xì)化需求,但是最終都是為了下面的目的提出來(lái)的需求。

多次數(shù)據(jù)更新

刷寫(xiě)速度,傳輸速度

差分更新

身份驗(yàn)證

數(shù)據(jù)格式的標(biāo)準(zhǔn)化

對(duì)數(shù)據(jù)的完整性,有效性等進(jìn)行校驗(yàn)

對(duì)APP 的有效性進(jìn)行校驗(yàn)

上位機(jī)方便友好

OEM 對(duì)Bootloader 的基本要求

在OEM 的需求里,在刷寫(xiě)過(guò)程一般分為三個(gè)步驟。

前處理

刷寫(xiě)

后處理

分別是做什么的呢?

前處理

2498f67e-11d1-11ee-962d-dac502259ad0.png

需求各不相同,但是目的基本都一致。

避免其他節(jié)點(diǎn)對(duì)升級(jí)過(guò)程的影響

避免自身節(jié)點(diǎn)對(duì)升級(jí)過(guò)程的影響

避免自身節(jié)點(diǎn)對(duì)其他節(jié)點(diǎn)的影響

刷寫(xiě)

24ade19c-11d1-11ee-962d-dac502259ad0.png

通過(guò)一系列的UDS 命令進(jìn)行 點(diǎn)對(duì)點(diǎn) 交互。其目的和前面提到的一致。

發(fā)送數(shù)據(jù)的ECU 可靠

數(shù)據(jù)傳輸過(guò)程可靠

數(shù)據(jù)有效性(識(shí)別有沒(méi)有被篡改)

數(shù)據(jù)加密解密數(shù)據(jù)安全

等等

后處理

24d20c3e-11d1-11ee-962d-dac502259ad0.png

解除自身的特殊狀態(tài)。更新配置參數(shù)等等。

這里面 ECU 需要做好和APP 的相互校驗(yàn)。需要達(dá)到

APP 是否有效,Bootloader 需要能判斷出

APP 運(yùn)行時(shí)無(wú)效,需要能有效進(jìn)入Bootloader模式。

APP 無(wú)效, Bootloader 不應(yīng)該跳入

等等

Bootloader的設(shè)計(jì)與實(shí)現(xiàn)

總結(jié)一句話

最基本的Bootloader通過(guò)傳輸協(xié)議把數(shù)據(jù)可靠的寫(xiě)入指定的內(nèi)存空間

通過(guò)上面的分析,總結(jié)一下我們需要實(shí)現(xiàn)哪些功能。

01

控制器最小系統(tǒng)

單純運(yùn)行Bootloader的軟件,這里是不需要os的。只需要一個(gè)while(1) + 中斷系統(tǒng)順序執(zhí)行即可。

本文以Aurix Tricore芯片示例代碼介紹。

啟動(dòng)代碼

static void __StartUpSoftware(void);
static void __StartUpSoftware_Phase2(void);
static void __StartUpSoftware_Phase3ApplicationResetPath(void);
static void __StartUpSoftware_Phase3PowerOnResetPath(void);
static void __StartUpSoftware_Phase4(void);
static void __StartUpSoftware_Phase5(void);
static void __StartUpSoftware_Phase6(void);
static void __Core0_start(void);

main 函數(shù)

這里面實(shí)現(xiàn)很簡(jiǎn)單,只需要判斷是否進(jìn)入app. 如果不進(jìn)入app. 就只需要監(jiān)聽(tīng)通訊接口的數(shù)據(jù),進(jìn)行相對(duì)應(yīng)的操作即可。

int main(void)
{
 if(*((uint32_t *)APP_EXE_FLAG_START_ADDR)==0x80001000){
  CAN_BOOT_JumpToApplication(APP_START_ADDR);
 }
 __set_PRIMASK(0);//開(kāi)啟總中斷
 CAN_Configuration(1000000);




 while (1)
 {
  if(CAN1_CanRxMsgFlag){
   CAN_BOOT_ExecutiveCommand(&CAN1_RxMessage);
   CAN1_CanRxMsgFlag = 0;
  }
 }
}

02

通訊驅(qū)動(dòng)

這里面采用的是比較簡(jiǎn)單的CAN 通訊。

一般來(lái)說(shuō)因?yàn)樯衔粰C(jī)在傳輸數(shù)據(jù)的時(shí)候,速度是很快的。我們bootloader里面的CAN 接收需要采用中斷的模式進(jìn)行收發(fā)。

對(duì)于CAN 的參數(shù)配置。

波特率

typedef struct {
 unsigned char  SJW;
 unsigned char  BS1;
 unsigned char  BS2;
 unsigned short PreScale;
} tCAN_BaudRate;

可以根據(jù)芯片手冊(cè)的原理進(jìn)行配置。

251d60e4-11d1-11ee-962d-dac502259ad0.png

這里面對(duì)于Bootloader來(lái)說(shuō),比較重要的就是波特率和收發(fā)報(bào)文ID 以及中斷模式。

因?yàn)檫@些是需要和上位機(jī)進(jìn)行配合的。

這里給出以下Mcal 代碼初始化CAN時(shí)候的形參??梢源蟾趴闯鲂枰跏蓟膬?nèi)容

/*******************************************************************************
** Traceability  : [cover parentID={196A1432-EAB1-461a-BD6C-259784BF6397}]  **
**                                      **
** Syntax      : void Can_17_McmCan_Init                **
**          (                            **
**           const Can_17_McmCan_ConfigType* const Config     **
**          )                            **
**                                      **
** Description   : Driver Module Initialization function         **
**          * This function initializes:              **
**          * Static variables, including flags           **
**          * CAN HW Unit global hardware settings         **
**          * Controller specific settings for each CAN Controller **
** All CAN Controllers will be in state CANIF_CS_STOPPED after initialization**
** [/cover]                                 **
**                                      **
** Service ID    : 0x00                          **
**                                      **
** Sync/Async    : Synchronous                      **
**                                      **
** Reentrancy    : Non-Reentrant                     **
**                                      **
** Parameters(in)  : Config - Pointer to all cores CAN driver configuration **
**                                      **
** Parameters (out) : none                          **
**                                      **
** Return value   : none                          **
**                                      **
*******************************************************************************/

對(duì)于bootloader來(lái)說(shuō),這里只需要三個(gè)接口

初始化,收,發(fā)

void CAN_Configuration_init(uint32_t BaudRate);
uint8_t CAN_WriteData(CanTxMsg *TxMessage);
uint16_t Read_CAN_Address(void);

03

內(nèi)存驅(qū)動(dòng)

首先看一下內(nèi)存分配

PFLASH

2534e3e0-11d1-11ee-962d-dac502259ad0.png

DFLASH

2557b03c-11d1-11ee-962d-dac502259ad0.png

一般來(lái)說(shuō) 被刷的軟件格式是Hex 或S19. 針對(duì)這兩種格式就不說(shuō)了。

code 和 data 可以根據(jù)主機(jī)廠需求分為兩個(gè)或多個(gè)Hex.

所以這里需要對(duì)Pflash 和 DFlash 都進(jìn)行操作。

需要注意的是兩個(gè)不同的flash 操作的 扇區(qū)大小是不一樣的。Mcal提供的接口已經(jīng)做了相對(duì)應(yīng)的處理。

對(duì)于bootloader來(lái)說(shuō),需要的接口 擦除 和 寫(xiě)入。

/*******************************************************************************
** Syntax      : FlsLoader_ReturnType FlsLoader_Write(         **
**           const FlsLoader_AddressType TargetAddress,      **
**           const FlsLoader_LengthType Length,          **
**           const uint8* const SourceAddressPtr)         **
**                                      **
** Service ID    : 0x31                          **
**                                      **
** Sync/Async    : Synchronous                       **
**                                      **
** Reentrancy    : Non Reentrant                      **
**                                      **
** Parameters(in)  : Length: Number of bytes to be written. It should be   **
**           multiple of the following page sizes of the      **
**           selected Flash for write.               **
**           PFlash: 32 Bytes                   **
**           DFlash: 8 Bytes                    **
**          SourceAddressPtr: Pointer to source data buffer     **
**          TargetAddress: Target address in Flash memory.     **
**           It should be aligned to the following page sizes   **
**           of the selected Flash for write.           **
**           PFlash: 32 Bytes                   **
**           DFlash: 8 Bytes                    **
**                                      **
** Parameters (out) : None                          **
**                                      **
** Return value   : FLSLOADER_E_OK: Successful execution.          **
**          FLSLOADER_E_BUSY: Flash is busy with erase/write    **
**           operation.                      **
**          FLSLOADER_E_NOT_OK: Returned when DET, Sequence error, **
**           Program/Erase verify errors occur, SourceAddressPtr is**
**           null pointer.                     **
**          FLSLOADER_E_LOCKED: Programming a locked sector.    **
**                                      **
** Description   : This function is used to program a page of internal   **
**          Flash. Sectors of PFlash and DFlash can be programmed. **
*******************************************************************************/

/*******************************************************************************
** Syntax      : FlsLoader_ReturnType FlsLoader_Erase(         **
**           const FlsLoader_AddressType TargetAddress,      **
**           const FlsLoader_LengthType Length           **
**          )                            **
**                                      **
** Service ID    : 0x32                          **
**                                      **
** Sync/Async    : Synchronous                       **
**                                      **
** Reentrancy    : Non Reentrant                      **
**                                      **
** Parameters(in)  : Length: Number of Flash (PFlash or DFlash) sectors to  **
**          be erased. Note: Number of sectors should lie within  **
**          single Flash bank. Erase operation across the Flash   **
**          banks is not supported.                 **
**          TargetAddress: Target address in Flash memory. It    **
**          should be aligned to the following sector sizes of the **
**          selected Flash for erase.                **
**          PFlash: 16 Kbyte                    **
**          DFlash: 4 Kbyte                     **
**                                      **
** Parameters (out) : None                          **
**                                      **
** Return value   : FLSLOADER_E_OK: Successful completion.         **
**          FLSLOADER_E_BUSY: Flash is busy with erase/write    **
**          operation.                       **
**          FLSLOADER_E_NOT_OK: Returned when DET, Sequence error, **
**          Erase verify errors occur.               **
**          FLSLOADER_E_LOCKED: Sector is protected.        **
**                                      **
** Description   : This function erases the logical sectors of the     **
           internal Flash. The completion of this operation is   **
           denoted by clearing of busy status flag or error.    **

04

額外需求庫(kù)

這里比如需要對(duì)數(shù)據(jù)進(jìn)行CRC 校驗(yàn)

需要對(duì)數(shù)據(jù)包進(jìn)行數(shù)據(jù)解密用到的加密算法

等等

05

交互邏輯 上層應(yīng)用

根據(jù)具體的OEM 需求實(shí)現(xiàn)的功能。比如說(shuō)。配置參數(shù)的交換,與APP軟件的有效位相互校驗(yàn),等等需求。這里無(wú)法給出對(duì)應(yīng)代碼。

總結(jié) 一張圖

257de59a-11d1-11ee-962d-dac502259ad0.png





審核編輯:劉清

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

    關(guān)注

    145

    文章

    1987

    瀏覽量

    132880
  • OEM
    OEM
    +關(guān)注

    關(guān)注

    4

    文章

    408

    瀏覽量

    51646
  • 上位機(jī)
    +關(guān)注

    關(guān)注

    27

    文章

    967

    瀏覽量

    55797
  • bootloader
    +關(guān)注

    關(guān)注

    2

    文章

    239

    瀏覽量

    46702
  • 加密解密算法
    +關(guān)注

    關(guān)注

    0

    文章

    7

    瀏覽量

    1689

原文標(biāo)題:一文了解 -- bootloader

文章出處:【微信號(hào):新能源入門(mén)客,微信公眾號(hào):新能源入門(mén)客】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    什么是Bootloader 淺談STM32中bootloader的內(nèi)存分配

    1. 什么是Bootloader Bootloader是硬件啟動(dòng)的引導(dǎo)程序,是運(yùn)行操作系統(tǒng)的前提。在操作系統(tǒng)內(nèi)核或用戶應(yīng)用程序運(yùn)行之前運(yùn)行的段小代碼。對(duì)硬件進(jìn)行相應(yīng)的初始化和設(shè)定,最終為操作系統(tǒng)
    的頭像 發(fā)表于 02-15 06:10 ?1.8w次閱讀
    什么是<b class='flag-5'>Bootloader</b> 淺談STM32中<b class='flag-5'>bootloader</b>的內(nèi)存分配

    有老哥用過(guò)Bootloader嗎?小弟有問(wèn)題請(qǐng)教!

    我用CAN總線通過(guò)Bootloader發(fā)送程序,先把助流程序燒進(jìn)去之后,用CAN發(fā)送S19件之后程序可以運(yùn)行,但是我想再切換成bootloader助流程序再下載個(gè)新的程序怎么操作呢
    發(fā)表于 05-15 18:14

    了解BLDC與PMSM的區(qū)別

    參考文件:了解BLDC與PMSM的區(qū)別? ?????BLDC和PMSM電機(jī)區(qū)別???? ? STM32 FOC BLDC與PMSM的區(qū)別PS:總結(jié)語(yǔ)句用紅色標(biāo)出,看紅色字體即可。現(xiàn)代電機(jī)與控制
    發(fā)表于 08-30 08:38

    了解LVGL的學(xué)習(xí)路線

    “本文大部分內(nèi)容來(lái)自LVGL官方文檔,手翻版,如有錯(cuò)誤歡迎指正。”系列文章目錄、LVGL系列(了解LVGL的學(xué)習(xí)路線輕松
    發(fā)表于 12-07 12:55

    Bootloader是什么Bootloader的介紹和過(guò)程詳細(xì)解

    本文檔的主要內(nèi)容詳細(xì)介紹的是Bootloader是什么Bootloader的介紹和過(guò)程詳細(xì)解主要內(nèi)容包括了: 1. Bootloader簡(jiǎn)介2.幾種發(fā)布的Bootloader
    發(fā)表于 12-11 17:33 ?48次下載
    <b class='flag-5'>Bootloader</b>是什么<b class='flag-5'>Bootloader</b>的介紹和過(guò)程詳細(xì)解

    了解通信技術(shù)的常用名詞解釋

    了解通信技術(shù)的常用名詞解釋
    的頭像 發(fā)表于 06-19 17:55 ?6441次閱讀

    了解氣象觀測(cè)站是什么?

    了解氣象觀測(cè)站是什么?
    的頭像 發(fā)表于 09-12 13:17 ?1779次閱讀

    了解LED有關(guān)的光源定義?

    了解LED有關(guān)的光源定義?光源的定義是很廣泛的,LED 陣列、LED 模塊以及LED 燈都屬于光源。
    發(fā)表于 10-11 15:51 ?1603次閱讀

    了解pcb電路板加急打樣流程

    了解pcb電路板加急打樣流程
    的頭像 發(fā)表于 11-08 14:21 ?6939次閱讀

    了解 PCB 的有效導(dǎo)熱系數(shù)

    了解 PCB 的有效導(dǎo)熱系數(shù)
    的頭像 發(fā)表于 11-24 15:48 ?2921次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>了解</b> PCB 的有效導(dǎo)熱系數(shù)

    了解剛?cè)峤Y(jié)合制造過(guò)程

    了解剛?cè)峤Y(jié)合制造過(guò)程
    的頭像 發(fā)表于 12-04 16:22 ?1244次閱讀

    了解單向晶閘管的結(jié)構(gòu)及導(dǎo)電特性

    了解單向晶閘管的結(jié)構(gòu)及導(dǎo)電特性
    的頭像 發(fā)表于 12-05 15:52 ?2190次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>了解</b>單向晶閘管的結(jié)構(gòu)及導(dǎo)電特性

    了解相控陣天線中的真時(shí)延

    了解相控陣天線中的真時(shí)延
    的頭像 發(fā)表于 12-06 18:09 ?2869次閱讀

    帶你了解 DAC

    了解 DAC
    的頭像 發(fā)表于 12-07 15:10 ?1.2w次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b>帶你<b class='flag-5'>了解</b> DAC

    pcb應(yīng)變測(cè)試有多重要?了解!

    pcb應(yīng)變測(cè)試有多重要?了解!
    的頭像 發(fā)表于 02-24 16:26 ?1491次閱讀