Harmonyにある内蔵FlashのUSBマスストレージ(msd_basic)と内蔵Flash上のFAT(nvm_fat_single_disk)のサンプルを組み合わせてPCからUSBストレージとして見えるディスクにかいたファイルにアクセスするプログラムを作成しているのですが、マイコンからFATを読むのは問題なく動くもののマイコンからの書き込みで失敗します。

  • PCから書き込み、マイコンから読み込み OK
  • マイコンから書き込み NG(FATが壊れる)

私のプログラムに問題あるのか色々調べているうちにFATの書き込みで関係ないセクタが消去されているような状況だとわかってきました。ディスクイメージの先頭からのオフセットもわかったのでnvm_fat_single_diskのサンプルに最低限のチェックとして内蔵Flashの値が本来00HのままのところがFFHに変化するかをチェックすることでFATの書き込みに失敗しているかを確認したところ、私が作っているプログラムで起こった症状が再現しました。ちなみに私のところで怒った問題というのはファイルをPCから2つ書いて、そのうちの1つをマイコンから書き換えた時に、無変更のファイルの中身がFFHで置き換わるという書状です。FFHで置き換わる箇所が連続4096バイトというサイズです。これはFlashの消去サイズですので消去動作で間違った動作をしている箇所があると思われます。

確認にで使用したプロジェクト
nvm_fat_single_diskです。USB STARTER KIT IIで確認できます(他のボードは修正が必要)。動作自体はオリジナルと同じですが、常時、内蔵Flashの問題の発生時に書き換えが起こるディスクイメージの特定箇所0x1000を監視して00Hから変更された場合LED3が点灯するようにしています。電源投入でいきなり動き出さないようにSW1で動作を開始するようにも変更しています。

いやぁ〜困ったFATライブラリ自体の問題なのか?内蔵フラッシュ用のドライバの問題なのか?CFカード用のサンプルで動作確認したいのですが、手元に評価ボードが無いですし・・・