はじめに
前回、PN5180のバージョンを読み出してみましたが、ファームウェアのバージョンが古いようです。
今回は、PN5180のファームウェアをアップデートしてみました。
使用機器
PN5180 NFC RFセンサーモジュール
使用機器について
PN5180とはSPI通信を使用してデータの送受信を行います。
PN5180はスレーブとなります。
マスターにはSTM社のNUCLEOボードを使用しました。
接続
ファームウェアのアップデートではREQ(DWL_REQ端子)を使用します。
ファームウェアのアップデートを行うときはREQ(DWL_REQ端子)の出力をHIGHにします。
ファームウェアの入手
最新のファームウェアを入手するには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バイト) + データサイズ分のデータ
の塊で構成されています。
この構造の塊でファームウェアのファイル(PN5180Firmware_4.1.sfwu)は構成されています。
特に先頭のデータの塊にはファームウェアバージョンが含まれています。
入手したファームウェアは、ファームウェアバージョン4.1になっていました。
通信フォーマット
ファームウェアのアップデートを行うには、決められた通信フォーマットに従って送信データを構築する必要があります。通信フォーマットは下記のようになります。
-
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を受信します。
ファームウェアの送信
PN5180がアップデートモードになったら、通信フォーマットに従ってファームウェアを送信します。
256バイト以下のデータを送信する場合
Frameのサイズ(HeaderのLength)が256バイト以下であれば1回の通信でデータを送信することができます。
マスターからデータを送信すると、PN5180からのResponseが返ってきます。Responseのフォーマットは下記のようになります。
ResponseのFrameの最初のデータはSTATになっています。
STATが0x00のときはOKとなります。
STATが0x00以外(0x01 - 0xFF)のときはエラーとなります。
256バイトより大きいデータを送信する場合
Frameのサイズ(HeaderのLength)が256より大きい値の場合、複数回に分けてデータを送信する必要があります。
複数回に分けてデータを送信する場合、HeaderのChunkフラグを使用します。
データを送るときにChunkフラグを1とします。
最後のデータを送るときはChunkフラグを0とします。
アップデート後
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になりました。
参考
編集後記
ファームウェアのバージョンをアップデートすることができたようなので、次回は、FeliCaのデータの読み書きに挑戦したいと思います。