SDカードのリード(読み込み)トライアル 玉砕中! - MP3プレーヤー自作

Posted by kyosuke at 04/07 2008
>>前の記事: SDメモリカードスロットを電子工作用に変換



やっかいだ、
やっかいだ、
ほとほとやっかいだ。

SDカードから、
PICマイコンを使ってMP3データをリードするだけだけど、
玉砕中です。


せめてもの進捗状況の報告。


使用するPICマイコン
PIC18F452


ベースにするサンプルプログラム

http://www.picfun.com/PIC24F/AP/app24F08.html<br />
“このMP3プレーヤのプログラムはMPLAB C30のC言語だけで記述しています。
またSDカードのファイル操作用のプログラムはすべてマイクロチップ社のフリーの
FATファイルシステムを使っています。
これでファイル操作に関するプログラムは何も作る必要がなくなります。

あとはVS1011e制御用のプログラムですが、こちらは独立のソースとしてライブラリ
のような構成にしました。
これでメイン関数の部分はほんのわずかのプログラム状態になりすっきりしました。
またC言語だけで記述していますので、PIC18などへの移植も簡単にできると思います。”



>PIC18などへの移植も簡単にできると思います

・・・


簡単じゃないよーー。
まぁ、僕のレベルが低いだけなんだろうけどさ・・・。






picfunのプログラムに、

Microchip Memory Disk Drive File System
FSconfig.h
FSDefs.h
FSIO.c
FSIO.h
GenericTypeDefs.h
SD-SPI.c
SD-SPI.h

の一式が入っていたので、
こいつを使えばSDカード関係のメモリー操作はらくらくだね!

と思っていたのですが、、

現実は、やっかいです。


Microchip Memory Disk Drive File Systemが使える環境は
PICマイコン、PIC18/PIC24/dsPIC30/dsPIC33。
コンパイラー、C18/C30です。


PIC18F452とC18を使えば、
そのまま使えるぞーと思いきや、
そのままでは使えません。

というか、picfunさんは、いったいどこから
Microchip Memory Disk Drive File System
を拾ってこられてのでしょうか?


それは、さておき、


まずは、SPIで使うピンを再配置してやらなければなりません。
デフォルトで設定されているのはPIC24関連です。

PIC24Fのマニュアルに記載されているピン配置とレジスタを参考に、
それに対応するようなPIC18F452のピン配置と、PIC18F452用のレジスタに変更させます。

SD-SPI.h
#define SD_CS				PORTBbits.RB4
#define SD_CS_TRIS			TRISBbits.TRISB4
#define SD_CD				PORTBbits.RB3
#define SD_CD_TRIS			TRISBbits.TRISB3
#define SD_WE				PORTBbits.RB2
#define SD_WE_TRIS			TRISBbits.TRISB2

// Registers for the SPI module you want to use
#define SPICON1				SSPCON1
#define SPISTAT				SSPSTAT
#define SPIBUF				SSPBUF
#define SPISTAT_RBF			SSPSTATbits.BF
#define SPICON1bits			SSPCON1bits
#define SPISTATbits			SSPSTATbits
// Tris pins for SCK/SDI/SDO lines
#define SPICLOCK			TRISCbits.TRISC3
#define SPIIN				TRISCbits.TRISC4
#define SPIOUT				TRISCbits.TRISC5



まだ実際にチップに書き込んで試していないので、
定かではありませんが、この部分のエラーだけはなくなります。



これでコンパイルできるようになるかなと思いきや、
これだけではコンパイルできません。


このままでは、
にっくきリンクエラーなるものが発生するので、
メモリの再配置が必要になります。

リンカースクリプトにある、
p18f452.lkrに記載されているメモリーの分配を
適切に再配分しなければなりません。


これがやっかいで、やっかいで、
というか、どこをどう配置し直せば良いのかわかりません。

ネットをうろついて、

“PIC18F452でMP3プレーヤーを作ってみた”
http://www.mars.dti.ne.jp/~m7030/pic_room/pic_mp3.html<br />

にあるp18f452i.lkrにメモリの再配置をしたやつが置いてあったので、
それを使うことにします。

