■ BASCOM-AVR (DEMO) の使用方法 ■

AVR-DOS (Disk Operating System)の使用方法
 
 BASCOM-AVRには、AVR-DOSと言う本格的なDOS (Disk Operating System)が搭載されており、各種ディスクへの読み書きが簡単に行えます。
 また、CFカード(コンパクトフラッシュ)やSD/MMCカード、さらには、ATAハードディスクまで、ライブラリが用意されています。



● まえがき
 
 ・今回、MP3サウンドユニットを製作したいと思い、SDカードの規格を調べ始めました。
 ・ディスクシステムと言えば、ディレクトリ・FAT・セクタ・クラスタなど、聞き慣れない言葉がたくさん
  出てきます。
 ・思い起こせば、PC-9801のFDC「μPD765A」を使い倒し、「書き継ぎ点プロテクト」 (この言葉を
  知っている方は、当時ハッカーと呼ばれていたはず)を解析した感動が思い出され、いまだに
  μPD765Aのマニュアルを捨てられずにいます。
 
 ・色々思い出しながらの、難解な作業になると覚悟をしておりました。
 ・ところが、AVR-DOSは、セクタ単位の読み書きだけではなく、ファイル管理もすべて用意されて
  おり、いとも簡単にディスクシステムが出来上がってしまいました。
 
 ・さすがに、BASCOM-試用版の制限範囲では、簡単な読み書きのテストしか行えませんが、
  このAVR-DOSの利用だけでも、BASCOM-製品版を購入する価値があると思います。
 
 ・AVR-DOSは、BASCOM-AVRと別のライセンス規約があり、商業用のアプリケーションに
  使用する場合は、別途AVR-DOS用のライセンスを購入する必要があります。


● AVR-DOSの動作条件
 
 ・AVRへの要求スペックは、下記の通りです。
   ○ フラッシュ・メモリー 4Kバイト以上。
   ○ SRAM 2Kバイト以上。
     ※ 最小構成時 (ファイルハンドル数 = 1 , ディレクトリとFATを共用)
        DOS使用 1,138バイト+スタック 384バイト=1,522バイト
     ※ 最大構成時 (ファイルハンドル数 = 2 , ディレクトリとFATは別に確保 [速度重視])
        DOS使用 2,193バイト+スタック 384バイト=2,577バイト
   ○ SD/MMCカードは、ソフトウェアSPI(通常ポート)と、ハードウェアSPI(専用ポート)の
     両方に対応。

 ・ディスク仕様
   ○ FAT16とFAT32に対応。
     (フォーマット命令はありませんので、パソコンでフォーマットして下さい)
   ○ 短いファイル名。 (ファイル名 8文字 + 拡張子 3文字)
   ○ 長いファイル名は、短縮された形で対応します。
   ○ ルート・ディレクトリのファイル数は最大512個。(長いファイル名使用時は、個数が減ります)
   ○ サブ・ディレクトリにも対応。


● AVR-DOSの設定プログラム
 
 AVR-DOS及び、各ハードウェア用に、動作設定用の組み込みプログラムが用意されています。
 使用するハードウェアに合わせて設定し、ユーザー・プログラムに組み込んで下さい。

 ◆ スタックに使用するSRAM領域を確保する。
 
  ・AVR-DOSは、ハードウェア・スタック、ソフトウェア・スタック、フレーム領域を多く必要とします
   ので、それぞれを確保するための設定を記述します。
 
$hwstack = 128
$swstack = 128
$framesize = 128
'ハードウェア・スタックの容量を設定。
'ソフトウェア・スタックの容量を設定
'フレーム領域の容量を設定。

 ◆ ドライバー・インターフェースのライブラリを組み込む。
 
  ・下記のいずれかの組み込みプログラムを選択します。
 
$include "Config_CompactFlash_ElektorIF_M128.bas"
$include "Config_CompactFlash_M128.bas"
CFカード (コンパクト・フラッシュ)
$include "Config_HardDisk.bas" ハードディスク・ドライブ
$include "Config_MMC.bas" (下記に日本語版あり) SDカード (2Gバイトまで)
$include "Config_MMCSD_HC.bas"
 (下記に日本語版あり)
SDカード (2Gバイトまで)
SDHCカード (2G〜32Gバイトまで)
  (ATXmegaでも動作可)

  ・SD/MMCカードのピン設定プログラムの詳細。
 
   Config_MMC_JP.bas ([Config_MMC.bas]を日本語訳したものです)
   Config_MMCSD_HC_JP.bas ([Config_MMCSD_HC.bas]を日本語訳したものです)
 
  ・この組み込みプログラムは、ユーザーが作成するプログラムと同じフォルダに置いて下さい。
  ・BASCOM-AVRで開くことができますので、下記の設定を行って下さい。
 
   ○ 設定項目(1) − ハードウェアSPI(専用ポート)と、ソフトウェアSPI(任意のポート)の選択。
 
     以下は、ハードウェアSPI(専用ポート)用の設定。 (Xmega用とXmega以外用)
   ○ 設定項目(2a.b) − MMC/SDカードの[/CS]端子を接続するAVRのポートピン番号。
   ○ 設定項目(3a.b) − AVRのハードウェアSPIの[/SS]ポートピン番号。 ([/CS]と同じで可)
   ○ 設定項目(3c) − 使用するAVRの[MISO]ピン番号。
   ○ 設定項目(4) − SPIに関する詳細設定。 (通常は変更無し)
 
     以下は、ソフトウェアSPI(任意のポート)用の設定。 (Xmega用とXmega以外用)
   ○ 設定項目(5a.b) − MMC/SDカードの[/CS]端子を接続するAVRのポートピン番号。
   ○ 設定項目(6a.b.c.d) − MMC/SDカードの[DI]端子を接続するAVRのポートピン番号。
   ○ 設定項目(7a.b.c.d) − MMC/SDカードの[DO]端子を接続するAVRのポートピン番号。
   ○ 設定項目(8a.b.c.d) − MMC/SDカードの[SCK]端子を接続するAVRのポートピン番号。
 
  ・設定終了後は、コンパイルせずに、そのまま上書き保存して下さい。

 ◆ ドライブの状態を確認する。
 
  ・ドライバーのライブラリを組み込むと、ドライブの状態を確認して、内部変数にドライブの状態が
   数値で入ります。
 
