0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

NFCを使ってみる

Posted at

はじめに

前回、PN5180のバージョンを読み出してみましたが、ファームウェアのバージョンが古いようです。
今回は、PN5180のファームウェアをアップデートしてみました。

使用機器

PN5180 NFC RFセンサーモジュール

使用機器について
PN5180とはSPI通信を使用してデータの送受信を行います。
PN5180はスレーブとなります。
マスターにはSTM社のNUCLEOボードを使用しました。

接続

ファームウェアのアップデートではREQ(DWL_REQ端子)を使用します。
ファームウェアのアップデートを行うときはREQ(DWL_REQ端子)の出力をHIGHにします。

接続.drawio.png

ファームウェアの入手

最新のファームウェアを入手するにはNXP社のサイトでユーザー登録する必要があります。
NFC Cockpit Configuration Tool for NFC ICsをダウンロードします。

ユーザー登録されていない場合、ダウンロードする際にユーザー登録が必要になります。
ダウンロードしたNFC-COCKPITというツールをインストールすると、下記のフォルダ内にファームウェアが格納されています。

C:\nxp\NxpNfcCockpit_v8.0.0.0\firmware\PN5180_SFWU
PN5180Firmware_4.1.sfwu

このファイル(PN5180Firmware_4.1.sfwu)の内容をPN5180に書き込みます。

ファームウェアの変換

ファームウェア「PN5180Firmware_4.1.sfwu」はバイナリのようなので16進数データに変換します。
データの変換は、こちらで紹介されている
ファイルの変換でファイルの変換を行うことができます。
変換結果を8ビットの配列としてファームウェアのアップデート時に参照します。

const uint8_t firmware[] = {
	0x00, 0x0E, ・・・
};

ファームウェアの構造

入手したファームウェア(PN5180Firmware_4.1.sfwu)は
データサイズ(2バイト) + データサイズ分のデータ
の塊で構成されています。

構成.png

この構造の塊でファームウェアのファイル(PN5180Firmware_4.1.sfwu)は構成されています。

構成.png

特に先頭のデータの塊にはファームウェアバージョンが含まれています。
入手したファームウェアは、ファームウェアバージョン4.1になっていました。

構成.png

通信フォーマット

ファームウェアのアップデートを行うには、決められた通信フォーマットに従って送信データを構築する必要があります。通信フォーマットは下記のようになります。

format.png

  • Dir Byte
    データの方向を示す値になります。
    マスターからPN5180へデータを送信するとき 0x7F
    マスターがPN5180からデータを受信するとき 0xFF
    を設定します。

  • RFU[15:11]
    全て0を設定します。
    ※RFU : Reserved for Future Use

  • Chunk[10]
    1回に通信で送ることができるデータのサイズは256バイトまでになります。
    256バイトより大きいデータを送信したい場合、データを分割して送信する必要があります。
    分割してデータを送信するときにChunkを使用します。

  • Length[9:0]
    Frameのサイズを表します。最大値は256バイトとなります。

  • Frame
    送信データになります。
    データを送信するとき、Frameの先頭には1バイトのOpCodeを設定します。

  • End
    HeaderからFrameまでのCRC16の計算結果を設定します。

PN5180Firmware_4.1.sfwu について
ファイルはこの通信フォーマットに合わせて作成されています。
そのため、通信フォーマットにあるOpCodeもファイル内に埋め込まれています(0xC0:SECURE_WRITE)。
ただし、Lengthについては、データの長さを表しているだけとなります。
マスターからPN5180への送信データの最大数となる256バイトに関しては考慮されていません。
また、CRC16もファイルには埋め込まれていないため計算する必要があります。

アップデート手順

ファームウェアのアップデートを行うためにはPN5180をアップデートモードにする必要があります。
PN5180を起動したら、DWL_REQ端子をHIGHにします。
PN5180をリセットして、リセットを解除するとPN5180はアップデートモードになります。

マスターから、PN5180へファームウェアデータを送信するときは、送信する前にBUSY端子がLOWであることを確認してからファームウェアデータを送信します。
また、アップデートモードでは、マスターからファームウェアデータを送信すると、PN5180から応答データ(Response)が返されます。BUSY端子がHIGHであることを確認してからResponseを受信します。

flow.png

ファームウェアの送信

PN5180がアップデートモードになったら、通信フォーマットに従ってファームウェアを送信します。

256バイト以下のデータを送信する場合

Frameのサイズ(HeaderのLength)が256バイト以下であれば1回の通信でデータを送信することができます。

format.png

マスターからデータを送信すると、PN5180からのResponseが返ってきます。Responseのフォーマットは下記のようになります。

format.png

ResponseのFrameの最初のデータはSTATになっています。
STATが0x00のときはOKとなります。
STATが0x00以外(0x01 - 0xFF)のときはエラーとなります。

256バイトより大きいデータを送信する場合

Frameのサイズ(HeaderのLength)が256より大きい値の場合、複数回に分けてデータを送信する必要があります。
複数回に分けてデータを送信する場合、HeaderのChunkフラグを使用します。
データを送るときにChunkフラグを1とします。
最後のデータを送るときはChunkフラグを0とします。

例)550バイト(0x0226)のデータを送信する場合
pn5180_202407-ページ7.drawio.png

アップデート後

PN5180のファームウェアをアップデートした後にEEPROMのバージョン情報を読み出した結果です。

バージョン情報 アップデート前 アップデート後
Die identifier 0x00 0x00 0x00 0x00 0x00 0x01 0x76 0x0A 0x23 0x14 0x3A 0x56 0x64 0x56 0x20 0x55 0x00 0x00 0x00 0x00 0x00 0x01 0x76 0x0A 0x23 0x14 0x3A 0x56 0x64 0x56 0x20 0x55
Product Version 0x05 0x03 0x01 0x04
Firmware Version 0x05 0x03 0x01 0x04
EEPROM Version 0x00 0x91 0x00 0x99

バージョン情報を読み出すとバージョンが3.5から4.1になりました。

参考

NXP社
GitHub PN5180_Updater

編集後記

ファームウェアのバージョンをアップデートすることができたようなので、次回は、FeliCaのデータの読み書きに挑戦したいと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?