Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

リセットからのPSoC 6 MCUのスタートアップ時間の設定 – KBA232330

リセットからのPSoC 6 MCUのスタートアップ時間の設定 – KBA232330

Infineon_Team
Moderator
Moderator
Moderator
5 replies posted First solution authored First comment on KBA

リセットからのPSoC 6 MCUのスタートアップ時間の設定 – KBA232330

Translated by: keni_4440091

Original KBA: Configuring the PSoC 6 MCU Startup Time from Reset - KBA232330

Version: **

リセット後、最初にブートコードが実行され、以下の動作シーケンスを行います。

  1. 任意のハードウェア固有の初期設定コードを実行します。
  2. ユーザーflashのTOC2(Table of Contents)が有効かどうかを確認します。
  3. App0リセットハンドラーを入手します。
  4. SWD/JTAGピンを設定します。
  5. 実行を一定時間遅らせます(Wait Window / Listen Window)
  6. ユーザーアプリケーションを起動します。

ブートコードに関する詳細は、PSoC 6 Architecture TRMの「ブートコード」の章を参照してください。

リセット動作のタイミングダイアグラムを以下に示します。

図1. セットアップタイミングダイアグラム(PSoC 6 Programming Specificationsを参照)

 

keni_4440091_9-1628570211202.png


このように、全体のスタートアップ時間は tstartup = tlite_up + tboot + tlisten

以下の表は、様々な時間ラベルと、その期間に実行した値および動作を示しています。(これらの値に関してはPSoC 6 Programming Specificationを参照してください。):

名前

時間ラベル

概要

ライトアップ時間

tlite_up

最大250 µs

リセットリリースからCPUがブートコードを実行し始めるまでの時間

ブートアップ時間

tboot

0.7 – 600 ms

手順1から4までのブートコードによって実行される動作に掛かる時間

Listen Window / Wait time

tlisten

20 ms (0 ~ 100msの間でばらつきます)

Listen windowのデフォルト値は20 msです。(ブートコードの手順5) プログラマーを接続してプログラミングモードに入るのに使用します。MCUは、ホストがSWJコマンドの正しいシーケンスを送信するのをListenします。

 

リセット後、アプリケーションの開始にどれぐらいかかるかを確認するために、CM0+アプリケーションでピンをトグルさせる簡単なアプリケーションを作れます。これは、リセットからユーザーアプリケーションを実行するのに掛かるトータル時間のスコープショットです。:

keni_4440091_10-1628570281245.png

値はおよそ21msです(値は変動します)。このスタートアップ時間は、リセット後にデバイスが迅速に応答することを求められるアプリケーションでは適さないかもしれません。

 

スタートアップ時間が21ms前後なのは何故ですか?

多くに時間がListen window(~20ms)によることを確認できます。

 

PSoC 6 MCUでは、Listen windowはTOC2(Table of Contents)によって制御されています。それは、セキュリティイメージ、ユーザーアプリケーション、およびフラッシュブートパラメータなどのユーザーフラッシュにある特定の内容の場所についての情報を提供するデータ構造です。詳細なTOC2フォーマットは、以下に示します。

詳細は、PSoC 6 Architecture TRMの「ブートコード」の章を参照してください。:

keni_4440091_11-1628570352960.png

Listen windowを継続するには、bit 2:4(LISTEN WINDOW)を修正します。

keni_4440091_12-1628570385818.png

 

Listen window0msに設定、または他のビットを変更した場合(例えばSWJを無効にしたSWJ_PINS_CTL)、デバイスを再度プログラムする事はできない事に注意してください。LISTEN_WINDOWビットのみ変更するようにしてください。

Listen windowを1msに設定し、ほとんどのアプリケーションに適応させる必要があります。添付されたプロジェクトでは、TOC2構造は、FLASHBOOT_WAIT_1MSマクロを使用してLISTEN_WINDOW を1 ms (値= 2)に設定する事で修正されます。CY8CKIT-062-WIFI-BTキットは、テストに使用されました。

 

