NXP JN516X (TWELITE) をプログラミングする(Flash Programmer)

なんとなく興味があったのでついでにフラッシュ・プログラマーも作って見た。Windows版を作るにはVisual-Studioで開発したほうが簡単なんだけど使うと後々面倒なことになるだけなのでEclipse-CDT+MinGW64で開発している。リンカー(ld.exe)の不具合?なのかDLLの一部のシンボルがリンクエラーになってしまうので動的ロードするための余計なコードを書くハメになってしまったが、それはともかくEclipseとの連携を考慮してコマンドライン・ツールとして作成。って、いうとなんだか聞こえはいいがGUIが大の苦手なだけである。(-_-;)

プログラムはFTDIチップのCBUSピンを制御しデバイスのブートローダーを起動し通信を行う仕組みでファームウェアの読み書きに対応している。基本機能的にはモノワイヤレス社のTWE-Programmerと同じものだがブートローダーにはコードをRAMに転送し実行する機能もあるようだ。試してないけど。

ちなみにftd2.h/ftd2.cppは汎用的に使えるFTDIライブラリだ。CBUSピンはArduinoのようにpinMode/digitalWrite/digitalReadで制御できるので使いやすいかも。4ピンしかないけどね。(-_-;)

【コマンドライン(-h)】

【ポートスキャン(-s)】

【デバイス情報(-d)】

【デバイス読み込み(-r)】

【デバイス書き込み(-w)】

【修正履歴】
2024-01-29
ChipIDをJN516X-PROG.chipidファイルに記録&参照するように改良。chipidファイルによりChipIDの誤判定を修正することが可能となる。

2024-01-28
チップ・レビジョンによりデバイスの誤判定が起こるため改良。

2023-11-19
JN5168のChipIDの誤りとJN5164のChipIDが複数あるためにJN5164をJN5168と誤判定してしまうことがあったためJN5168はJN5164として判定するように対策。

2022-11-07
デバイス情報(-d)としてMAC Address表示を追加。

2022-06-01
JN5164で作成したプログラムが書き込みできなくて調べてみたらチップがJN5168だった。JN5161/JN5164/JN5168は同一パイナリーで動作するのでJN5161/JN5164/JN5168については同一チップと見なすように変更した。

2022-05-15
あちこち大幅改修。まずポート指定はシリアル番号指定が必要であったが面倒だったので-sコマンドでの何番目かを数字指定できるように変更した。-wコマンドはセクター単位の消去に変更したので全体を消去する-eコマンドを新たに追加。それと-rコマンドは有効なセクターを検索するようにしたので-fオプションが検索を開始するセクター指定となり複数のプログラムが書き込まれているときでもそれぞれを読み込むことが可能となるようにしてみた。あと物がないから試せないけどJN5179にも対応してみたつもり。

【プロジェクト一式(Eclipse)】
JN516X-PROG

【プログラム】
ftd2xx.hのためにコンパイルには次のシンボル定義が必要となる。
#define _WIN32
#define FTD2XX_STATIC

※モノワイヤレス社のTWELITE-R(2)/MONOSTICKのHW仕様でのみ動作することに注意。

【関連投稿】
NXP JN516X (TWELITE) をプログラミングする(開発環境の構築)
NXP JN516X (TWELITE) をプログラミングする(メイン・ルーチン)
NXP JN516X (TWELITE) をプログラミングする(TICKTIMER)
NXP JN516X (TWELITE) をプログラミングする(UART)
NXP JN516X (TWELITE) をプログラミングする(SYSTEM)
NXP JN516X (TWELITE) をプログラミングする(GPIO)
NXP JN516X (TWELITE) をプログラミングする(TIMER)
NXP JN516X (TWELITE) をプログラミングする(ALARM)
NXP JN516X (TWELITE) をプログラミングする(WAKETIMER)
NXP JN516X (TWELITE) をプログラミングする(WATCHDOG)
NXP JN516X (TWELITE) をプログラミングする(I2C)
NXP JN516X (TWELITE) をプログラミングする(SPI)
NXP JN516X (TWELITE) をプログラミングする(ADC)
NXP JN516X (TWELITE) をプログラミングする(COMPARATOR)
NXP JN516X (TWELITE) をプログラミングする(CLOCK)
NXP JN516X (TWELITE) をプログラミングする(BROWNOUT)
NXP JN516X (TWELITE) をプログラミングする(PULSCOUNTER)
NXP JN516X (TWELITE) をプログラミングする(INFRARED)
NXP JN516X (TWELITE) をプログラミングする(RANDOM-GENERATOR)
NXP JN516X (TWELITE) をプログラミングする(FLASH)
NXP JN516X (TWELITE) をプログラミングする(EEPROM)
NXP JN516X (TWELITE) をプログラミングする(WPAN)
NXP JN516X (TWELITE) をプログラミングする(Eclipse-CDT+MWSTAGE)
NXP JN516X (TWELITE) をプログラミングする(乗算と除算)
NXP JN516X (TWELITE) をプログラミングする(マルチタスク)
NXP JN516X (TWELITE) をプログラミングする(フラッシュ・プログラマー)
NXP JN516X (TWELITE) をプログラミングする(OTA UPDATE)
NXP JN516X (TWELITE) をプログラミングする(TWELITE CUE/MC3630)
NXP JN516X (TWELITE) をプログラミングする(LED)
NXP JN516X (TWELITE) をプログラミングする(AES)
NXP JN516X (TWELITE) をプログラミングする(Downloads)