MCUXpressoで新規Quad SPI フラッシュメモリチップを初期化する方法

MIMXRT10xx QSPI connection

スポンサーリンク

目次

新規Quad SPI フラッシュメモリチップ使用時にフラッシュメモリからブートができなくなる問題について

NXP i.MX RTシリーズのMCUはシリアル通信フラッシュメモリチップをFlexSPIポートに接続して使用します。(型番数字の末尾が4のものはフラッシュメモリを内蔵しています)

メーカーの開発ボード(MIMXRT1060-EVK等)に搭載されている同じ型番のフラッシュメモリチップで新規に回路を作成した場合や開発ボード上のフラッシュメモリチップを新しいチップに載せ替えた場合、これまで開発ボードで動作が確認できていたプログラムをフラッシュメモリチップにプログラミングしてもフラッシュメモリからのブートが出来なくなる場合があります。

これはフラッシュメモリチップ内部のQE(Quad Enable)ビットがセットされていないため、MCUがQuad SPI モードでフラッシュメモリの読み出しが行えないためです。

例えば下記のようにNXP社の開発ボードに搭載されているフラッシュメモリチップは初期状態でQEビットがセットされていない型番が使われています。
NXP社 MIMXRT1060-EVK: ISSI社 IS25WP064AJBLE (1.8V QSPI 64Mb QE=0)
NXP社 MIMXRT1020-EVK: ISSI社 IS25LP064AJBLE (3.3V QSPI 64Mb QE=0)

初期状態でQEビットがセットされているフラッシュメモリチップは下記のように型番のオプション表記部が”Q”と記載されています。
ISSI社 IS25WP064Qxxxx (1.8V QSPI 64Mb QE=1)、IS25LP064Qxxxx (3.3V QSPI 64Mb QE=1)
Winbond社 W25Q64FxxxxQ (3.3V QSPI 64Mb QE=1)

NXP MIMXRT1060 and QSPI Flash memory connection

Quad SPI モードとは

Quad SPI は、通信機能の1つでQuad SPI フラッシュメモリなどのシリアルメモリにアクセスする機能です。
ユーザーは外部のシリアルメモリとマイコンのインタフェースの設計が容易になり、ピン数を節約することができます。
通常のメモリはアドレス線、データ線、信号線等をパラレル通信でアクセスするため多くのピンが必要になりますが、シリアルメモリを使用するとシリアル通信でメモリにアクセスできるため少ないピン数で接続できます。
通常のSPI(Serial Peripheral Interface)はクロックと入力データ、出力データ、チップセレクト信号を使って、1クロックごとに1ビットを送ってデータ通信を行います。
Quad SPIはデータ線を4本使い1クロックで4ビットを通信するため、データ通信において4倍速い通信が可能となります。Quad SPIモジュールがサポートする通信プロトコルモードは、「Single SPIモード」「Dual SPIモード」「Quad SPIモード」です。

 Single SPIモードは、全二重4線式の通常のSPI通信です。1クロックにつき1ビットを送り、1バイト(8ビット)通信には8クロックで行います。

QSPI Flash Single Read

Dual SPIモードは、データ線を2本使い半二重通信で1クロックにつき2ビットを送り、1バイト通信を4クロックで行います。

Quad SPIモードは、データ線を4本使い半二重通信で1クロックにつき4ビットを送り、1バイト通信を2クロックで行います。

QSPI Flash Quad Read

QSPIフラッシュメモリ内のQEビットをセットすることで、Quad SPIモードで通信が行えるようになります。

MCUXpressoで新規フラッシュメモリを初期化する方法

NXP社のMCUXpresso で新規QSPIフラッシュメモリチップのQEビットをセットする方法を説明します。
MCUXpressoのSDK内のExample projectにQSPIフラッシュメモリのQEビットをセットしフラッシュメモリのデータ消去を行うProjectが用意されているので、手軽さを優先してこのプログラムを使ってQSPIフラッシュメモリのQEビットをセットする方法を行います。

  1. NXP社のサイトからMCUXpresso IDEをダウンロード&インストール
  2. NXP社のサイトから使用するMCUのSDK(ソフトウェア開発キット)をダウンロードしMCUXpressoにインストール
  3. MCUXpressoのSDK Import Wizard で Examples projectsから “evkmimxrt10xx_flexspi_nor_polling_transfer” を選択しインポート

4. MCUXpresso のproject Explorer タブ内の “evkmimxrt10xx_flexspi_nor_polling_transfer”を選択し、プロジェクトのpropertiesを開く。


5. C/C++ Build内のSettingを選択し、MCU Linker内のManaged Linker ScriptでLink application to RAMのチェックボックスにチェックを入れる。(プログラムをRAMで実行するモードの設定)

6. MCUXpressoトップのDebugボタンを押します。 (プログラムがRAMで実行され、新規フラッシュメモリ内部のQEビットがセットされます)

7. 以上が新規フラッシュメモリ内部のQEビットをセットする方法になります。


よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

28年間 外資系と日系の半導体企業で主にデジアナ混載LSI、32bitマイコン、アナログIC、RFIC等の設計をしてきました。
これまで世の中に無かった半導体製品および関連するツールや製造関連機器等を独自に設計・開発し世に送り出してきました。
長年の趣味であるオーディオの分野で自分が欲しい世の中に無い製品を開発し世に広めたいと思い2023年より事業を開始いたしました。
好きな音楽はクラシック音楽です。弦楽器(チェロ)をたまに弾きます。

目次