ホームページ>H8をMacで>その7b・TOPPERSに移行する(ファイルシステム編)
目次
その7b・TOPPERSに移行する(ファイルシステム編)
目的と経緯
以下は、マイコンボードのOSをMESからTOPPERS/JSPに移行した際の覚書です。
ここでは、TOPPERS/JSPにSDカードベースのファイルシステム機能を追加するため、FatFsというモジュールを組み込みます。
ただし、調べた限りでは、H8/3069F + SDカードI/F + TOPPERS/JSP + FatFsの、そのものズバリのサンプルは公開されていないようなので、あれこれ継ぎ剥ぐことになりました。
なお、現状では完動はしていませんが、めどは立ったということで、記しておきます。
注)今回のjspはTINETを含んでいない、オリジナルを用いています。TINETとFatFsの合体は、今後の課題です。
現状確認と方針
TOPPERSの公式サイトでは、FatFs for TOPPERSが公開されています。ただしこれは、
であり、共通点が全くありません。
プロセッサ SH3(SH7727) ボード MS7727CP01(日立超LSIシステムズ) PCカード・コントローラ MR-SHPC-01 V2T-F(丸文) PCカード・アダプタ PCCF-ADP(I/O DATA) 記録メディア コンパクト・フラッシュ・カード
一方、FatFsの作者様のサイトでは各種サンプル・プロジェクトが公開されていますが、H8向けは、
で、こちらも、そのまま適用できるものではありません。
プロセッサ H8/3694F ボード 自作? 記録メディア MMC/SD OS 使用せず IDE HEW
ここで考えなければならないことは、
まず、全体の構成は、FatFs for TOPPERSを流用することとします。
- 全体の構成をどうするか?
- ドライバをどう組み込むか?
- ハードウェアとの整合性をどう取るか?
理由は、FatFs for TOPPERSがドライバ部分を独立した構成にしているため、差し替えが容易なのと、Makefile等を一から書かなくて済むことです。
次にドライバは、FatFs作者様のH8/3694F用サンプルを使わせて頂くことにします。
ドライバの切り口は、FatFs for TOPPERSと一致している(というか、TOPPERS側がFatFsに合わせ込んでいるようだ)ので、基本的にはソースファイルを移動してくるだけで済みます。
最後にハードウェアとの整合性ですが、MESではPBポートをシリアルポートとして使っていたのですが、これを通常のI/Oポートとして使用することとし、一部の配線を変更します。
ドライバのソースを見ると、クロックはハードウェアではなく、ソフトウェアで実現しています。(どうも「手クロック」と呼ぶらしい。)また、ハードウェアに合わせて、ドライバのI/Oピン周りの設定を書き換えます。
そこで、SDのCLK端子を、従来のSCK2(38番ピン)からPB3(36番ピン)に移動します。
変更前 変更後 注)上段:ピン番号、下段:信号名
2 - 32 34 36 38
SCK240
RxD21 - 31 33
PB035 37 39
TxD2
注)上段:ピン番号、下段:信号名
2 - 32 34 36
PB338 40
PB71 - 31 33
PB035 37 39
PB6
(マニュアルを読むと、PB5は汎用のI/Oピンとしては使えないようだったので移動しました。自分の理解が間違っているかもしれませんが…)
(追記:完全に間違っていました。PB5でも問題なく使えます。)(2009.12.11)
なお、H8/3694F用サンプルでは、カード挿抜によるパワーオン/オフ、ライトプロテクトにも対応しているようですが、ウチでは使わないので、とりあえず無視しています。
そのためには、iodefine.hという、レジスタへのアクセスを容易にするMPU固有のファイルがあると便利なのですが、ドライバのサンプル・プロジェクト添付のものはH8/3694F用なので使えません。
今回はルネサスの統合環境であるHEWをWindowsマシンにインストールし、H8/3069用のプロジェクトを新規作成することで取得しました。
ファイルだけを入手できるのかは不明です。
追記:jsp/config/h8/h8_3069f.hが、iodefine.hに相当するファイルのようです。ただし、defineの書式が異なるので、h8_3069f.hを用いる場合は、当該箇所を適宜書き換えて下さい。(2009.02.18)
必要なものを入手する
FatFs for TOPPERSは、以下の公式サイトからダウンロードできます。
参考サイト(1):TOPPERSプロジェクト/INDEX
FatFsサンプルは、以下の作者様のサイトからダウンロードできます。(資料の「サンプル・プロジェクト 」)
参考サイト(2):えるむ(ELM - 汎用FATファイルシステム・モジュール)
また、HEW(Windows用)は、以下のメーカサイトからダウンロードできます。(要ユーザ登録)
参考サイト(3):ルネサス テクノロジ(無償評価版ソフトウェアダウンロード>H8SX, H8S, H8ファミリ用C/C++コンパイラパッケージ)
作業の記録
以下は対症療法的試行錯誤の結果を整理したものです。漏れや何か問題がある可能性があります。
<ディレクトリの再編成>
<Makefileの編集>
- fatfs-for-toppers-r0.04.tar.gzを展開し、できたtoppers_fatfsフォルダを~/Documents/h8-Toppers/に置いた。
- toppers_fatfs/jspを、最新のもの(jsp-1.4.3.tar.gz)に置き換え。
- toppers_fatfs/source/から、ata , pcicフォルダを削除。
- toppers_fatfs/source/config/内の「sh3_ms7727cp01」フォルダを「h8_akih8_3069f」にリネームし、ff_cfg.h , Makefile.fatfsを除いて他を削除。
- ffsample.zipを展開し、できたffsampleフォルダを(任意の場所に)置いた。
- ffsample/h8/h8_mmc/から、mmc.cを、toppers_fatfs/source/config/h8_akih8_3069f/にコピー。
- ffsample/h8/h8_mmc/から、diskio.hを、toppers_fatfs/source/fatfs/にコピー(同名のファイルがあるので差し替えになる)。
- HEWを用いてiodefine.hを生成し、toppers_fatfs/source/config/h8_akih8_3069f/にコピー。
<ソースの編集>
- toppers_fatfs/sample/sample1.cfg
#include "../source/config/sh3_ms7727cp01/pcic.cfg"をコメントアウト(または削除。以下も同様)
- toppers_fatfs/sample/Makefile(以下の項目を書き換え)
# ターゲット名の定義
CPU = h8
SYS = akih8_3069f
# ミドルウェアのMakefileをインクルード
include $(FATDIR)/config/h8_akih8_3069f/Makefile.fatfs
- toppers_fatfs/source/config/h8_akih8_3069f/Makefile.fatfs(#有はコメントアウト、#無は書き換え)
# ミドルウェアのディレクトリ
#PCIC_GDIC = $(FATDIR)/pcic/gdic
#PCIC_PDIC = $(FATDIR)/pcic/pdic/mrshpc01v2t
…
#ATA = $(FATDIR)/ata
…
MTASK_DIR = $(PCIC_CONFIG):$(FAT)
# ミドルウェアの C 言語のオブジェクトファイルを追加する.
#PCIC_COBJ = pcic.o mrshpc01v2t.o
#ATA_COBJ = ata.o ata_command.o ata_command_protocol.o hw_ata.o
FAT_COBJ = ff.o mmc.o
MTASK_COBJS = $(FAT_COBJ)
# ミドルウェアをコンパイルするときのオプションを指定する.
…
INCLUDES = -I$(FATDIR) -I$(PCIC_CONFIG) -I$(FAT)
- toppers_fatfs/source/fatfs/ff.c
最後に追加(注:入れる場所は検討の余地あり。未実装なのはコピー元のFatFs for TOPPERSがそうなっているため)
/* * 日付・時刻の取得 * ToDo:未実装 */ DWORD get_fattime(void) { return ((DWORD)0); }- toppers_fatfs/source/config/h8_akih8_3069f/mmc.c
//#include "machine.h" // コメントアウト /* Control signals (Platform dependent) */ //#define MMCLK IO.PDR5.BIT.B0 /* MMC SCLK */ //#define MMDI IO.PDR5.BIT.B1 /* MMC DI */ //#define MMDO IO.PDR5.BIT.B2 /* MMC DO */ //#define MMCS IO.PDR5.BIT.B3 /* MMC CS */ //#define SELECT() MMCS = 0 /* MMC CS = L */ //#define DESELECT() MMCS = 1 /* MMC CS = H */ #define MMCLK PBDR.BIT.B3 /* MMC SCLK */ // MESベースから変更 #define MMDI PBDR.BIT.B6 /* MMC DI */ // MESベースと変更なし #define MMDO PBDR.BIT.B7 /* MMC DO */ // MESベースと変更なし #define MMCS PBDR.BIT.B0 /* MMC CS */ // MESベースと変更なし #define SELECT() MMCS = 1 /* MMC CS = L */ // ハードウェアで論理が反転している?ので逆を指定 #define DESELECT() MMCS = 0 /* MMC CS = H */ // ハードウェアで論理が反転している?ので逆を指定 //#define SOCKPORT IO.PDR5.BYTE /* Socket control port */ #define SOCKPORT PBDR.BYTE /* Socket control port */ … void power_on (void)は(ウチでは使わないので)全文コメントアウト void power_off (void)は(ウチでは使わないので)全文コメントアウト … DSTATUS disk_initialize ( … ) { PBDDR = 0x49; /* I/O port の種別を指定(入れる場所は検討の余地あり) */ … // power_on(); /* Force socket power on */コメントアウト … // power_off();コメントアウト … }
ビルドする
ビルドはマニュアルを参考に、以下の手順で行いました。
- gccの場所にパスを通す。(あらかじめ設定してあれば不要。)
$ export PATH=/Applications/h8/Local/bin:${PATH}
- カーネルのコンフィギュレータをビルドする。
$ cd /Users/hoge/Documents/h8-Toppers/toppers_fatfs/jsp/cfg
$ make depend
$ make
- サンプルプログラムをビルドする。
$ cd /Users/hoge/Documents/h8-Toppers/toppers_fatfs/sample
注)jsp.srecはsampleフォルダにできます。
$ make depend
$ make
動作テスト
今回は(も?)不確定要因が多すぎるため、テスト項目はディレクトリ・ツリーの表示に絞って行いました。
そのため、toppers_fatfs/sample/sample1.cの、main_task内の「各種テスト関数の呼び出し」で、test_dir();以外をコメントアウトし、ビルドし直しました。
ビルドしたjsp.srecをMac-H8ToppersからH8 用簡易モニタにアクセスしてRAMに転送し、実行してみました。
結果、ディレクトリ・ツリーが表示されました。
注)disk_initialize行とauto_mount行はウチで追加したものです。また、多くのファイル名が文字化けしていますが、これは以前からSDカードに入っていたファイルで、日本語かつロングファイルネームなため、このように表示されるのは仕様です。どうやら、ハードウェアとドライバの整合性、ドライバとOSの整合性は、ともに問題なさそうです。
これで、第一関門はクリアできたとみてよさそうです
さて、今回のもう一つの成果は、MESではマウントできなかった128MBのSDカードにもアクセスできるようになったことです。(こちらを参照)
やはり、マウントできなかったのはハードウェアレベルの問題ではなく、MESとSDカードの相性?だったようです。
小容量のSDカードは(今や他に)殆ど使い道がないため、H8ボードで利用できるようになったのは嬉しいです。
今後の課題
まだRead/Writeはできていませんし、サブフォルダへのアクセスもおかしな感じなので、まずは全機能が動作することを確認できるまで、追い込んでいきたいと思います。
(注:その後判明したこと等はこちらに記してあります。)
「その8・uClinuxに浮気してみる(ハイブリッド編)」へ続く
「その7c・TOPPERSに移行する(シリアル転送編)」へ続く
お世話になったサイト
有用なソフトウェアおよび貴重な情報をご提供頂いている皆様に、お礼申し上げます。(以下、順不同)
参考サイト(1):TOPPERSプロジェクト/INDEX
参考サイト(2):えるむ(ELM - 汎用FATファイルシステム・モジュール)
参考サイト(3):ルネサス テクノロジ
更新履歴
2009.12.12 「現状確認と方針」に追記を追加。「今後の課題」にリンクを追加。
2009.02.18 「現状確認と方針」に追記を追加。
2009.02.17 新規作成
[Home] [MacSoft] [Donation] [History]