Page 2 ワークスペースはプロジェクト管理の最上位であり IAR Embedded Workbench を起動すると自動的にオープンします ワークスペースには複数のプロジェクトを登録することができるので ここではメインのアプリケーションとブートローダのプロジェクトを登録します このワークスペース

Similar documents
PowerPoint Presentation

1. 概念 STM32F4 Discovery 基板は Mini USB を接続して デバッグやプログラムの書き込みができるようになっています 通常は CPU の 0x 番地からプログラムを実行します では なぜわざわざこのプロジェクトの雛形を使用して CPU の 0x

1. 新規プロジェクト作成の準備新規プロジェクトのためのフォルダを用意して そこにプロジェクトを作成します [ 新しいフォルダー ] をクリックして希望のフォルダに新しいフォルダを作成します この例では TrST_F401N_BlinkLD2 というフォルダを作成しました TrST_F401N_Bl

PowerPoint Presentation

Nios II Flash Programmer ユーザ・ガイド

RL78開発環境移行ガイド R8C/M16C, H8S/H8SXからRL78への移行(統合開発環境編)(High-performance Embedded Workshop→CS+)

Application Note Application Note No. ESC-APN Document No.: ESC-APN adviceluna Linux デバッグ手順 (MIPS コア編 ) はじめに adviceluna Linux デバッグ手順 ( 以

(6) コンボドライブのドライブ文字の変更 コンピュータの管理 ウィンドウの右下側フレームの CD-ROM 0 DVD (E:) と書かれた箱 ( 図 02-2) にマウスのポインタを合わせ, 右ボタンをクリックしてメニューを表示する メニューから ドライブ文字とパスの変更 (C)... を選択する

AN1526 RX開発環境の使用方法(CS+、Renesas Flash Programmer)

第 1 章 : はじめに RogueWave Visualization for C++ の Views5.7 に付属している Views Studio を使い 簡単な GUI アプリケーションの開発手順を紹介します この文書では Windows 8 x64 上で Visual Studio2010

内容 1 はじめに 本ガイドの目的 本ガイドの対象者 対象製品 表記について リンカ設定ファイル例 ソースファイル例 名前の付け方 リンカオプションとリンカ設定ファ

AN1609 GNUコンパイラ導入ガイド

Microsoft Word - Mac版 Eclipseの導入と設定.docx

内容 1. 仕様 動作確認条件 ハードウェア説明 使用端子一覧 ソフトウェア説明 動作概要 ファイル構成 オプション設定メモリ 定数一覧 変数一

インテル(R) Visual Fortran コンパイラ 10.0

PowerPoint プレゼンテーション

TOPPERS活用アイデア・アプリケーション開発

ブート領域、フラッシュ領域の分割方法 RL78ファミリ用Cコンパイラ CC-RL

Microsoft Word - tool01.doc

プログラミング基礎

MMUなしプロセッサ用Linuxの共有ライブラリ機構

IAR Embedded Workbench for ARM

著作権および商標 この文書には が所有権を持つ機密事項が含まれます この資料のいかなる部分も許 可無く複製 使用 公開することを固く禁じます 本書は の従業員および許可された 取引先だけに使用が認められています 本書で提供されたデータは正確で信頼性の高いものですが このデータの使用について株式会社

Microsoft Word - ALT0982_program_epcs_by_niosii_v10.doc

開発環境構築ガイド

作業環境カスタマイズ 機能ガイド(応用編)

BizBrowser SmartDevice Android開発用スタートアップガイド

MSP430 CCSv5 を使い Flash Memory 内容と version 情報を確認する方法 ( テクニック編 ) Rev: PIC Trout 今回は 下記の2 件について説明します 1) CCSv5 を使用して MSP430 の Flash Memory 内容を

2015/04/01 改定 オムロン DeviceNet ユニット CJ1W-DRM21 に関するコンフィグレーション作業について 1. 概要 DeviceNet ユニット CJ1W-DRM21 を装着したオムロン製 CJ2 シリーズと WAGO-I/0-SYSTEM DeviceNet 対応バスカ

開発環境構築ガイド

Studuinoライブラリ環境設定Mac編