/** Flashboot parameters */
#define FLASHBOOT_FLAGS ((FLASHBOOT_VALIDATE_NO << TOC_FLAGS_APP_VERIFY_POS) \
                                | (FLASHBOOT_WAIT_1MS << TOC_FLAGS_DELAY_POS) \
                                | (FLASHBOOT_CLK_50MHZ << TOC_FLAGS_CLOCKS_POS))

/** TOC2 in SFlash */
CY_SECTION(".cy_toc_part2") __USED static const cy_stc_toc_t cy_toc2 =
{
    .objSize     = sizeof(cy_stc_toc_t) - sizeof(uint32_t),     /**< Object Size (Bytes) excluding CRC */
    .magicNum    = 0x01211220,                /**< TOC2 ID (magic number) */
    .appAddr1    = 0x10000000u,               /**< Application start address */
    .tocFlags    = FLASHBOOT_FLAGS,           /**< Flashboot flags stored in TOC2 */
    .crc         = 0UL                        /**< CRC populated by cymcuelftool */
};

 

TOC2の値が変更される場合、TOC2を検証するために使用されるCRC値も、修正する必要があります。これは、PSoC Creatorでビルドを完了する時にCyMCUElfToolによって自動的に行われます。

keni_4440091_13-1628570459091.png

ModusToolboxでは、以下のポスト-ビルドコマンドをMakefileに追加し、TOC2 CRCを生成するためにアプリケーションに署名します。

 

  1. ModusToolboxインストールディレクトリに、tools_2.xフォルダからcymcuelftool.exeをコピーし、アプリケーションディレクトリ内にペーストします(添付のプロジェクトではすでに完了しています)。
  2. ビルドを実行する前に、アプリケーションに絶対パスを指定するために、このコマンドを修正します。

 

POSTBUILD=./cymcuelftool.exe --sign "<path_to_application>/mtb-psoc6-reduce-startup-time/build/CY8CKIT-062-WIFI-BT/Debug/mtb-psoc6-reduce-startup-time.elf" --output "<path_to_application>/mtb-psoc6-reduce-startup-time/build/CY8CKIT-062-WIFI-BT/Debug/mtb-psoc6-reduce-startup-time.elf" --hex "<path_to_application>/mtb-psoc6-reduce-startup-time/build/CY8CKIT-062-WIFI-BT/mtb-psoc6-reduce-startup-time.hex"

keni_4440091_14-1628570491833.png

添付のアーカイブには、ModusToolboxとPSoC Creatorプロジェクトの両方が含まれています。

  • ModusToolbox project: CM4アプリケーションのピン10.1をトグルし、listen windowを1msに設定します。事前ビルドのCM0pイメージを使用します。

CM0pアプリケーションは最初に起動するので、dual-CPUアプリケーションテンプレートを使用し、CM0pアプリケーションのピンをトグルすることができます。これは、CM4アプリケーションがCM0pアプリケーションから開始される時に基づいて、CM0pの開始からCM4までの間の数μ秒の遅延が通常あるので、精度が向上します。

  • PSoC Creator project: CM0pおよびCM4アプリケーションのピン10.0および10.1それぞれをトグルさせ、listen windowを1msに設定します。

 

ロジックアナライザを接続し、キットのリセットスイッチを押します。アプリケーションを実行するXRESからCM0pまでのスタートアップ時間が約2msになり、21msから大きな改善を確認できます。

ModusToolboxアプリケーションでは、リセットからCM4アプリケーションの開始までを読み取ることができます。

keni_4440091_15-1628570594430.png


プロジェクトには、実験できる他のマクロが含まれています。不適切な値は、デバイスが動作しなくなる場合がある事に注意してください。

 

これは、マクロの異なる値のスコープショットです。:

FLASHBOOT_WAIT_20MS:

keni_4440091_17-1628570668112.png

FLASHBOOT_WAIT_10MS:

keni_4440091_18-1628570696305.png

0 Likes
18 Views
Contributors