S110 v7.0.0のリリースノートを読んでいる。
昨日、nRFgo Studioで焼くときに「Enable protectionってなんだろう?」と思っていたことと関係があることが書かれていた。
まず、Enable protectionについては、nRFgo Studioのヘルプファイルに書かれていた。
- もしsoftdeviceのCLENR0(code-length value)が未定義なら、サイズを指定する。
- HEXファイルにCLENR0がないので、ここではサイズしか設定できない
- もしsoftdeviceがUICRのかわりにCLENR0を持っているなら、”Enable SoftDevice protection”チェックボックスを使って、CLENR0をUICRにコピーするかどうか選択できる。
- DFUを使うなら、チェックを外す
うーん、いちいちわからん。
わからんが、リリースノートも見ておこう。
- SoftDeviceのサイズは88kBと大きくなった
- FWIDはもうUICRに書き込まれない。この変更に互換性を持つアップデートされたnRFgo StudioやnrfjprogはNordicのサイトからダウンロードできる。
- SoftDeviceのHEXは、UICR.CLENR0レジスタを含まない。つまり、SoftDeviceはデフォルトでprotectedではない。アップデートされたnRFgo StudioやnrfjprogはデフォルトでUICR.CLENR0レジスタにSoftDeviceのサイズを書き込む。それによって、デフォルトのprotectionを実現している。protectionを有効にするとオリジナルサイズよりも大きいサイズのSoftDeviceをDFUで書き込むことができなくなる。よって、ツールがUICR.CLENR0レジスタへ書き込む動作はオプションとした。
- sd_softdevice_forward_to_application()はsd_softdevice_vector_table_base_set()に置き換えられた。
うーーーん。。。
製品とかで書き換えをあんまりやりたくないなら、UICR.CLENR0レジスタには書き込まない方がよい、つまりEnable protectionにはチェックしない方がよい、ってことかしら。「DFUでは」って限定なのかな。
DFUもよくわかってないが、汎用のFLASH書き込みのしくみ、みたいなイメージでいるんだけど、ちゃんと調べておかないと失敗しそうだ。
UICR : User Information Configuration Register。アドレスは0x1000_1000。
CLENR0 : Length of code region 0 in bytes。FICR.CODEPAGESIZEの整数倍。
この「region」ってのが、0と1とあって、それぞれのregionで動いているコードからは他のregionへの書き込みができないようだ。
それが「Enable protection」ってことかね。
なら、JTAGとかなら関係はないから、どっちでもいいってことか。
では、今朝は終わりにするが、最後にS110 v7.0.0のHEXをバイナリ変換して、ベクタテーブルを見ておこう。
やっぱり、0x0000_07c0やん。
これだと、SPにこの値が入っているのは当たり前だ。
ちなみに、S110 v6.0.0は、こう。
そうそう!
そういうのを求めているんだよ!!
じゃあ、どうするのが正しいんだろう。。。。
なんか、新しいものがさらにリリースされるとか、何か見忘れてるとか、そんな感じがする。
少なくとも、S110 v7.0.0のHEXをRegion 0に書き込んでもだめだということはわかった。
アプリをRegion 0に、SoftDeviceをRegion 1に、とかか??
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。