1. USB の VCP( 仮想 COM ポート ) について USB の VCP( 仮想 COM ポート ) は USB を非同期シリアル通信として使用するための USB のドライバです PC には VCP ドライバをインストールする必要があります USB の VCP( 仮想 COM ポート )

ダウンロードページアップデートマニュアル.ppt

改訂履歴 改訂日付 改訂内容 2014/11/01 初版発行 2017/01/16 Studuino web サイトリニューアルに伴う改訂 2017/04/14 Studuino web サイトリニューアルに伴う改訂 2018/01/22 ソフトウェア OS のバージョンアップに伴う改訂

Microsoft Word - EFI_Framework_Debug_JP.doc

目次 第 1 章概要....1 第 2 章インストールの前に... 2 第 3 章 Windows OS でのインストール...2 第 4 章 Windows OS でのアプリケーション設定 TP-LINK USB プリンターコントローラーを起動 / 終了するには

LabVIEW RTのインストールと設定

RX210 グループ MTU2 を用いた相補 PWM モードの波形出力 要旨 本サンプルコードでは MTU2 を用いて相補 PWM モードの波形を出力する方法について説 明します 対象デバイス RX210 1 / 41

実習を行う上での心構えについて

発環境を準備しよう2 章開Eclipseをインストールしようそれでは Eclipseをセットアップしましょう Eclipseは Eclipse Foundationのサイトからダウンロードできます ダウンロードのページを開くと いく

S21/S31 Offline Software V2.1 リリースノート

Bluetooth MIDI 接続ガイド

MAPインストーラー起動時のエラーメッセージへの対処方法

スライド 1

1. プログラム実行時の動作プログラムを実行すると以下のように動作します 1) NUCLEO-F401RE 上の LED LD2( 緑 ) が 200mSec 間隔で点滅します 2. プロジェクトの構成 2.1. プロジェクト F401N_BlinkLD2 の起動画面 TrueSTUDIO で作成し

