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

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

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

MSPBoot的代碼移植流程

電子設(shè)計(jì) ? 來源:電子設(shè)計(jì) ? 作者:電子設(shè)計(jì) ? 2022-01-13 15:32 ? 次閱讀

TIMSP430支持在主程序中加載Bootloader的方式進(jìn)行在線升級操作,通過在線升級功能,客戶可以通過外部處理器隨時(shí)更新MSP430內(nèi)部的程序及Bug 的遠(yuǎn)程修復(fù)。同時(shí)TI也提供了基于MSP430G2553的參考代碼,本文詳細(xì)的介紹了如何將MSP430G2553的Bootloader移植到MSP430G2755中,使用MSP 430G2553 Host對MSP430G2755 Device進(jìn)行的升級操作。

1. MSP430 Main Memory Bootloader介紹

在MSP430G2xx 中實(shí)際上具有一個(gè)ROM版本的BSL(Bootloader) ,但是這個(gè)BSL僅僅支持外部MCU通過UART進(jìn)行在線升級,而且而且所有的協(xié)議全部固化,無法進(jìn)行修改或者更改其他接口方式進(jìn)行升級操作。所以這個(gè)需要一個(gè)可以在主程序中運(yùn)行的Bootloader,可以讓外部MCU進(jìn)行用戶自定義的升級操作。同時(shí)TI也提供了一個(gè)基于MSP430G2553的參考例程,可以通過如下鏈接進(jìn)行下載。http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSPBoot/latest/index_FDS.html

本文使用的參考代碼版本為MSPBoot_1_01_00_00,下圖為MSPBoot的整個(gè)軟件框架。

2. MSPBoot的代碼移植流程

2.1 MS430G2755 CMD 文件的產(chǎn)生

首先用Per工具產(chǎn)生CMD文件(Generating Linker Files), 通過Per的工具會(huì)產(chǎn)生兩個(gè)CMD文件,其中一個(gè)給MSP430G2755的Bootloader使用,另一個(gè)給MSP430G2755的應(yīng)用程序使用。操作指令如下,

C:\Users\a0223791\Desktop\MSP430-BSL-IAP\MSPBoot_1_01_00_00\linkerGen>perl MSPBo

otLinkerGen.pl -file lnk_msp430G2755_Uart_1KB -dev MSP430G2755 -params 0x8000 0x

FFE0 0xFC00 48 6 0x1100 0x20FF 0x80 0x1000 0x10BF

這里面有幾個(gè)重要的參數(shù)說明如下,

<0x8000 > = Start address of Flash/FRAM

對于MSP430G2553地址為0xC000,而MSP430G2755的地址需要修改為0x8000
<0xFFE0 > = Address of interrupt vector table

中斷向量表的地址0xFFE0,對于MSP430G2553和MSP430G2755相同
<0xFC00> = Start address of Bootloader

Bootloader的起始地址0xFC00,對于兩者也是相同的
<48 > =Size of the proxy table

這里的48對應(yīng)于12個(gè)中斷向量,每個(gè)中斷向量占用4Byte
<6> = Size of shared vectors

在應(yīng)用程序中一共有3個(gè)(P1/Time/Dummy)中斷向量,每個(gè)中斷向量占用2Byte,對應(yīng)參數(shù)為6
<0x1100> = Start address of RAM

RAM的起始地址也需要修改為MSP430G2755的0x1100
<0x20FF > = End address of RAM

RAM的結(jié)束地址也需要修改為MSP430G2755的0x20FF
<0x80> = Size of the stack

MSP430G2755默認(rèn)的堆棧大小為0x80
<0x1000> = Start address of info memory used for bootloader

Information的起始和結(jié)束地址MSP430G2553和MSP430G2755一致,無需修改
<0x10BF > = End address of info memory used for bootloader

Information的起始和結(jié)束地址MSP430G2553和MSP430G2755一致,無需修改

注意如上修改的參數(shù)6,及中斷向量的數(shù)量,在Bootloader中的中斷向量不需要修改,只修改MSP430G2755應(yīng)用程序App中的中斷向量即可,通過下圖可以直觀看到中斷向量的在Bin文件中的分布。

