<概要>
このページは、シリアルダウンローダーが起動している状態のボードへプログラムをRAM上へ送信して実行する一例となります。
<補足>
実行プログラムデータの作成は flashloader の作成手順が参考となります。
(MCUBootUtility が flashloader をロードしてジャンプしている動作を真似ています。)
しかしながら、elftosb.exe の使用は、.ld ファイルの編集無しでは .data セクションを吐き出さないので、
簡単化のために直接 Image Vector Table と Boot Data を埋め込む方法にしました。(2025/3/24 変更点)
<手順>
-
実行プログラムの作成
ここでは SDK の example の demo_app の iled_blinky を使用します。
-
Import SDK example(s)... で、demo_app の iled_blinky をインポートします。
-
ivt_bd.cを source フォルダに作成します。
-
property > C/C++ Build > Settiongs > Tool Settings > MCU C compiler > Preprocessor で、
XIP_EXTERNAL_FLASH=0, XIP_BOOT_HEADER_ENABLE=0 にします。
-
property > C/C++ Build > Settiongs > Tool Settings > MCU Linker > Managed Linker Script で、
Link application to RAM のチェックボックスをチェックします。
-
ビルドします。
-
作成された Binaries > evkmimxrt1010_iled_blinket.axf を Project Explorer で右クリックして、
Binary Utilities > Create binary を実行します。
-
作成された evkmimxrt1010_iled_blinky.bin がロードするプログラムです。
-
.map ファイルを参照して、image_vector_table のアドレスを控えておきます。
(今回の生成では、0x2000406c でした。)
-
ロードプログラムの作成
ここでは Visual Studio 2022 を使用してコンソールアプリを作成します。
-
Visual Studio 2022 の新しいプロジェクトの作成でコンソールアプリケーションのプロジェクトを作ります。
-
プログラムを次の様に編集します。
-
ビルドします。
-
作成されたプログラム(ここでは LoadRunner.exe)が流し込み役のプログラムです。
-
ロード実行
ここでは、ロードプログラムで実行プログラムを転送実行する手順を示します。
-
EVK ボードの SW8 を Serial Downloader: 0001 にセットして、
Debug USB ポート J41 と PC とを繋ぎます。
-
流し込み役のプログラムと実行プログラムを同一フォルダに置いて、
コマンドラインで次のように実行します。(com3 と 0x2000406c の部分は環境、生成に応じて変えてください。)
LoadRunner.exe com3 0x20000000 0x2000406c evkmimxrt1010_iled_blinky.bin
-
EVK ボードの USER LED が点滅すれば成功です。
<ご注意>
-
EVK の USB OTG ポート J9 が PC 接続されていると Serial Downloader が USB HID で有効化されてしまいますので、
UART 接続の Serial Download が出来なくなります。
Reference Manual では、Poll LPUART 1 > Poll USB OTG1 の順のフローチャートが書かれていますが、
タイミングについては記載されていないので、USB が接続されていると UART での流し込みができるのかどうか?。
(RT1010のみリセットがかかってしまった時など。)
-
Reference Manual では、9.1 Chip-specific Boot Information に LPUART として、LPUART1_TX(GPIO_10)
LPUART1_RX(GPIO_09)のみリストされていますが、Data Sheet の方では、5.2 Boot device interface allocation で、
lpuart1.CTS_B(GPIO_08)、lpuart1.RTS_B(GPIO_07)が加えられています。EVK では CTS, RTS 信号は CODEC に繋げられていて、
特にケアされていない様子で、 UART の Serial Downloader も動いてはいるので実際はどうなのかしら?。
(RTSは出力なので信号がぶつかるのは嫌だし、CTSがネゲートされていて応答が返らないことがあるのかとか。)