図 1 アドインに登録する メニューバーに [BAYONET] が追加されます 登録 : Excel 2007, 2010, 2013 の場合 1 Excel ブックを開きます Excel2007 の場合 左上の Office マークをクリックします 図 2 Office マーク (Excel 20

CoIDE 用 F4D_VCP の説明 V /07/05 USB の VCP( 仮想 COM ポート ) による非同期シリアル通信を行うプログラムです Free の開発ツール CoIDE で作成した STM32F4 Discovery 用のプロジェクトです プログラムの開始番地は 0x

PowerPoint プレゼンテーション

RH850の割り込み/例外実現方法 CC-RHアプリケーションガイド

Windows10 における Ac6 System Workbench for STM32 のダウンロードとインストール V /06/01 Windows10 の PC で Ac6 System Workbench for STM32 のダウンロードとインストールの方法について説明しま

24th Embarcadero Developer Camp

ランタイム版 Pro 版共通 症例登録システム 2018/12/11 Q & A 目次 1. 起動時のエラー... 2 Q11. " ファイル jsgoe_data3.fmp12 を開くことができません" と表示されます (Windows) 2 Q12. ショートカットから起動できません (Wind

AI1608AYUSB手順V3

ライカ D-LUX 4 ファームウェア 2.20 ファームウェアをインストールすることで ライカ D-LUX 4 の機能を下記のようにアップデートできます アップデート情報 対象機種 LEICA D-LUX 4 アップデートバージョン Ver 2.20 アップデートファイル名 / サイズ 更新日 D

Eclipse マニュアル <作成目的> Eclipse のインストール方法などを紹介したページはいろいろありますが 専門用語がわからない初心者でもわか りやすく Eclipse のインストール方法 基本操作などをまとめたマニュアル作成を目的としています <目次> 1 Eclipse のインストール

LPV2-TX3P/TX1/T1ユーザーズマニュアル

始める スタート > 全てのプログラム > Cypress > PSoC Creator 2.0 > PSoC Creator 2.0 をクリックします プロジェクトを作成する / 開く Start Page の "Create New Project" をクリックし 要求されたプロジェクト情報を入

1. ST-LINK Utility のダウンロード Windows7 PC にインストールする場合について説明します 1.1. STMicroelectronics のサイト STMicroelectronics のサイトを開きます ここに ST-LINK と入力して検索します ( 右側の虫眼鏡を

Microsoft Word - XOOPS インストールマニュアルv12.doc

改訂履歴 改訂日付 改訂内容 2014/11/01 初版発行 2017/01/16 Studuino web サイトリニューアルに伴う改訂 2017/04/14 Studuino web サイトリニューアルに伴うアクセス方法の説明変更 2018/01/22 Mac 版インストール手順変更に伴う改訂

2 / 8 オンデマンドダウンロード機能 を使用するときに次の制約があります 1. インターネットに接続されていない ( オフライン ) 場合は OneDrive エリアのみにあるファイルを開くことはできない 2.OneDrive エリアからダウンロードが完了するまでいくらか待たされるし ( 特に大

『テクノス』V2プログラムインストール説明書

Microsoft Word - 補足説明_Win7_Server2008R2__R1.doc

自己診断プログラム_基本設定

Microsoft PowerPoint - kougi2.ppt

adviceシリーズスタートアップガイド(ARM9編)

1. Microsoft Loopback Adapter のインストール 1) ノートパソコンにおいて そのパソコンの管理者アカウントによりログオンします 2) [ スタート ] > コントロールパネルを開きます 3) 表示方法 : カテゴリの場合には ハードウェアとサウンド > デバイスマネージ

Microsoft PowerPoint - Borland C++ Compilerの使用方法(v1.1).ppt [互換モード]

目次 1. 教育ネットひむかファイル転送サービスについて ファイル転送サービスの利用方法 ファイル転送サービスを利用する ( ひむか内 ) ファイル転送サービスへのログイン ひむか内 PCでファイルを送受信する

SystemDirector Developer's Studio(V3.2) 適用ガイド

Ontrack EasyRecovery 11 製品アクティベーション手順書

統合開発環境 High-performance Embedded Workshop V へのリビジョンアップのお知らせ

MMO ゲームパッド JC-DUX60BK ドライバー設定ガイド このドライバー設定ガイドは JC-DUX60BK に付属のドライバーを使った 各ボタンやスティックへの機能割り当てや連射の設定などの操作について説明しています ドライバーのインストール方法については JC-DUX60BK に付属のユー

内容 1 はじめに インストールの手順 起動の手順 Enterprise Architect のプロジェクトファイルを開く 内容を参照する プロジェクトブラウザを利用する ダイアグラムを開く 便利な機能.

Shareresearchオンラインマニュアル

どこでも写真管理 Plus (ios 版 ) 操作手順書 ( 黒板作成 連携ツール使用時 ) EX-TREND 武蔵の写真管理 黒板作成 連携ツール どこでも写真管理 Plus でデータを連携して 電子小黒板機能付き工事写真を撮影する手順を解説します 解説内容がオプションプログラムの説明である場合が

目次 1. 動作環境チェック 動作必要環境 Java のインストール Java のインストール Firebird のインストール Firebird のインストール Adobe Reader のインストール

1 1 Arduino とは Arduino アルドゥイーノ は ワンボードマイコンの一種で オープンソースハードウェアであ り 組み立て済みの基板を購入することもできるほか 誰でも自分の手で Arduino を組み立てる ことができます USBコネクタでPCと接続して利用します デジタルポートとア

3 アドレスバーに URL を入力し ( 移動ボタン ) をタップします 入力した URL のホームページに移動します ネットワークへのログオン 画面が表示された場合は ユーザー名 を確 認し パスワード を入力して OK をタップしてください ホームページがうまく表示されないときは Opera B

V-Client for Mac ユーザーズガイド

プロッタドライバインストールガイド プロッタドライバインストールガイド <OPS628>-Windows 7- <OPS628> Windows 7 環境 本説明書は グラフテックのホームページよりドライバをダウンロードして コンピュータにインストールする手順を説明したものです 内容をご確認のうえ

Transcription:

By Shawn Prestridge, IAR Systems Software Inc. Co-author Colin Flournoy, IAR Systems Software Inc. IAR Embedded Workbench と STM32F207ZG-SK を 使用したブートローダの構築の実例 Download application project (zip) ソフトウェアが複雑になるにつれ 出荷後に発生する問題に対処するため ファームウェアはフィールドで自分自身を書き換えできるように設計されるようになりました ファームウェアの書き換えはブートローダが行います この記事では IAR Embedded Workbench と評価キット STM32F20ZG-SK を使用してブートローダを構築する方法や問題点について解説します ブートローダに要求される機能は様々で 設計の実際について議論することは難しいと言えます 書き換えのためのデータを取り込む方法ひとつをとっても様々で マイコンの周辺デバイスの USB 同じく周辺デバイスの Ethernet を使用した TCP/IP または古めかしい RS232C などだったりします ブートローダはいろいろな場面で必要になる機能なので 設計を始める前に 使用するマイコンで使えるブートローダのサンプルがすでに作られていないかどうか マイコンメーカに確かめてみることをお勧めします もしそれが手に入るなら ブートローダの構築の手間をかなり省くことができます 選択するアーキテクチャによっても微妙な差があります 例えば デバイスが ARM か Cortex-M3 かでリセットベクタが異なります またデバイスメーカにより ベクタテーブルを再配置できるもの できないものがあります ここでは 話を簡単にするために ひとつのデバイスとその評価キットを実例とすることにします 評価キット STM32F20ZG-SK は Cotex-M3 デバイスを搭載しています この記事ではこのボードが手元にあり デバイスにプロジェクトをダウンロードする方法をすでに理解していて EWARM のデバッガ C-SPY のマクロファイルシステムが デバッガをスタートする前にどのようにレジスタの値などを操作することができるかなどについて知識があることを前提とします 図 1: STM32F207ZG-SK 評価キット

Page 2 ワークスペースはプロジェクト管理の最上位であり IAR Embedded Workbench を起動すると自動的にオープンします ワークスペースには複数のプロジェクトを登録することができるので ここではメインのアプリケーションとブートローダのプロジェクトを登録します このワークスペースの中で どの順番でプロジェクトをビルドするか決めることができます ここでは メインのアプリケーションプロジェクト ( キット用に用意されたプロジェクトをベースにしたもので プロジェクト名は LCD) ブートローダの順にビルドすることにします なぜなら ブートローダをビルドする時にアプリケーションのイメージデータをロードする予定だからです これは IAR Embedded Workbench IDE のバッチビルドの機能により実現でき プロジェクトメニュー > バッチビルドをクリックすることで起動することができます ( 図 2 参照 ) バッチを編集し ビルドするプロジェクトを追加したり プロジェクトの順番を変えたりすることも マニュアルでビルドを行うこともできます 図 2: バッチビルド アプリケーションとブートローダを同一のプロジェクトに置くことはどうしてもできません 1つの理由は IAR Embedded Workbench が ( 特に ブートローダとアプリケーションのスタートアドレスが離れている場合 ) 非常に大きなバイナリファイルを作ってしまうことです ブートコードの最後とアプリケーションの最初のコードの間に周辺デバイスのアドレスがあると 空きエリアのデータを周辺デバイスに書こうとしてフラッシュローダが誤動作することがあります このことが問題にならないとしても ブートローダはコードを受け取る静的に配置された配列を持つのでアプリケーションの走行時に必要なメモリ領域を圧迫してしまいます 2つの独立したプロジェクトにすることにより リンカは効果的にメモリを配置することができます もう1つの理由は ブートローダとアプリケーションが同じプロジェクトに属していると これらを別々に変更することができないことです つまり 片方を変更するということは もう片方も変更することになり デバッグに時間がかかってしまうことです 基本的な設定この例では メインのアプリケーションプロジェクトを特定のアドレス ( この例では 0x0801000) より上側に置き ブートローダを下側に置きます (0x08000000 より開始 ) 一度この設定を行うと ブートローダ プロジェクトのバイナリイメージを作成することができます この方法の有利な点は ブートローダのバイナリイメージをアプリケーションに取り込むことができ デバッガでアプリケーションとブートローダを同時にダウンロードするこができることです まとめると

Page 3 ブートローダのプロジェクト : 1. ブートローダのプロジェクトを作成します 2. ブートローダのコードと固定データをブートローダ用に確保した空間 ( このプロジェクトでは 0x08000000 と 0x08000FFF の間 ) に配置します ( 図 3 参照 ) 図 3: リンカの設定 3. ブートローダ プロジェクトの出力コンバータ ( プロジェクトメニュー > オプション > 出力コンバ ータ > 出力 ) を バイナリファイルを生成するように設定します ( 図 4 参照 ) 4. バイナリファイルは メモリの内容のそのもので フォーマットやアドレス情報を含みません 図 4: 出力コンバータの設定

Page 4 アプリケーションプロジェクト : 1. メインのアプリケーションのプロジェクトを作成します (app) この記事では STM32F207ZG- SK 用評価キットに付属のサンプルプロジェクトである LCD プロジェクトを使用します 2. プログラムコードと固定データを アプリケーション用に確保した場所に配置します この例では ブートローダの次の部分 0x08001000 からフラッシュメモリの最後 0x080FFFFF(STM32F207ZG の場合 ) までです 次にリンカ設定ファイル (.icf) に以下の行を追加し place at address mem:0x08000000 { section.bootloader };.bootloader セクションを配置します この行は フラッシュメモリの最初の部分に ブートロー ダのバイナリイメージを配置することを意味します ( 図 5 参照 ) 図 5: リンカの設定 2 3. プロジェクトメニュー > オプション > リンカ > 入力と選び ブートローダ プロジェクトで作成したバイナリイメージを読み込むように設定します リンカはバイナリイメージを定数の配列のように扱い リンカ設定ファイルで指定したアドレスにそのままコピーします さらにこのバイナリイメージのシンボル名と所属するセクション名を設定し このシンボルが他の部分から参照されていなくても配置されるように設定します この記事のプロジェクトでは シンボル名を bootloader 所属するセクション名を.bootloader アラインメントは 4 とします ( 図 6 参照 )

Page 5 図 6: リンカの入力 デバッグアプリケーションのデバッグは通常の場合と同じですが デバイスとアーキテクチャの違いにより多少の変更が必要になる場合があります デバッグを開始する前にもう一度整理すると以下のようになります 1. アプリケーションの追加入力である ローバイナリファイルを生成するブートローダ プロジェクトを作成します 2. アプリケーションのプロジェクトは プロジェクトオプションでこのローバイナリファイルを追加入力とするように設定します 3. 両方のプロジェクトのリンカ設定ファイルは コードとデータが重なり合わないように修正します それから デバッグ対象がアプリケーションだけでなくブートローダも同時にデバッグしなくてはならないことを デバッガに知らせなくてはなりません STM32F2xx にはベクタテーブルのベースアドレスを指定するレジスタがあり ブートローダからアプリケーションにジャンプする時に このレジスタを書き換えてベクタテーブルを持ち替えます さて デバッグ対象のプログラムはアプリケーションのリセットベクタのアドレスではなく ブートローダのリセットベクタよりスタートすることをデバッガに知らせなくてはなりません これは デバッガのマクロファイルを呼び出すことにより実現できます (.mac) 以下が デバッガに対して ブートローダを先に実行し 後からアプリケーションに移動することを知らせるマクロです この記事よりリンクされているプロジェクトサンプル内には test.mac というマクロファイルが含まれていて アプリケーションのプロジェクトオプションに追加されています マクロファイルの名前は 拡張子が.mac であれば自由につけることができます このファイルを使用して デバッガに対し デバッグ対象のプログラムがブートローダにあるリセットベクタにある Reset_Handler というアドレスからスタートすることを知らせます このファイルで スタックポインタの初期化も行います 下記が このマクロファイルの内容で 以上のことをどのように行っているか理解することができます

Page 6 // test.mac ファイル execuserreset() { MSP = *(int*)0x08000000; } PC = *(int*)0x08000004; // スタックポインタをブートローダのベクタテーブルの先頭アドレスにセット // プログラムカウンタをブートローダのリセットハンドラの先頭アドレスにセット マクロファイルの編集が終わったら プロジェクトメニュー > デバッガ > 設定タブのページでプロジェクトに追加し 有効にします プログラムのテストの最初のステップは ブートローダがデバッガ内で正常に動くことを確認することです この目的のために 下の図の run to main のチェックははずしておきます 図 7: デバッガの設定アプリケーション (app) には ローバイナリイメージを追加済みですが ローバイナリイメージのデバッグ情報が含まれていません デバッグ情報を追加してソースレベルデバッグを可能にするには プロジェクトメニュー > オプション > デバッガ > イメージタブを開き ブートローダの.out ファイルを指定します.out ファイルには実行コードだけでなくデバッグ情報も含まれています この.out ファイルは通常プロジェクトファイル \ ビルド構成名の下の exe フォルダに作成されます デバッグ情報をのみが必要なので デバッグ情報のみ のチェックを入れて オフセットは 0 にします

Page 7 図 8 : デバッガ イメージの設定 設定が済んで ダウンロードしてデバッグ アイコンをクリックすると フラッシュメモリをプログラム中です のウィンドウが2 回表示されます これは正常な動作で アプリケーションだけでなくフラッシュローダも書き込まれていることを表わしています 次に マクロファイルにより プログラムカウンタがブートローダのベクタテーブルのリセットアドレスに設定されます ブートローダからシングルステップでアプリケーションプロジェクトに入ることは 問題なくできます アプリケーションプロジェクトを経由して 2つのプロジェクトをダウンロードしたことを思い出してください これは ブートローダのソースファイルではなく アプリケーションのソースファイルに直接アクセスしていることを意味します デバッグ中 ブートローダのソースファイルをクリックすると ビルド設定ないしプロジェクトを切り替えるかどうか聞かれます これは 両方のプロジェクトのデバッグをしたいのですから 好ましいことではありません これを避けるには ブートローダのコード (main 関数 ) に到達するまでアセンブラのシングルステップで進むか 命令コードのところにブレークポイントを置きます 表示メニュー > ブレークポイントを開き ウィンドウ上で右クリックし 新規ブレークポイントを選択し 新しい コードブレークポイント を追加します

Page 8 図 9: コードブレークポイント ブートローダ プロジェクトの main の最初の部分はブートローダ プロジェクトのマップ (.map) ファ イル内で表示されますから 適切なブレークポイントを選択するのに役立ちます これがうまくいくと run アイコンをクリックするとブートローダのメイン関数のどこかでブレークすることができます ブートローダをどう実装するか の議論の範囲は広いのですが デモンストレーションの目的で 一番簡単なサンプルを作成しました これは 入力の状態によらず 常にアプリケーションにジャンプします ジャンプは アプリケーションのリセットハンドラを指す関数へのポインタを介して行われます この部分のコードは 以下に含まれます //in bootloader main.c int main(void) { //jump to application via function pointer } int * address = (int *)0x08001004; set_msp(*(int*)0x08001000); *(int*)0xe000ed08 = 0x08001000; ((void (*)())(*address))(); while(1){ }; // アプリケーションのリセットハンドラへのポ インタ // スタックポインタをアプリケーションのスタ ックエリアに設定 // VTOR: ベクタテーブルをアプリケーション のものに設定 // ポインタ関数としての再キャスト // アプリケーションは実行しない ここは STM32F2xx の情報を取り始める部分です ブートローダがアプリケーションにジャンプする前に ベクタテーブルを移動しなくてはなりません 現在のところ ブートローダとデバイスはブートローダのベクタテーブルは永久に 0x08000000 番地にあり続けると信じています ブートローダのコードは ベクタテーブルアドレスをアプリケーションが最初にリンクされた時の 0x08001000 番地にリセットします このことにより アプリケーションのコードが正しく動き ベクタテーブルも適切な位置にセットされます

Page 9 ここまでで道のりの半分で これからメインアプリケーションに到達し正しく走らせることができるかどうか検証する必要があります アプリケーションの main 関数のどこかにブレークポイントを設定してあればそこでブレークし LCD 表示を確認し 再度走らせることができます 実行アイコンをクリックし ブートローダがアプリケーションへ至るまでの走行をコントロールしているところを確認してください まとめると ほとんどの基本的な種類のブートローダは実現可能です ブートローダは常にアプリケー ションにジャンプします このプロジェクトは以下の 3 つことを例示 実証していますが 他の条件や ユーザの入力によりもっと複雑なブートローダに拡張することができます 1. ブートローダの骨格の作り方 2. ブートローダとアプリケーション コードを統合し ターゲットにダウンロードし同時にデバッグ する方法 3. 実ハードウェア上で動きかつ 実用途向けに改造可能であること ブートローダは フィールドでプログラムを書き換え可能にする有用なツールです この記事を参考に して ご自身のブートローダを作成する際の参考にして頂ければ幸いです 以下のリンクは この記事 で使用したプロジェクトファイルです Download application project (zip)