コの字のせい。家に居る時間が長くなれば、熱心にデータシートを読むか、と言えばさにあらず。この歳になっても人間が出来ていないんでありますな。何かスッキリしない感じで、何も手につかず、ただただ怠惰に時間が過ぎるのを待つのであります。折角の時間、もっと有効活用したらどうか?と思っても心が動かず。仕方なくデータシートを紐解けば(PDFファイルを開いただけですが)、ちょっと引っかかるところがある!
さて既に7回も使って読んでおりますSTM32F401xD/xEのデータシートですが、前回ようやく17ページ目です。このペースでは「ライフワーク」になりかねない。少しはペースを上げないとということで、P.18はスルーさせていただきます。そこが大事じゃないわけじゃありません。そこには「割り込み」と「クロック」という重要事項が書かれているのです。しかし、データシートの機能記述の分量は短い。「その通りだ」という事をさらっと書いておしまい。どちらも懐の深い機能なので「別途マニュアル参照」しないとツッコミどころが出てまいりませぬ。
しかし、次の頁19へ至り、心に引っかかる記述にようやく遭遇いたしました。3.12 Boot modesの部分です。ここもごくごく短い記述の中に、3通りのブートモードがあること、またブートローダーを使っていろいろなシリアルデバイスからプログラムを読み込んでFlashを書き換えられること、が書かれております。そして、詳しいことは
AN2606のアプリケーションノートを見てね
ということで短い記述をしめています。AN2606ダウンロードしたら分かりますが、なんと5分冊になっている大きなアプリケーションノートです。データシートよりページ数多い。開発者は読まずにいられないと見えて、日本語版が用意されています。まあ、膨大な品種ごとに微妙に違う部分を同じ名のアプリケーションノートに収めているので1機種あたりの分量は大したことないのですがね。
こちらの関心はあくまでデータシート、そこで引っかかったのは、次に引用させていただく1文
Boot from system memory
いままで読んで来た中に system memoryなんて出てきたっけ?何度も参照させていただいております
Figure 3. STM32F401xD/xE block diagram
にもそんなメモリは出てこないのであります。ただね、同業者としては、
それは物理的にはFlashメモリアレイの一部じゃろ
と直感的に思うのであります。どこの会社のマイコンもやることだし。。。だいたいメモリを設計したことがあれば(といってメモリセルは、プロセス屋さんと回路屋さんの偉大な御業であり、しがないマイコン屋はせいぜいセルを並べてアドレスデコーダを取り付けるくらいが関の山なのですが)、メモリは2のべき乗のサイズ単位の組み合わせにしておかないとならないことが身に染みているでしょう。ブロックダイアグラムと、ここまでのデータシートを見たならば
- SRAMは32Kバイトのアレイを3個で合計96Kバイト
- Flashは512Kバイト、ただし、最小単位は128バイトの倍数
であることは一目瞭然。「通常のFlash」メモリをリプログラムできるブートローダーを格納してあるこのsystem memoryなるもの、物理的にはFlashメモリ・アレイの一部であって、
- ユーザーが勝手に書き換えできないように保護してある
- 工場でブートローダを書き込んで出荷している
- アドレスデコーダに細工して、通常のFlashメモリとは別なアドレスにおく
そういうメモリでありそうです。データシートの中でその辺の尻尾が追えるところを調べてみるとありました。
Figure 15. Memory map
これを見ると、
- Flash memory 0x08000000 – 0x0807FFFF番地 512Kバイト
- System memory 0x1FFF0000 – 0x1FFF7A0F 31247バイト
31247バイトのメモリアレイなどつくる筈がない。ブートローダ部分が使っているのが31247バイト分であって、残りがある筈。他にもFlashメモリを必要とするような構造があるので、32Kバイト(32768バイト)分がユーザーが使えるメインメモリとは別な制御下に存在するに違いない。差は1521バイト。オプションバイトはたかだか8バイト。アドレスの隙間に使っていないところがあるにせよ、まだ何かに使っているような気がする。デバッガの下請けルーチンかね?
憶測はいろいろ広がるのだけれども、データシートを見てもこれ以上は何も書いていない。それどころか、このSystem memoryが鎮座する筈の32KBブロックが512KBの一部なのか、512KB+32KB構成なのかもハッキリとは書いていない。他のマイコン屋さんの似た例では、ひっそりとどこかに512KBの一部を使用しています(その分ユーザ領域減ってます)みたいな断り書きが書いてあることが多いのだが、何も書いてない。見落とした?マニュアルの方を読んでみますか。それとも
実機に聞いてみるか?
一つ、暇なときにやることが出来た気がするね。気がまぎれるか?