SPIMモジュールは、32ビットARM Cortex-M0ベースのNFCマイクロコントローラーであるPN7462が提供するマスターインターフェイスの1つであり、ユーザーはこのインターフェイスを使用して最大2つのSPIスレーブデバイスに接続できます。
NFCリーダーライブラリは、phHal/phhalSPIMでSPIMドライバコードを提供し、ユーザーは「PN7462AU_ex_phExHif」のデモで行われているのと同じように、アプリケーションで次のAPIを直接使用して単純なSPIトランザクションを実装できます。
このデモには、1つのNSSセッションで書き込み/読み取り操作が必要な一部のSPIまたはフラッシュデバイス(たとえば、次のようにOM27462上のSPIまたはフラッシュデバイス)には制限があります。
R202をはんだ付けし、3V3に接続して、nHoldピンがPORからプルアップしていることを確認してください。
以下は、このデバイスがサポートするコマンドセットの 1 つです。
このコマンドには、1 つの NSS セッションで 1 つの write(9F) 操作とそれに続く 3 つの読み取り操作が含まれていますが、次のように phhalSPIM_Transmit() と phhalSPIM_Receive() を使用して実装すると、次のようになります。
ステータス = phhalSPIM_Transmit(PH_EXHIF_HW_SPIM_SLAVE, PH_EXHIF_HW_SPIM_INIT_CRC, PH_EXHIF_HW_SPIM_APPEND_CRC, PH_EXHIF_HW_SPIM_CRC_INIT, 2, cmd_buf, PH_EXHIF_HW_SPIM_CRC_OFFSET);
ステータス = phhalSPIM_Receive(PH_EXHIF_HW_SPIM_SLAVE, PH_EXHIF_HW_SPIM_INIT_CRC, PH_EXHIF_HW_SPIM_CRC_INIT, data_length, dst, PH_EXHIF_HW_SPIM_CRC_OFFSET);"
次の結果が得られます。
期待:
NSS \__________________________/
MOSI CMD A7-A0
MISOデータ
actual:
NSS \____________||______________/
MOSI CMD A7-A0
MISOデータ
したがって、書き込みと読み取りの間のパルスが問題であり、ここでは、SPIM_CONFIG_REGのNSS_VALビットとNSS_CONTROLビットの助けを借りて、NSSラインを手動で処理する必要があります。
したがって、コードは次のようになります。
Assert NSS
ステータス = phhalSPIM_Transmit(PH_EXHIF_HW_SPIM_SLAVE, PH_EXHIF_HW_SPIM_INIT_CRC, PH_EXHIF_HW_SPIM_APPEND_CRC, PH_EXHIF_HW_SPIM_CRC_INIT, 2, cmd_buf, PH_EXHIF_HW_SPIM_CRC_OFFSET);
ステータス = phhalSPIM_Receive(PH_EXHIF_HW_SPIM_SLAVE, PH_EXHIF_HW_SPIM_INIT_CRC, PH_EXHIF_HW_SPIM_CRC_INIT, data_length, dst, PH_EXHIF_HW_SPIM_CRC_OFFSET);"
De-assert NSS
NSS のラインアサートおよびデアサート機能は、次のようにレジスタ ビット レベルの API を使用して実装できます。
PH_REG_SET_BIT(SPIM_CONFIG_REG, NSS_VAL);//de-assert NSS
PH_REG_SET_BIT(SPIM_CONFIG_REG, NSS_CTRL);
PH_REG_CLEAR_BIT(SPIM_CONFIG_REG, NSS_VAL);//assert NSS
また、アプリケーションコードには次のヘッダーファイルを含めてください。
#include 「ph_Reg.h」
#include「PN7462AU/PN7462AU_spim.h」
phhalSPIM_Transmit() と phhalSPIM_Receive() は Rom ベースの関数であり、デフォルトでは Bit をクリアするNSS_CTRLに注意してください。ROM APIの動作を変更することはできませんが、幸いなことに、代わりにphhalSPIM_TransmitContinue()とphhalSPIM_ReceiveContinue()があります。したがって、最終的な解決策は次のようになります。
Assert NSS
ステータス= phhalSPIM_TransmitContinue(1, cmd_buf);
ステータス = phhalSPIM_ReceiveContinue(3, dst);
De-assert NSS
これは、phhalSPIM_Transmit() と phhalSPIM_Receive() が役に立たないという意味ではなく、レジスタ ビット レベルの API を使用して SPIM モジュールを手動で初期化したくない場合に、SPI マスター インターフェイスの設定にも役立つためです。これら 2 つの機能を正しく動作させるために、書き込み/読み取りの長さに 1 バイトを使用することに注意してください。
したがって、擬似コード全体は次のようになります。
phhalSPIM_Init(PH_HW_SPIM_TIMEOUT) ;
phhalSPIM_Configure(PH_HW_SPIM_SLAVE, PH_HW_SPIM_MSB_FIRST, \
PH_HW_SPIM_MODE, PH_HW_SPIM_BAUDRATE, \
PH_HW_SPIM_NSSPULSE, PH_HW_SPIM_NSSPOL) ;
ステータス = phhalSPIM_Transmit(PH_EXHIF_HW_SPIM_SLAVE, PH_EXHIF_HW_SPIM_INIT_CRC, PH_EXHIF_HW_SPIM_APPEND_CRC, PH_EXHIF_HW_SPIM_CRC_INIT, 1, cmd_buf, PH_EXHIF_HW_SPIM_CRC_OFFSET);
ステータス = phhalSPIM_Receive(PH_EXHIF_HW_SPIM_SLAVE, PH_EXHIF_HW_SPIM_INIT_CRC, PH_EXHIF_HW_SPIM_CRC_INIT, 1, dst, PH_EXHIF_HW_SPIM_CRC_OFFSET);"
Assert NSS
ステータス= phhalSPIM_TransmitContinue(1, cmd_buf);
ステータス = phhalSPIM_ReceiveContinue(3, dst);
De-assert NSS
次の手順は、NFCリーダーライブラリに基づいて新しいプロジェクトを作成する方法を示しています。NFCリーダーライブラリのインポート方法については、 https://www.nxp.com/docs/en/user-guide/UM10883.pdf を参照してください。
1. NFCリーダーライブラリをインポートした後、新しいプロジェクトを作成します。
2. PN7462サポートパッケージをインストールした場合は、次のように表示されます。
3. NFCリーダーライブラリへのリンクを追加します。
4. プロジェクトでパスを追加し、NFC リーダー ライブラリを有効にします。
5. cr_startup.c を削除し、メインコードとヘッダーファイルを作成します。
6. ビルド結果:
7.Debug result:
デモ版を入手するには、 https://community.nxp.com/docs/DOC-329745 のガイドからプライベートチケットを送信してください。
お役に立てれば幸いです。
よろしくお願いいたします。
Kan