実験内容
Interface2007.5月号付録基板V850ES/JG2を使ったテストをしました。chan氏がFatFsというすばらしいFATモジュールソフトを開発されたので、それをテストしてみました。
chan氏のFatFsページのサンプル・プロジェクト(AVR, H8/300H, TLCS-870/C, V850ES)2007. 4. 3 から一式ダウンロードしてください。
その中のtst850がV850ES用で、コンパイルするためのプロジェクトファイル一式が含まれています。Interface付属のCD-ROMから開発ソフト一式インストールしていれば、簡単にコンパイルリンクできると思います。
chanさんのサンプルソフトは独自のモニター機能を持っていて、FATの知識がなくても簡単にSDカードの実験ができてしまいます。とはいってもモニターコマンドは解説されていないので、ある程度ソースファイルを解析する必要がありました。
pngファイルとして、回路図も含まれています。その回路図のSDC/MMCソケットに繋がっている部分だけ作ります。LEDの部分は付録基板上のLEDをプログラムから点灯/消灯させたので、RN2405の部分は作りませんでした。
付録基板との接続
|
SDソケット |
SDソケットピン |
V850の端子 |
付録基板のコネクタ番号 |
|
WP |
11 |
27 |
CON2−16 |
|
INS# |
10 |
28 |
CON2−17 |
|
DAT1 |
8 |
|
|
|
DAT0/D0 |
7 |
22 |
CON1−22 |
|
VSS2 |
6 |
|
GNDに接続、次表参照 |
|
CLK |
5 |
24 |
CON2−15 |
|
VCC |
4 |
|
必ずL1のインダクタ経由で付録基板VCC(3.3V)に接続、C1のコンデンサも忘れずに |
|
VSS1 |
3 |
|
GNDに接続、次表参照 |
|
CMD/DI |
2 |
23 |
CON2−13 |
|
DAT3/CS |
1 |
21 |
CON2−31 |
|
DAT2 |
9 |
|
|
|
回路図中の電源 |
付録基板のコネクタ番号 |
|
VCC(3.3V) |
CON2−39(付録基板のR4をCON2−39までジャンパしました。下記写真参照) |
|
GND |
CON2−40 |
回路図の変更点
1)SDCに繋がっている部分だけ作ります。
2)LEDは基板上のものを使うのでRN2405は繋ぎませんでした。
3)C1のコンデンサおよび、L1のインダクタは必須です。これがないとUSB接続時(電源立ち上げ時)V850が起動しないです。chanさんによるとSDカードの抜き差し時にも電源に影響するらしいです。
4)私のSDカードソケットにはWP,INS#が無いので、V850側の入力端子をL(Active)に固定しました。WP,INS#がある場合は、V850に接続してください。
回路の注意点
回路のL1(22μH)のインダクタが無い状態では、SDカードを抜いてからUSB接続しないと、プログラムの書き込みや、書き込んだプログラムがまったく動作しないという現象がかなりの頻度でおきます。これは、起動時SDカードによる電源のパルスノイズが起きるためみたいです。必ずL1とC1をつけてください。
プロジェクトを最初に起動したときの設定

OKします。

上記の画面が現れるので、詳細設定ボタンをクリックします。

ここは、よくわからないのですが、とりあえず全部下の項目をチェックしてOKします。

はいをクリックします。
E1023: いくつかのファイルが見つかりません。
ファイルが存在するか確認してください。
C:\Program Files\NEC Electronics Tools\CA850\W3.10\inc850\string.h
C:\Program Files\NEC Electronics Tools\CA850\W3.10\inc850\stddef.h
C:\Program Files\NEC Electronics Tools\CA850\W3.10\inc850\stdarg.h
がでます。

