• 目次 -Page-
  • コンテンツ -Menu-
  • リンク -link-
  • SDカードを扱うということ
  • 「SDカードからデータを読み出したい」という願望は電子工作をやっているといつしか出てくるものです。 しかしどうすればいいのか、何が必要なのかという事はなかなか知る方法がありません。 また、SDカードから情報を得るためには2つの難関を突破しないといけないのです。
     
    (1)マイコンとSDカードの通信
    (2)ファイルシステム
     
    マイコンとSDカードを通信で繋ぐ場合、工作レベルで用いられてる方法に「SPI通信」があります。 SPIはマイコンに搭載された機能により、簡単に通信が確立されるのです。 更に高速にアクセス出来る「MMCモード」というものが存在しますが、ここでは紹介しません。 まずは簡単にマイコンからSDカードのデータにアクセスしましょう。
     
    (2)のファイルシステムが難解中の難解でした。マイコンとSDカードが通信出来たとしても、 カードの中身を読み出すことが出来ないからです。パソコン等で主に用いられている「FATファイルシステム」を 理解し、順をおってコマンドを送りデータをもらう必要があるのです。
     
    簡単にディスクの中身が確認を出来るソフトを一つ紹介しておきます。
    下記のソフトでSDカードの中身を確認しながらテストしていくのが近道です。
     
    ディスクダンプエディッタ
    http://www.vector.co.jp/soft/win95/util/se091045.html
     
    ここではこれから「FATファイルシステム」の構造について書いていきます。
  • FATファイルシステムってなに?
  • FATはファイルのデータを記憶するための方式の事です。 セクタと呼ばれる採集記憶単位があり、通常512バイトなのでデータを読み込むのに512バイト分の RAMがないと処理が追いつかない(出来ない)。つまりはどんなマイコンでもいいわけではなく、 「512バイト+プログラムが使用するRAM容量」を確保できるマイコンが必要になってくる。
     
    今回はFAT12を使うので必然的に扱える最大容量が2GBまでとなる。
    この説明は後に行うことにして、プログラムでアクセスする場合の流れだけを書いておきます。
     
    セクタの読み出しにはbuffer[0]-buffer[511]を使う事にする。
    (1)SDCの先頭を512バイト分読み出す。
    (2)buffer[454]-buffer[457]にセクタのオフセット値が書かれている。
    (3)セクタのオフセット値から「セクタ0」のアドレスを計算する。
    (4)「セクタ0」を読み込むと情報がいっぱい入手できる。
    (5)読み取ったデータからディレクトリの開始位置を計算する。
    (6)ディレクトリに移動しさらにセクタ情報を読み込む。
    (7)ファイルの先頭セクタを計算で求める。
    (8)ファイルの容量を得る。
    (9)ファイルへ移動する。
      ・
      ・
      ・
     
    間にいっぱいすること、知らなければいけないことがいっぱいあるけど、それは次に書いていく事とする。 ここでは簡単にはファイルにアクセスできそうにないなぁと思ってほしい。
     
    また、クラスタというものが存在する。クラスタはセクタを管理する為にあります。セクタが512バイトずつだと すると512バイト以上のファイルの場合どうなるのでしょうか?連続したセクタにデータが記憶されればいいですが、 そうでない場合も多々あります。断片化という感じになるとファイルのデータはあちこちに存在します。 そのあちこちにあるデータがどこにあるのかを示すのがクラスタです。クラスタを順番に読み出し、ファイルのデータ 位置を確認しながら順にセクタへアクセスしていきます。そうですね。先ほどの説明(1)-(9)には出てきてないので この作業も別に必要だという事です。 詳しくは下記を参照して下さい。
     
    WikipediaのFATの説明
  • SDCの一番先頭アドレス0とセクタ0 覚書
  • アドレス0ではオフセット値が入手できます。
    セクタ0からは沢山の情報が入手できます。
    ※FAT12フォーマットの例
     
    ※ 解釈が間違ってるかも知れませんので他の書籍と補完して下さい。
  • ディレクトリ・ファイル名  +  クラスタ
  •  
    ※ 解釈が間違ってるかも知れませんので他の書籍と補完して下さい。
  • 雷神双龍が学んだ本の紹介
  • PCカード/メモリカードの徹底研究―規格の概要からカード/ホストコントローラ/ドライバの設計/製作 (TECH I)
     
    フラッシュ・メモリ・カードの徹底研究―カードとマイコンの接続技法からファイル・システムの移植まで (TECH I Bus Interface)
     
    上記2冊で勉強しました。「PCカード・メモリカードの徹底研究」でSDカード(MMCカード)の制御方法の始めであるコマンドによる初期化を学び、 「フラッシュ・メモリ・カードの徹底研究」でデータの扱いを学んだような感じでした。 本の感じでは「トランジスタ技術」的ではなく、「インターフェース」っぽい感じの作りとなっています。 実装するまで行きませんでしたが「組み込み向けFATファイル・システムのFFSの概要」の項は面白そうでした。 結局は自前でFATを理解して制御するプログラムを作ったのですが。
    Design & Programming - 天姫 -
    Copyright (c) 2007-2009 amahime All Rights Reserved.