圖二 MSP430G2755中斷向量

圖三 MSP430G2755 Bin文件對應(yīng)虛擬中斷向量表

注意在這里的809C 和80E2 就對應(yīng)MSP430G2755應(yīng)用程序中的P1_Isr 和Timer_A,GPIO中斷和定時(shí)器中斷。下圖會(huì)看到在MSP430G2755 Bootloader中虛擬中斷向量表的分布。

圖四MSP430G2755 Bootloader虛擬中斷向量表

2.2 工程CMD文件添加

將2.1步驟中產(chǎn)生的CMD文件,分別添加到MSP430G2755的Bootloader及應(yīng)用程序App的工程中,如下圖所示

圖5 MSP540G2755 CMD文件

特別注意,如果使用的是TI默認(rèn)的MSP430G2553的工程,需要將原工程的器件型號選擇為MSP430G2755,并且把MSP430G2755自帶的G2553的CMD文件刪除掉,使用生成MSP430G2755的CMD文件。

2.3 應(yīng)用程序txt轉(zhuǎn)化c文件

通過CCS編譯器,編譯MSP430G2755的應(yīng)用程序,編譯完成后會(huì)產(chǎn)生一個(gè)txt文件下載格式,我們需要將這個(gè)產(chǎn)生的txt文件轉(zhuǎn)換為.c文件,這個(gè).c文件才能給主控MCU使用,通過Bootloader下載到MSP430G2755中。轉(zhuǎn)化運(yùn)行指令如下,

C:\Users\ a0223791\Desktop\MSP430-BSL-IAP\G2755_Porting\MSPBoot_1_01_00_00\430txt

_converter>430txt2C.pl App1_MSPBoot.txt AppForHostG2755.c App1

通過這步將生成的.c文件,添加到主MCU中的main函數(shù)文件路徑中,在這里我們測試的主控MCU是MSP430G2553,添加后的程序如下圖所示。

2.4 寫入CRC校驗(yàn)地址信息

通過上步我們在主控MSP430G2553中添加了需要升級的應(yīng)用程序,同時(shí)我們還要在主MCU中修改目標(biāo)升級芯片(MSP430G2755)的CRC地址信息,修改參考如下,

注意此時(shí)已經(jīng)不再需要MSPBoot用戶指導(dǎo)手冊中的CRC生成工具,進(jìn)行CRC的校驗(yàn),我們看到其實(shí)直接在主MCU中計(jì)算了CRC校驗(yàn),并且把CRC的值放到指定的位置。

2.5 修改MSP430G2755應(yīng)用程序

在這測試了將之前MSP430G2553默認(rèn)的P1.1和P1.2口UART,修改為MSP430G2755硬件P3.4和P3.5口UART接收數(shù)據(jù)的接口。實(shí)際的參考代碼如下,

圖九 MSP430G2755 UART口修改

特別注意,在MSP430G2755應(yīng)用程序App中,有兩個(gè)中斷默認(rèn)使用即P1口和定時(shí)器中斷,不能直接將P1口和Timer的中斷直接屏蔽掉,這樣會(huì)導(dǎo)致Host主控MSP430G2553升級MSP430G2553成功后,MSP430G2553并未正常的啟動(dòng)應(yīng)用程序。如果在應(yīng)用程序中不需要這兩個(gè)中斷向量,則在第一步產(chǎn)生CMD文件的過程中需要修改<6> = Size of shared vectors 這個(gè)參數(shù)。

3.小結(jié)

通過以上步驟我們完成了從MSP430G2553到MSP430G2755Bootloader的移植,那我們總結(jié)MSP430G2755 Bootloader和應(yīng)用程序App的整個(gè)程序架構(gòu),分析如下。

我們通過工具讀取了主程序移植了BootLoader的MSP430G2755的總代碼,其中MSP430G2755存儲Flash地址分析如下

從0x8000-0x8100為應(yīng)用程序

從0xFBC0-0xFBF0 為虛擬的中斷向量表

從0xFC00-0xFFD0 為Bootloder

從0xFFE0-0xFFF0 為真實(shí)的中斷向量表

審核編輯:何安

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

    關(guān)注

    0

    文章

    341

    瀏覽量

    10021
