マイコン工作実験日記

Microcontroller を用いての工作、実験記録

SPIフラッシュへの書き込み

2011-04-13 23:46:54 | Weblog
SPIフラッシュAT25DF641を追加したので、次のステップとしてこいつへの書き込みができるようにしなければなりません。2009年から2010年にかけて製作したMP3プレーヤではNANDフラッシュを使っていましたが、この時はSDカードももっていたので、フラッシュへ書き込みたいデータをSDカードからフラッシュへコピーするプログラムをマイコンに内蔵させることによって、書き込み手段を提供していました。しかし今回はSDカードをもっているわけではないし、それをわざわざ追加するのもナンセンス。

ひとつの方法として考えられるのはUSB MSCをサポートすることで、SPIフラッシュをパソコンのUSBメモリとしてアクセスできるようにすることです。そうすれば、書き込みは普通のパソコンから可能となります。こうして書き込んだデータはFatFsを使って読み込めば便利に使えます。しかしUSBは現在CDCをサポートしておりデバック用のコンソールとして使用しています。CDCとMSCの両方をサポートする複合デバイスを構築できればいいのですが、残念ながらSAM7Sではサポートできるエンドポイントが少ないため実現できません。

いざとなったら、CDCの仮想シリアルから読み込んだデータをSPIに書き込むという方法も考えられますが、ATMELが提供するマイコン内蔵フラッシュ書き込みツールであるSAM-BAには、SPIフラッシュへの書き込み機能も備わっているので、今回はSAM-BAを使ってみることにしました。SAM-BAでは起動時にターゲットのボードを選択しますが、AT91SAM7S256を使用しているSAM7S-EKボード上にはSPIフラッシュが搭載されていないため、その書き込み機能も当然のことながらサポートされていません。しかしながら、SAM-BAはユーザが自分で機能拡張したりカスタマイズすることが可能なように作られているので、今回はSAM7Sターゲットに対してAT25/AT26シリーズの書き込み機能を追加してみました。

まずGUIの部分はTclで書かれており、比較的簡単にSPIフラッシュのタブを追加することができます。同機能をサポートしている他のターゲットボードからコードを拝借して、ちょっと変更してやることでこんな↓ふうにSPIフラッシュの操作画面を追加できました。



Tclでできるのはあくまでも操作画面の追加だけであり、実際に書き込みをおこなうコードは別途必要です。SAM-BAのGUIを操作すると、SAM-BAはSPIフラッシュへの書き込みをおこなうコード(アプレット)をSRAM空間にダウンロードして、そのコードに制御を移すことで書き込みを行う仕組みになっています。この書き込みコードはソースコードとして提供されているので、これをgccを使ってSAM7S用にコンパイルしてやる必要がありました。

このような手順を経て、無事にAT25DF641への書き込みとベリファイが動作することが確認できました。