メインページへ

PIC18F2550を使ってSDメモリ・リーダー/ライター
(秋月電子USBマイコンボードでUSBマスストレージデバイス)

秋月電子製のUSBマイコンボード(PIC18F2550搭載)を使用してSDメモリーカード・リーダー/ライターを作成しました。
これを自作機器に応用すると、PCからはUSBマスストレージデバイスとして認識されるため、PC側のアプリケーション を開発しなくても、既存のPCアプリケーションからから自作機器のSDメモリーカードにアクセスすることができる ようになります。
ただし、残念なことにマイクロチップ・USBフレームワーク(MCHPFSUSB Framework v2.4)に同梱のFATシステムは 使用するメモリの容量が多く、今回使用したUSBマイコンボード(つまりPIC18F2550)には載せることができませんでした。 マイコン側のFATシステムは必要最小限の機能のものを自作する必要がありそうです。

記 2009/6/12

SDメモリカード接続基板セット

SDカードとPIC18F2550を接続するための回路図と完成写真を以下に示します。PIC18F2550とSDメモリカードの動作電圧の 違いから以下のような構成になっています。他の実験にも使用したいと思い、汎用性を考えたら3枚構成になってしまいました。
PIC18F2550は5Vで、SDメモリカードは3.3Vで動作するので、中央の基板で3.3Vの電圧レギュレータと信号レベルの変換用に 74VHC244を使用しています。
左の基板はH8で実験したときに作成した基板でありコネクタの変換を行っているだけのものです。今回の実験でもなんとなく そのまま使っただけなので、特に意味のあるものではありません。

SDメモリーカード変換基板セット回路図 SDメモリーカード変換基板セット写真

PIC18F2550のマザーボード

PIC18F2550搭載のUSBマイコンボードを載せるマザーボード基板の回路図と写真を以下に示します。
この基板はSDメモリカード接続以外の別の実験にも使用していたため、今回の実験では使用しない部品が含まれています。
電源レギュレータU2、書き込みデバッグ用コネクタCN4,SDメモリカードとの接続コネクタCN5とこれらの周辺部品は必要ですが、 LED、RS-232C用のICとこれらの周辺部品はUSBマスストレージのファームウェアでは一切使用していません。

PIC基板回路図 PIC基板写真

すべて接続したときは以下のようになります。

すべて接続した写真



USBマスストレージ・ファームウェアの生成

USBマスストレージ・ファームウェアの生成は以下の環境・バージョンで行いました。
PICファームウェア開発環境
MPLAB IDEV8.10.00.00
MPLAB C18 コンパイラ Student EditionV3.22
WindowsXPSP3
MCHPFSUSB Frameworkv2.4

「マイクロチップUSBフレームワーク(MCHPFSUSB Framework)」

PIC18F2550のUSBファームウェアの開発には、マイクロチップ社が提供する「マイクロチップUSBフレームワーク(MCHPFSUSB Framework)」 を使用することができます。
「マイクロチップUSBフレームワーク(MCHPFSUSB Framework)」には、USB機能を内蔵したPICマイクロコントローラのUSB機能を 使用するためのライブラリとサンプルのアプリケーションが含まれています。このサンプルアプリケーションを参考、 または修正することにより目的のファームウェアを開発できるようになっています。
「マイクロチップUSBフレームワーク(MCHPFSUSB Framework)」はマイクロチップ社のウェブサイトから無料でダウンロードすることができす。 入手先:MCHPFSUSB Framework v2.4

USBマスストレージ・サンプルアプリケーションの選択

「マイクロチップUSBフレームワーク(MCHPFSUSB Framework)」のインストールが完了すると"Microchip Solutions"という フォルダがCドライブに作成されます。"Microchip Solutions"フォルダの中には"Microchip"フォルダを含めて数多くのフォルダ が存在します。"Microchip"フォルダ以外のフォルダはサンプルアプリケーションのフォルダであり、フォルダ名でどのような 機能のサンプルなのかが分かるようになっています。
"Microchip"フォルダにはUSBの様々なクラス機能やFATファイルシステムなどのソースコードやヘッダファイルが格納されており、 必要に応じてこれらのファイルをプロジェクトに追加して使用します。

作成したいファームウェアに完全に合致したサンプルアプリケーションがあれば一番楽なのですが、残念ながら今回の目的に 完全に合うサンプルアプリケーションはありませんでした。そこで、数あるサンプルアプリケーションの中から一番改造しやすそうな ものを選んで改造することになります。"Microchip Solutions"フォルダの中でUSBマスストレージデバイスに対応しているサンプル アプリケーションは以下の3つです。

  • USB Device - Mass Storage - Internal Flash
  • USB Device - Mass Storage - SD Card data logger
  • USB Device - Mass Storage - SD Card reader
