STM32はBootLoader機能を実装しています(ソースコードが提供されています)



Stm32 Implements Bootloader Function



この記事は、主にSTM32BootLoader機能を実装するために使用されます。シリアルポートコマンドライン機能をサポートし、ブートパラメータ領域を使用してカーネルを起動するために使用でき、シリアルポートアップグレードカーネルお​​よびその他の機能をサポートします。

コードのダウンロードパス: https://github.com/lza1205/n_boot



原則について話させてください:

STM32オンチップフラッシュ、一般アドレスは0x8000000です。電源投入後、システムはアドレス0x8000000からプログラムの読み取りと実行を開始します。



したがって、BootLoaderはアドレス0x8000000に配置され、0x8003000はブートパラメーターを格納します。次に、カーネル(AP)プログラムをアドレス0x8003800に配置できます。したがって、オンチップフラッシュ全体の構造は次のとおりです。

ブートパラメータ領域の内容:



/* boot system parameters */ struct boot_var{ INT32U start_timeout //Kernel start delay INT32U mach //Machine ID INT32U boot_addr_base //boot address INT32U boot_size //boot code segment size INT32U boot_var_addr_base //boot parameter address INT32U boot_var_size //boot parameter segment size INT32U kernel_addr_base //AP kernel address }

STM32ブートは0x8003800スタートアッププログラムコードにジャンプします:

/************************************************************************ Time: 2014.3.23 Author: lza1205 Boot based on stm32 This file is cpu-related code, which needs to be modified on different platforms ************************************************************************/ uint8_t __cpu_goto_app(uint32_t Addr) { pFunction Jump_To_Application __IO uint32_t JumpAddress if (((*(__IO uint32_t*)Addr) & 0x2FFE0000 ) == 0x20000000) { /* The address must be offset by 4 */ JumpAddress = *(__IO uint32_t*) (Addr + 4) Jump_To_Application = (pFunction) JumpAddress /* Use app stack */ __set_MSP(*(__IO uint32_t*) Addr) /* Jump to the user function entry address */ Jump_To_Application() } return 1 }

コードカタログファイルの説明:

boot.c-stm32BootLoader全体のコアコードです。コア関数はn_boot_memuで、これはブーツ全体への入り口です。機能全体を理解することで、ブートプロセス全体を理解できます。

cpu_c.c-特定のチップに関連し、CPU関連のコードを移植する必要があります。主に、カーネルにジャンプするために使用されるuint8_t __cpu_goto_app(uint32_t Addr)関数を実現するためです。

command.c-ubootと同様に、シリアルポートコマンドライン機能を実現します。いくつかのシリアルポートコマンドを入力して、操作を実現できます。現在サポートされているシリアルコマンドは次のとおりです。

flash.c-オンチップフラッシュ関連の操作、読み取りおよび書き込み消去などを実現します。

xmodem.c、xmodem_crc.c、xmodem_hw.c-シリアルポートアップグレードカーネルの機能を実現します。

シリアルポートのEnterキーを押したままにして、電源を入れ、sと入力して、binファイルのアップグレード機能を開始できます。 secureCRTは、送信Xmodemを選択します。次に、コアファイルを選択し、[送信]をクリックしてアップグレードします。