收藏 人收藏

    評論

    相關(guān)推薦

    STM32連接機(jī)智云,代碼移植,NTP實(shí)時(shí)時(shí)間獲?。ㄒ唬?/a>

    目錄一、機(jī)智云介紹二、固件下載三、項(xiàng)目例程下載四、代碼移植五、代碼編寫準(zhǔn)備(已配置完畢,正式開始編寫代碼)六、設(shè)備配對與連接七、NTP(網(wǎng)絡(luò)時(shí)間協(xié)議)實(shí)現(xiàn)八、網(wǎng)盤資料鏈接機(jī)智云介紹廣州
    的頭像 發(fā)表于 11-19 01:01 ?315次閱讀
    STM32連接機(jī)智云,<b class='flag-5'>代碼</b><b class='flag-5'>移植</b>,NTP實(shí)時(shí)時(shí)間獲?。ㄒ唬? />    </a>
</div>                            <div   id=

    代碼解析工具與自動(dòng)化流程圖生成解決方案

    ? 摘要:CasePlayer2是一款強(qiáng)大的源代碼解析工具,專門設(shè)計(jì)用于分析ANSI C、C、C++以及匯編語言源代碼,并自動(dòng)化地生成流程圖等文件。該工具集成了多種功能,包括MISRA-C規(guī)范檢查
    的頭像 發(fā)表于 10-10 13:40 ?248次閱讀

    基于機(jī)智云移植STM32L496G代碼移植

    代碼詳解-機(jī)智云(gizwits.com)在移植的過程中遇到的一些問題,這里我將重構(gòu)一下,大致內(nèi)容跟文檔差不多,但是根據(jù)文檔的操作,會(huì)產(chǎn)生一些奇怪的報(bào)錯(cuò),這里可以根
    的頭像 發(fā)表于 09-20 08:05 ?441次閱讀
    基于機(jī)智云<b class='flag-5'>移植</b>STM32L496G<b class='flag-5'>代碼</b><b class='flag-5'>移植</b>

    【GD32 MCU 移植教程】5、GD32E230 系列移植到 GD32F330 系列

    移植到 GD32F330 系列的需求,本文 檔專門針對既有的 GD32E230 代碼如何移植到 GD32F330 做一個(gè)詳細(xì)的介紹;
    的頭像 發(fā)表于 09-03 10:05 ?1219次閱讀
    【GD32 MCU <b class='flag-5'>移植</b>教程】5、GD32E230 系列<b class='flag-5'>移植</b>到 GD32F330 系列

    LKT(LCS)代碼移植芯片優(yōu)勢

    所謂代碼移植就是客戶可以把自定義的程序一部分關(guān)鍵代碼函數(shù)移植到加密芯片中運(yùn)行。用戶采用標(biāo)準(zhǔn)C語言編寫代碼,通過KEIL C編譯器,編譯并下載
    的頭像 發(fā)表于 08-22 10:03 ?794次閱讀

    基于MM32F5270的Ethernet實(shí)現(xiàn)LwIP協(xié)議棧移植

    LwIP是輕量化的TCP/IP協(xié)議,由瑞典計(jì)算機(jī)科學(xué)院(SICS)的Adam Dunkels 開發(fā)的一個(gè)小型開源的TCP/IP協(xié)議棧。LwIP具有高度可移植性、代碼開源,提供了三種編程接口(API):RAW API、NETCONN API 和 Socket API,用于與
    的頭像 發(fā)表于 06-21 10:28 ?1230次閱讀
    基于MM32F5270的Ethernet實(shí)現(xiàn)LwIP協(xié)議棧<b class='flag-5'>移植</b>

    CC2500和CC1101移植說明

    主要通過如何移植、移植注意、關(guān)于芯片配置、如何生成導(dǎo)出配置四大步驟來說明CC2500和CC1101移植
    的頭像 發(fā)表于 06-15 14:32 ?627次閱讀
    CC2500和CC1101<b class='flag-5'>移植</b>說明

    代碼移植后數(shù)據(jù)打印不完全是什么原因?

    當(dāng)前我使用的是TWAI驅(qū)動(dòng)功能,例程測試下來沒問題,數(shù)據(jù)打印完善,但是我將代碼twai_self_test例程代碼移植自己的工程之中就會(huì)出現(xiàn)數(shù)據(jù)打印不完全的現(xiàn)象。請問是什么原因。
    發(fā)表于 06-14 06:30

    第三講:單片機(jī)STC89C52+RA8889驅(qū)動(dòng)控制彩屏 代碼的壓縮(Keil編譯器)

    51單片機(jī)驅(qū)動(dòng)控制芯片RA8889,源代碼函數(shù)冗余較多,移植時(shí)可能會(huì)碰到輸出程序過大,這里介紹壓縮代碼的方法。
    的頭像 發(fā)表于 06-05 11:05 ?574次閱讀
    第三講:單片機(jī)STC89C52+RA8889驅(qū)動(dòng)控制彩屏 <b class='flag-5'>代碼</b>的壓縮(Keil編譯器)

    第二講:單片機(jī)STC89C52+RA8889驅(qū)動(dòng)控制彩屏 代碼移植介紹

    介紹51單片機(jī)如何移植RA8889的代碼進(jìn)行彩屏驅(qū)動(dòng)與控制
    的頭像 發(fā)表于 06-04 10:36 ?1011次閱讀
    第二講:單片機(jī)STC89C52+RA8889驅(qū)動(dòng)控制彩屏 <b class='flag-5'>代碼</b><b class='flag-5'>移植</b>介紹

    手把手帶你移植HAL庫函數(shù)

    在嵌入式系統(tǒng)開發(fā)中,硬件抽象層(HAL,HardwareAbstractionLayer)庫的使用可以極大地簡化開發(fā)過程,提高代碼的可移植性和維護(hù)性。本文將詳細(xì)介紹如何快速搞懂HAL庫的移植,幫助
    的頭像 發(fā)表于 05-18 08:04 ?1956次閱讀
    手把手帶你<b class='flag-5'>移植</b>HAL庫函數(shù)

    【鴻蒙】標(biāo)準(zhǔn)系統(tǒng)移植指南

    標(biāo)準(zhǔn)系統(tǒng)移植指南 本文描述了移植一塊開發(fā)板的通用步驟,和具體芯片相關(guān)的詳細(xì)移植過程無法在此一一列舉。后續(xù)社區(qū)還會(huì)陸續(xù)發(fā)布開發(fā)板移植的實(shí)例供開發(fā)者參考。 定義開發(fā)板 本文以
    的頭像 發(fā)表于 02-27 14:36 ?929次閱讀
    【鴻蒙】標(biāo)準(zhǔn)系統(tǒng)<b class='flag-5'>移植</b>指南

    移植RT-THREAD在stm32開發(fā)板上,使用rt_kprintf不能正常打印的原因是什么?怎么解決?

    開發(fā)環(huán)境: STM32CubeMX 用于生成代碼; STM32CubeIDE用于調(diào)試代碼; 移植過程: 使用STM32CubeMX來移植RT-Thread;
    發(fā)表于 02-20 06:24

    求助,如何將C++代碼從GNU移植到Tasking編譯器?

    使用了使用任務(wù)編譯器的 Aurix Development Studio IDE。 在將代碼從 GNU 編譯器移植到 TASKING 編譯器的過程中,標(biāo)準(zhǔn)定義庫存在多個(gè)問題(編譯錯(cuò)誤)。 您是否已經(jīng)擁有
    發(fā)表于 01-31 07:29

    如何移植愛星云的源碼

    上次已經(jīng)給大家講了如何搭建中間件SDK(Ai-WB2-12F使用安信可中間件接入愛星云,遠(yuǎn)程點(diǎn)個(gè)燈——第一篇)。經(jīng)過上次的帖子,小伙伴們想必已經(jīng)完成一個(gè)新項(xiàng)目的添加,并使用WB2編譯成功,今天講如何移植愛星云的源碼。 在正式開始之前,先介紹一下設(shè)備上云的流程。
    的頭像 發(fā)表于 01-07 11:10 ?624次閱讀
    如何<b class='flag-5'>移植</b>愛星云的源碼