この中から一番改造しやすそうなサンプルアプリケーションを選びます。それぞれのフォルダの中にあるプロジェクトファイル (拡張子がmcp)やリンカースクリプトファイル(拡張子がlkr)から、対応しているMCUを把握することができます。今回使用する PIC18F2550に対応したものがあればよいのですが、これも残念ながらありませんでした。しかし"USB Device - Mass Storage - Internal Flash" ではPIC18F4550に対応しています。PIC18F4550はピン数と一部機能を除いてPIC18F2550とほぼ同じです。よって、このサンプルアプリ ケーションから目的のファームウェアを生成することとします。

USBマスストレージ・サンプルアプリケーションの改造指針

  1. PIC18F2550に対応させる:

    "USB Device - Mass Storage - Internal Flash"のプログラムコードは複数のMCUに対応するように構成されています。 これは、コンパイル対象MCUによって条件つきコンパイルが分岐することにより実装されています。
    今回の用途では、基本的にはMCHP FS USB デモボード用、つまりPIC18F4550を使用するときと同じコンパイルが行われれ ば良いので、PIC18F2550を対象MCUとした場合にMCHP FS USB デモボード用のコンパイルが行われるように修正します。

  2. SDメモリカードを対象にする:

    "USB Device - Mass Storage - Internal Flash"は本来、内蔵EEPROMを読み書きの対象とするUSBマスストレージデバイスの ファームウェアなので、これをSDメモリカードを読み書きの対象とするUSBマスストレージデバイスとするための修正をおこないます。


PIC18F2550に対応させるための修正

PIC18F2550に対応させるための修正手順を以下に示します。
  1. "USB Device - Mass Storage - Internal Flash"フォルダを一旦別のフォルダに移動してフォルダ名を "Mass StoragePIC18F2550"に変更後、"Microchip Solutions"フォルダに戻します。 (インストールしたフォルダをそのままとっておきたいので)
  2. "Mass StoragePIC18F2550"フォルダ内に有る"Firmware"フォルダ内の不要なファイルを削除。 削除ファイル一覧
    (必要なファイルを明確にすることと、目的のファイルを探しやすくすることが目的なので必ずしも ファイルの削除が必要なわけではありません。)
  3. MPLABを起動して"Firmware"フォルダのUSB Device - Mass Storage - Internal Flash Demo - C18 - PICDEM FSUSB.mcp プロジェクトを開く。
  4. メニューのConfigure→DeviceSelectでDeviceをPIC18F2550に変更する。
  5. ブートローダーを使用しないように、また、PIC18F2550に対応するようにリンカースクリプトを修正します。 Mass StoragePIC18F2550のリンカースクリプトファイル
  6. HardwareProfile.hの #if defined(__18F4550) を #if defined(__18F2550)に修正。
ここまでの手順を終えてコンパイルすると内蔵EEPROMを読み書きの対象としたUSBマスストレージデバイスのファームウェア が出来上がります。 実行ファイルをPICに書き込んでUSBケーブルでPCに接続すると大容量記憶装置として認識されます。
WindowsXPのエクスプローラではマイコンピュータの中に"Drive Name(F:)"というドライブが追加され、その中に"FILE.TXT"という ファイルが入っていることが確認できます。

SDメモリカードに対応するためのプロジェクト構成の変更とソースコードの修正

  1. MPLAB IDE のプロジェクトウインドウで"Source Files"の"MDD File System"の中から"InternalFlash.c"を除外して 代わりに"C:\"Microchip Solutions\Microchip\MDD File System"内の"SD-SPI.c"を追加。
  2. MPLAB IDE のプロジェクトウインドウで"Header Files"の"MDD File System"の中から"InternalFlash.h"、"FSIO.h"、 "FSDefs.h"を除外し、"C:\Microchip Solutions\Microchip\Include\MDD File System"内の"SD-SPI.h"を追加します。
  3. MPLAB IDE のプロジェクトウインドウで"Source Files"の中から"Files.c"を除外します。
  4. "main.c","HardwareProfile.h","FSconfig.h","HardwareProfile - PICDEM FSUSB.h"の内容を修正します。
    詳細はこの Mass StoragePIC18F2550プロジェクト 内のソースコードを参照ください。
以上のプロジェクトをコンパイル後、PIC18F2550に書き込むことでSDメモリーカード・リーダー/ライターが完成します。