If Gbdriveerror <> 0 Then Goto Driveerr 'If ドライブのエラーが発生したか? Then

内部変数名 状   態
Gbdriveerror 0 : エラーなし。
0以外 : エラーあり。
SD/MMCカード用
Mmcsd_cardtype
0 : カードを検出できない。
1 : MMC。
2 : SDSC スペック 1.x。
4 : SDSC スペック 2.0 以降。
12 : SDHC スペック 2.0 以降。

 ◆ AVR-DOSの動作設定プログラムを組み込む。
 
$include "CONFIG_AVR-DOS.bas"
 (下記に日本語版あり)
'AVR-DOSの設定プログラムを組み込む。
 
   CONFIG_AVR-DOS_JP.bas
   (BASCOM-AVR付属の [CONFIG_AVR-DOS.bas] を、日本語訳したものです)
 
  ・この組み込みプログラムは、ユーザーが作成するプログラムと同じフォルダに置いて下さい。
  ・BASCOM-AVRで開くことができますので、ファイルシステムの設定変更をする場合は、
   コメントに従って設定して下さい。
 
  ・設定終了後は、コンパイルせずに、そのまま上書き保存して下さい。

 ◆ ディスク・ドライブの初期化。
 
  ・ディスク・ドライブを初期化して、ドライブの状態を確認します。
  ・初期化の際に、汎用のバイト変数が必要なので、任意の名前で宣言します。
  ・INITFILESYSTEM(1)のカッコ内は、ディスクのパーティション番号です。
  ・変数の内容が[0]の場合はエラー無し、[0]以外の場合は下記の「AVR-DOSのエラーコード表」
   を参照して下さい。
 
Dim Temp1 As Byte
Temp1 = Initfilesystem(1)
If Temp1 <> 0 Then Goto Avrdoserr
'汎用テンポラリ変数 Byte型 No.1
'ファイル・システムを初期化する。
'If AVR-DOSエラーが発生したか? Then

  ・SDカードを交換(カードをソケットから取り出す)した場合、ドライブに付けられたAVRの
   ポートピンをリセットするために、再びDRIVEINIT()およびINITFILESYSTEM(1)を実行する
   必要があります。
  ・これにより、ドライブをリセットして、再度ファイルシステムを初期化します。
 
Gbdriveerror = Driveinit()
If Gbdriveerror <> 0 Then Goto Driveerr
Temp1 = Initfilesystem(1)
If Temp1 <> 0 Then Goto Avrdoserr
'MMC/SDドライブを初期化する。
'If ドライブのエラーが発生したか? Then
'ファイル・システムを初期化する。
'If AVR-DOSエラーが発生したか? Then


 ・使用例は、AVRにSD/MMCカード・スロットを接続 を参照。


● AVR-DOSのエラーコード表

0 エラーなし。
1 ファイルの終わりに達しています。
17 カードのセクタ0が、マスタ・ブート・レコードでありません。
18 パーティション・セクターはありません。
19 FAT16 ファイル・システムだけがサポートされます。
20 512バイトのセクタ・サイズだけが、サポートされます。
21 1つのクラスタは、1、2、4、8、16、32、64セクタだけが、サポートされます。
22 サポートされていないクラスタの数です。
33 ファイル・クラスタ・チェーン・エラー。
34 割り当てる空きクラスタがありません。(ディスク・フル)
35 ファイル・クラスタ・チェーン・エラー。
49 ディレクトリが一杯です。
50 ファイルが無効です。
51 ファイルが削除できません。
52 サブ・ディレクトリが空ではありません。
53 サブ・ディレクトリ・エラー。
54 サブ・ディレクトリではありません。
65 利用可能なファイル番号がありません。
66 ファイルが見つかりません。
67 そのチャンネル番号のファイル・ハンドルがありません。
68 ファイル・ハンドルがすべて使用中です。
69 使用中の同一番号のファイル・ハンドルは作成できません。
70 使用中のファイルを、2つのファイル・ハンドルで開きました。
71 ファイルが使用中なので削除できません。
72 読み取り専用のファイルを、書き込みモードで開けません。
73 ワイルドカードは、この命令で使用できません。
74 チャンネル番号0は使用できません。
97 ファイル・ポジション・エラー。
98 この命令は、ファイルを開くモードで使用できません。
99 新しいファイル・ポインターが無効です。 (マイナスまたは0)
100 BLOAD命令のファイル・サイズが大き過ぎます。


● 開くモードと命令の有効性

命 令 モ ー ド
Input Output Append Binary
INPUT    
WRITE  
LINE INPUT    
PRINT  
GET      
PUT      
LOC
SEEK(指定)      
SEEK(調査)
LOF
EOF    




   電子工作の部屋 Top へ 前のページへ戻る