CODEPAGE   NAME=vectors    START=0x0            END=0x29           PROTECTED
CODEPAGE   NAME=page       START=0x2A           END=0x7FFF
CODEPAGE   NAME=idlocs     START=0x200000       END=0x200007       PROTECTED
CODEPAGE   NAME=config     START=0x300000       END=0x30000D       PROTECTED
CODEPAGE   NAME=devid      START=0x3FFFFE       END=0x3FFFFF       PROTECTED
CODEPAGE   NAME=eedata     START=0xF00000       END=0xF000FF       PROTECTED

ACCESSBANK NAME=accessram  START=0x0            END=0x7F
DATABANK   NAME=gpr0       START=0x80           END=0xFF
DATABANK   NAME=gpr1       START=0x100          END=0x1FF
DATABANK   NAME=gpr2       START=0x200          END=0x2FF
DATABANK   NAME=gpr3       START=0x300          END=0x3FF
DATABANK   NAME=gpr4       START=0x400          END=0x4FF
DATABANK   NAME=gpr5       START=0x500          END=0x5FF
ACCESSBANK NAME=accesssfr  START=0xF80          END=0xFFF          PROTECTED

SECTION    NAME=CONFIG     ROM=config

STACK SIZE=0x100 RAM=gpr5


もともとのメモリ配置

