今回はSTMマイコンのリードプロテクト機能(RDP)について紹介します。
製品などにSTMマイコンを組み込んで出荷する場合に
JTAGやSWD端子を介してマイコン内部のデータを取り出して、
解析やコピーされてしまうことを防止するためにリードプロテクト機能を利用します。
F4やL4ではPCROPという更に強化されたプロテクト機能があります。
第三者のコードをCPUに実行させて内部のコードを取り出す操作を防止します。
ただ、F3ではPCROPに対応していません。
他に意図しない書き込みを防止するための書き込みプロテクト機能(WRP)もあります。
今回は一般的なリードプロテクト機能についてのみ紹介します。
リードプロテクト機能には3つのレベルがあります。
◆読み出し保護レベル0
コードプロテクトなし、書き込み、読み込み可能、初期状態。
◆読み出し保護レベル1
JTAG、SWD等で読み込み不可、書き換え可。
また、読み出し保護レベル0へ変更も可
◆読み出し保護レベル2
JTAG、SWDの認識を不可にさせるため、
読み込み書き込み完全に不可。
また、読み出し保護レベル2から他のレベルは変更不可。
今後、ファームをアップデート等に対応させるためには、
最大でも読み出し保護レベル1が適当なようです。
読み出し保護レベルを2にしてしまうと
マイコンを丸ごと載せ替えない限り何も変更できません。
上記の読み出し保護レベルの変更方法は
ST-Link Utilityから行う方法とコード内から行う方法の2種類あります。
◆ST-Link Utilityから行う方法
ST-Link Utilityの「Target」から「OptionByte」を選択します。
上部の「Read Out Protection」の項目のレベルを変更します。
FlashSectorProtectionを必要に応じて解除、もしくは選択して
「Apply」をクリックすると
現在の書き込まれたファームに対して保護が適用されます。
◆コード内から行う方法
コード上に埋め込む場合はSTコミュニティー内のこちらで紹介されていました。
毎回行うのは面倒という場合はコードに埋め込んだ方が良さそうです。
ただ、更新ファームを配布する場合はファイルとして配布されてしまうため、
あまりプロテクトを掛ける意味は薄くなってしまいます。
製品のコピーを避ける場合は
コードプロテクト&OTAアップデートなどを利用する他に
Apple製品のように基板の色を黒色等にして、
配線パターンを見にくくするなど多面的に対策する必要がありそうです。