Sun 09/21, 2008

インターフェース誌 ColdFire 基板(10) [Electronics ]

少し日が開いてしまったけれど、先日作ったベースボードで FatFs for TOPPERS を動かしてみた。SD カード・スロットには秋月電子通商から購入したものを使用している。配線は本誌 3 章図 1(b) とほぼ同じ。プルアップ抵抗には 47KΩ。なお、この配線図はカード側の 2 と 3 番からの接続先が逆になっている。当初これに気が付かず正常動作しなかった。

プログラムの実行環境は SILENT_STUB として LAN 接続 GDB スタブから動作させる。

-bash-3.2$ m68k-elf-gdb
GNU gdb 6.8
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later 
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=i386-unknown-netbsdelf3.1 --target=m68k-elf".
(gdb) target remote udp:192.168.1.10:6000
warning: The remote protocol may be unreliable over UDP.
Some events may be lost, rendering further debugging impossible.
Remote debugging using udp:192.168.1.10:6000
^CQuit
(gdb) target remote udp:192.168.1.10:6000
Remote debugging using udp:192.168.1.10:6000
0x0002247c in ?? ()
(gdb) load jsp
Loading section .text, size 0x6df4 lma 0x28000
Loading section .rodata, size 0x904 lma 0x2edf4
Loading section .data, size 0x4 lma 0x2f6f8
Start address 0x28000, load size 30460
Transfer rate: 38 KB/sec, 204 bytes/write.
(gdb) c
Continuing.
^C
Program received signal SIGTRAP, Trace/breakpoint trap.
0x0002d480 in ?? ()
(gdb)

手元の環境では target コマンドでの GDB スタブへの接続は失敗することが多く、何度かボードのリセットと gdb の再起動が必要だったりする。うまく動いた場合、シリアルコンソール(9600bps)には次のような実行ログが表示される。

TOPPERS/JSP Kernel Release 1.4 (patchlevel = 3) for CQ-FRK-MCF52233/日本製 Made in JAPAN (Sep 13 2008, 21:05:35)
Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
                            Toyohashi Univ. of Technology, JAPAN
Copyright (C) 2004-2006 by Embedded and Real-Time Systems Laboratory
            Graduate School of Information Science, Nagoya Univ., JAPAN
Copyright (C) 2007 by Kurusugawa-Electronics Industory Inc
Copyright (C) 2008 by Takahisa Yokota



System logging task is started on port 1.
Sample program starts (exinf = 0).
test write: OK
test read: OK
test seek: OK
test mkdir: OK
Dir: 0:/
File: 0:/data.txt
Dir: 0:/sub1/
Dir: 0:/sub1/sub2/
Dir: 0:/sub1/sub2/sub3/
Check read only attribute of file 0:/stat.txt by PC.
test stat: OK
test rename: OK
test unlink: OK
Waiting for f_getfree() .....
14811136(0xe20000) bytes available on the disk.
Check free space by PC.
test getfree: OK
test unlink: clean
-- buffered messages --
Sample program ends.

このように MMC 操作はエラーも無く終了する。

ところがプログラムを少し変えて PC で書いたテキストファイルを読ませたり、FatFs で書いたテキストファイルを PC で読み込む実験をしてみると、前者は OK なのだが、後者はディレクトリエントリは表示されるものの手元の PC (Windows XP/SP3) ではファイルを開くことができない。良く見るとエクスプローラの表示で更新日時が空になっている。NetBSD (3.1R)機でマウントすれば参照はでき、こちらで touch ファイル名とすれば更新日時が記録されて Windows 機でも参照できるようになった。これは FatFs ではディレクトリエントリの 23 バイト目からの最終更新日時がすべて 0 になってしまうためだと思われる。FAT32 の仕様書ではこれらのエントリ(DIR_WrtTime, DIR_WrtDate)は必須とされているようだ。

Posted by masato at 06:22 PM
このエントリーのトラックバックURL: http://bird.dip.jp/cgi-bin/mt/mt-tb.cgi/1629
コメントする

おそらく携帯電話等からは投稿できません。日本語文字列を含まないコメントやトラックバック、および当サイトへの言及を含まないトラックバックは御遠慮いただいております。また、90日以上経過した記事へのコメントはできません。










名前、アドレスを登録しますか?