MP3のリード用にメモリを再配置
(http://www.mars.dti.ne.jp/~m7030/pic_room/pic_mp3.html から)


CODEPAGE   NAME=vectors    START=0x0            END=0x29           PROTECTED
CODEPAGE   NAME=page       START=0x2A           END=0x7DBF
CODEPAGE   NAME=debug      START=0x7DC0         END=0x8FFF         PROTECTED
CODEPAGE   NAME=idlocs     START=0x200000       END=0x200017       PROTECTED
CODEPAGE   NAME=config     START=0x300000       END=0x30001D       PROTECTED
CODEPAGE   NAME=devid      START=0x3FFFFE       END=0x3FFFFF       PROTECTED
CODEPAGE   NAME=eedata     START=0xD00000       END=0xF000FF       PROTECTED

ACCESSBANK NAME=accessram  START=0x0            END=0x7F
DATABANK   NAME=gpr0       START=0x80           END=0xFF
DATABANK   NAME=gpr1       START=0x100          END=0x9FF
DATABANK   NAME=gpr3       START=0xA00          END=0xDFF
DATABANK   NAME=gpr5       START=0xE00          END=0xEF3
DATABANK   NAME=dbgspr     START=0xEF4          END=0xEFF          PROTECTED
ACCESSBANK NAME=accesssfr  START=0xF80          END=0xFFF          PROTECTED

SECTION    NAME=CONFIG     ROM=config

SECTION	NAME=WORK	RAM=gpr1
SECTION	NAME=BUFF	RAM=gpr3		//buffer
STACK SIZE=0x0F3 RAM=gpr5



メモリの配置も(コピペで)終わったし、
じゃ、完璧だね!


と本当に言いたい所だけど、
そうは問屋が卸さなかった。。


メモリの配置、
完璧じゃなかった。

FSIO.cで、ピーヒャラピーヒャラ、
メモリが足りないぞボケとエラーを出しやがるのです。

以前よりはマシになりましたが、

問題はですね、
どの場所のメモリが足りないのかわからないんです・・。



FSIO.cのファンクションを消していって、
犯人探しをした結果。。。

まず、
FSconfig.hにあるFS_MAX_FILES_OPENを3から1に変更。
(おまじない程度の意味しかなさそう・・)


SYSTEM_CLOCK (DWORD)20000000

SYSTEM_CLOCK (DWORD)10000000

に一応変更。
問題を避けるため20MHzのセラロック使うかもしれない。


それで犯人探しの本筋は、
容疑者、全員死刑!

FSIO.cにあるかなりの機能を
FSconfig.hからコメントアウトして停止させた。
// Comment this line out if you don't intend to write data to the card
//#define ALLOW_WRITES

// Comment this line out if you don't intend to format your card
// Writes must be enabled to use the format function
//#define ALLOW_FORMATS

// Uncomment this definition if you're using directories
// Writes must be enabled to use directories
//#define ALLOW_DIRS


// Uncomment this to use the FindFirst, FindNext, and FindPrev
#define ALLOW_FILESEARCH

// Allows the use of FSfopenpgm, FSremovepgm, etc with PIC18
//#define ALLOW_PGMFUNCTIONS

// Allows the use of the FSfprintf function
// Writes must be enabled to use the FSprintf function
//#define ALLOW_FSFPRINTF



ALLOW_FILESEARCH以外を停止させて、
ようやくリンクエラーを隠せました。。




うーん、
気持ち悪い・・。




ネットでまた調べ始める。。



ヒット

うぐぅーーー(カノン風味

http://www.eetasia.com/ARTICLES/2007OCT/PDF/EEOL_2007OCT02_STOR_CTRLD_AN.pdf?SOURCES=DOWNLOAD
Implementing File I/O Functions Using Microchip's Memory Disk Drive File System Library


・・・


ライブラリーセットアップが載ってるよ・・。

読む読む読む・・。



ぐわっぎゃ!

ちょいまて、
メモリ足りねぇくせえぜごぜえます! (パニック



PIC18F452
プログラムメモリ32KB
RAM 1536B
EEPROM 256B



ライブラリーのメモリー消費

最低限の機能
プログラムメモリ 19.7KB
データメモリ(RAM?) 1771B


ヤバイ・・・

データメモリをオーバーしている気がする。。


その他の機能 - 消費するプログラムメモリ
ファイルサーチ 3.6KB
書き込み 12KB
フォーマット(書き込みEnable) 4.9KB
ディレクトリ操作(書き込みEnable) 13.8KB


・・・

PIC18F452じゃ、
ヤバイかもしれません。


ちなみにpicfunさんで使っているPICマイコンは、
PIC24FJ64GA002
プログラムメモリ64KB
SRAM 8192B
450円

メモリの容量が
十全にあります。




くそー、
PIC24を書き込めるやつライタがあれば、
さっさと乗り移るのに。。


唯一、PIC18系で問題なく使え入手が簡単そうなのが、

PIC18F8720
プログラムメモリ128KB
RAM 3840B
お値段 3200円 (撃沈
http://akizukidenshi.com/catalog/items2.php?p=1&q=PIC18F8720-I%2FPT


もうこの辺まで来ると、
PICkit2を買って、
PIC24に鞍替えしたほうが・・。

と思う今日この頃。


efのオープニングがループだよー。


>>前の記事: SDメモリカードスロットを電子工作用に変換





MP3プレーヤー自作のモノ作り記事

No_image
SDカードのリード(読み込み)トライアル 玉砕中!
現在のページです
Posted by kyosuke at 04/07 2008

Sdslot_thumb
SDメモリカードスロットを電子工作用に変換
秋月で買っといた、 SDメモリカードスロットを、 ブレッドボードにブッ刺せるようにしました。 それだけー。 材料費300円くらい。 表 [[37]] 裏 [[38]...
続きを読む>>SDメモリカードスロットを電子工作用に変換
Posted by kyosuke at 03/31 2008

Mp3_thumb
Easy MP3を使っちゃおう
前回のMP3自作エントリーから早一ヶ月半、 “MPLAB C18のテスト、PIC18F452でLED点滅ピコピコ” http://toolible.net/monozukuri/articles/...
続きを読む>>Easy MP3を使っちゃおう
Posted by kyosuke at 03/26 2008

Pic18f452_led_thumb
MPLAB C18のテスト、PIC18F452でLED点滅ピコピコ
前回、“MP3プレーヤーをPICマイコンで自作、始めの一歩”<br /> http://toolible.net/monozukuri/articles/39<br /> ...
続きを読む>>MPLAB C18のテスト、PIC18F452でLED点滅ピコピコ
Posted by kyosuke at 02/12 2008

No_image
MP3プレーヤーをPICマイコンで自作、始めの一歩
昔から作ってみたいと思っているモノの1つに、 MP3プレーヤーがあります。 なぜかというと、 フラッシュメモリとファイルシステムの操作を学びたかったから。 FATならびにフラッシュメモ...
続きを読む>>MP3プレーヤーをPICマイコンで自作、始めの一歩
Posted by kyosuke at 02/10 2008