プロジェクトウインドウでインクルード・ファイル(上図の青のところ)を右クリックし、「依存関係の更新」を行います。
すると、先のエラー E1023: いくつかのファイルが見つかりません。 が解消されます。
一度、「ビルド」−「リビルド」をおこなってエラー、ワーニングがなければ以下のソフト変更をおこなってください。
ソフトの変更点
1)PCからリターンを送信するまで、メインループにはいらないように変更。V850はリターン受信でタイトル文字列をPCへ送信。リターン待ちのときLEDを点灯し、リターン受信でLED消灯。 (正確にはリターンでもどのキーでもよいです。)
main.cの中のIoInit( )に次の2行を追加(どこでもよいです)
PMCT &= ~(1<<6);
PCT |= (1<<6);
main.cの中のmain( )のIoInitとxputsの間に以下の行を追加
IoInit( ); これは追加しません
PCT &= ~(1<<6);
ptr = linebuf;
get_line(ptr, sizeof(linebuf));
PCT |= (1<<6);
xputs("\nFatFs module test monitor for V850ES"); これは追加しません
2)SELECT( )でCS=L(Active)と基板LED点灯。DESELECT( )でCS=H(非Active)と基板LED消灯に変更。
mmc.cの次のdefineをコメントにする
//#define SELECT( ) P0 &= ~(1<<6) /* MMC CS = L */
//#define DESELECT( ) P0 |= (1<<6) /* MMC CS = H */
mmc.cのdefineの後に次の関数を追加
void SELECT( )
{
P0 &= ~(1<<6); /* SDC CS = L */
PCT &= ~(1<<6);/* LED ON */
}
void DESELECT( )
{
P0 |= (1<<6); /* SDC CS = H */
PCT |= (1<<6);/* LED OFF */
}
3)PCへの文字列送信のCRをCR+LFに変更。
main.cの xprintf("\n を xprintf("\n\r に全部置換します。


重要:SDカードに大事なデータがある場合は、PCでバックアップをしてから下記の実験をおこなってください。
文中のオーとゼロ、エルとイチ等、文字が紛らわしいので注意してください。
0123456789abcdefghijklmnopqrstuvwxyz
シリアル通信するにはTera Term等の通信ソフトが必要です。ハイパーターミナルでもかまいません。通信設定は以下のとおり。
ボーレート 115200bps
データ 8ビット
パリティー なし
ストップビット 1ビット
フローコントロール なし
USBを接続すると何かキーを押すまで待つようにしてあります。とりあえずリターンキーを押すと「FatFs module・・・ for V850ES」のメッセージが表示されます。
最初にSDカードにアクセスするには 以下の初期化コマンドが必須です。USB接続時またはSDカードを入れたときに必ずおこないます。
>di 0
>fi 0
次にディスクステータスを見みます。
>ds 0
16進ダンプがでてきました。ふむふむです。
次にセクターを覗いて見みます。なお2つめの0がセクター番号です。
>dd 0 0
大きい16進ダンプがでてきました。なるほどです。
次にディレクトリ、ファイル一覧を見てみます。
>fl
空のSDカードなので何も入っていませんでした。未フォーマットの場合はこの表示はされないので、フォーマットするにはfm 0 0 64とし、大文字のYキーにてフォーマットします。
次にディレクトリを作ってみます。tempという名前で作ります。
>fk temp
出来たか確認します。
>fl
tempができているのを確認できました。
次にファイルを作ってみます。ファイル名はtestです。ファイルモードはFA_WRITE|FA_CREATE_ALWAYSです。意味は、「書き込みモード。同名のファイルがある場合は、サイズ0にしてから開きます」です。
>fo 10 test
出来たか確認してみます。
>fl
testができているのを確認できました。
次に、ファイルに何か書いてみます。25バイト分、値12を書きます。
>fw 25 12
そして、ファイルを閉じます。閉じるとフラッシュされSDカードに書き込まれるようです。
>fc
書いたファイルを今度は読んでみます。
またファイルをオープンします。ファイルモードはFA_READ|FA_OPEN_EXISTINGです。意味は、「読み込みモード。既存のファイルを開きます」です。
>fo 1 test
ファイルポインタを0に戻しておきます。(fo直後は不要、fd2回目は必須)、ファイルポインタとはファイルのどこをアクセスするか、ファイル先頭から何バイト目かをあらわします。fd、fw、frなどをおこなうとアクセスしたバイト数分だけ値が加算されます。それで、もう一度頭からアクセスする場合は0に戻す必要があるわけです。なおディスクのFATとは関係ありません。
>fe 0
現在のファイルポインタから内容をダンプします。25バイト表示させます。
>fd 25
バッファに読み込んでから表示させることもできます。ファイルポインタを0に戻し、バッファを0でクリアして、バッファに25バイト読み込みます。
>fe 0
>bf 0
>fr 25
バッファをダンプします。0はバッファアドレスで、バッファのどこからみるかです。
>bd 0
最後にファイルを閉じます。
>fc
だいたいこんな感じです。まだまだ他のモニタコマンドがありますので、解析してみてください。