/* * FatFs for TOPPERS * FAT File system/ * Toyohashi Open Platform for Embedded Real-Time Systems * * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory * Toyohashi Univ. of Technology, JAPAN * Copyright (C) 2004 by Embedded and Real-Time Systems Laboratory * Graduate School of Information Science, Nagoya Univ., JAPAN * Copyright (C) 2007- by Industrial Technology Institute, * Miyagi Prefectural Government, JAPAN * * 上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation * によって公表されている GNU General Public License の Version 2 に記 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア * を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下, * 利用と呼ぶ)することを無償で許諾する. * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー * スコード中に含まれていること. * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 * の無保証規定を掲載すること. * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ * と. * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 * 作権表示,この利用条件および下記の無保証規定を掲載すること. * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに * 報告すること. * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. * * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. * */ /*--------------------------------------------------------------------------/ / FatFs - FAT file system module R0.04 (C)ChaN, 2007 /---------------------------------------------------------------------------/ / FatFs module is an experimenal project to implement FAT file system to / cheap microcontrollers. This is a free software and is opened for education, / research and development under license policy of following trems. / / Copyright (C) 2007, ChaN, all right reserved. / / * The FatFs module is a free software and there is no warranty. / * You can use, modify and/or redistribute it for personal, non-profit or / profit use without any restriction under your responsibility. / * Redistributions of source code must retain the above copyright notice. /---------------------------------------------------------------------------*/ /* * ファイルシステムのテストプログラム * * フルセット版FatFs(ff.c, ff.h)のAPIの動作テストを行っている。記録メ * ディアは、FAT16またはFAT32でフォーマットされ、まだ、ファイルやディレ * クトリが書き込まれていない状態を想定している。 * テスト項目を以下に示す。 * * ・f_write()のテスト *  ファイルdata.txtを書き込みモードでオープンする。 *  クラスタ境界をまたいだ書き込みを行う。 *  ファイルdata.txtをクローズする。 * * ・f_read()のテスト *  ファイルdata.txtを読み出しモードでオープンする。 *  クラスタ境界をまたいだ読み出しを行い、期待値と比較を行う。 * * ・f_lseek()のテスト *  ファイルdata.txtを読み出しモードでオープンする。 *  第2クラスタの先頭セクタにシークする。 *  シークした位置から読み出しを行い、期待値と比較する。 * * ・f_mkdir(), f_opendir()のテスト *  /sub1, /sub1/sub2, sub1/sub2/sub3の順にディレクトリを作成し、 *  開けることを確認する。 * * ・f_readdir()のテスト *  メディアに記録されているすべてのファイル名とディレクトリ名を再帰 *  的に読み出す。 *  /data.txt, /sub1, /sub1/sub2, sub1/sub2/sub3が読み出せれば、成功。 * * ・f_chmod(), f_stat()のテスト *  ファイルstat.txtを作成する。 *  stat.txtのファイル属性を読み出す。 *  stat.txtに読み取り専用のファイル属性を設定する。 *  stat.txtのファイル属性を再度、読み出し、読み取り専用のファイル属 *  性が設定されていることを確認する。(※) * *   ※ 記録メディアが脱着可能な場合はパソコン上でもファイル属性を *     確認する。 *   * ・f_unlink()のテスト *  ファイルunlink.txtを作成する。 *  unlink.txtを削除する。 *  unlink.txtが削除されていることを確認する。(※) * *   ※ 記録メディアが脱着可能な場合はパソコン上でもファイルが削除 *     されていることを確認する。 * * ・f_rename()のテスト *  ファイルold.txtを作成する。 *  old.txtをnew.txtにリネームする。 *  old.txtが存在しないことを確認する。(※) *  new.txtが存在することを確認する。 (※) * *   ※ 記録メディアが脱着可能な場合はパソコン上でもファイルが *     リネームされていることを確認する。 * * ・f_getfree()のテスト *  f_getfree()で空きクラスタ数を求める。 *  空きクラスタ数をバイト数に換算して、ログ表示する。(※) *   *   ※ 記録メディアが脱着可能な場合はパソコン上でも空き容量を *     確認する。 * * テストが成功した場合のログを以下に示す。 * * System logging task is started on port 1. * Sample program starts (exinf = 0). * test write: OK * test read: OK * test seek: OK * test mkdir: OK * Dir: 0:/ * File: 0:/data.txt * Dir: 0:/sub1/ * Dir: 0:/sub1/sub2/ * Dir: 0:/sub1/sub2/sub3/ * Check read only attribute of file 0:/stat.txt by PC. * test stat: OK * test rename: OK * test unlink: OK * Waiting for f_getfree() ..... * 2043789312(0x79d1c000) bytes available on the disk. *  →この数値は、使用する記録メディアのサイズによって異なる。 * Check free space by PC. * test getfree: OK * -- buffered messages -- * Sample program ends. * */ /* * h8mp3 player [VS1001K] * Copyright (c) 2003 Masahiro Ochiai * * Ref. VLSI VS1001K data sheet. * * */ // -------------------------------------------------------------------------------- // // sample1.c // Version 1.0 // // Edited by GREIF Software on 09/12/12. // // SD Card & MP3 Module Test Program // // SDカード上のMP3ファイルを読み込んで、再生するテストプログラムです。 // あらかじめsample.mp3をSDカードにコピーしてセットしておく必要があります。 // // SDカード用ポートの割り付けは、mmc.cの「Control signals (Platform dependent)」で行います。 // // MP3デコーダ用ポートの割り付けは、以下のとおりです。(ネイティブモード) // PortA_0...SO // PortA_1...SI // PortA_2...SCLK // PortA_3...xCS // PortA_4...xRESET // PortA_5...xDCS // Port8_0...DREQ(行きがかり上、DREQはPort8を使っています。ほぼ、どこのポートでも使えます。) // // 複数のソースを継ぎ剥ぎしているため、define/include系が混乱しています。必要なら整理して下さい。 // #include #include #include #include #include #include #include #include "kernel_id.h" #include "sample1.h" #include "ff.h" #define DRIVE0 0u /* ドライブ番号 */ #define FDISK_FORMAT 0u /* フォーマット種別 */ #define SECTOR_SIZE 512UL /* セクタ・サイズ(バイト単位) */ #define CLUSTER_SIZE 4U /* クラスタ・サイズ(セクタ単位) */ #define WAIT_SYSLOG 500 /* syslog()の表示待ち時間 */ #define WORD_MAX 0xffffUL/* WORD型の最大値 */ #if 1 #define ROOT_DIR "0:" #else #define ROOT_DIR "1:" #endif #define FILENAME ROOT_DIR "/sample.mp3" // テスト用MP3ファイル #define BUF_SIZE 50000 // MP3データ領域(ファイルサイズより大きいこと) static char buff[BUF_SIZE]; /* ファイル・システムのワークエリア */ static FATFS ActiveFatFsObj; // プロトタイプ宣言 static WORD file_read(FATFS *fs); #define SYSCLOCK_REAL 19800000.0 /* Hz */ #define BITSET(a, b) asm volatile ("bset.b %0,@%c1:8" ::"g" (b), "g" (a) ) #define BITCLR(a, b) asm volatile ("bclr.b %0,@%c1:8" ::"g" (b), "g" (a) ) #define BITOUT(x) { \ if(x){ \ BITSET(&PADR, 1); \ } else { \ BITCLR(&PADR, 1); \ } \ BITSET(&PADR, 2); \ BITCLR(&PADR, 2); \ } int vswrite(unsigned char s) { BITOUT(s & 0x80); BITOUT(s & 0x40); BITOUT(s & 0x20); BITOUT(s & 0x10); BITOUT(s & 0x08); BITOUT(s & 0x04); BITOUT(s & 0x02); BITOUT(s & 0x01); } int vsread() { int i,dat; dat = 0; for(i=0;i<16;i++){ PADR.BYTE = 0x14; dat = (dat<<1) + ((PADR.BYTE&1) ? 1 : 0); PADR.BYTE = 0x10; } return dat; } int sci_write(unsigned int addr, unsigned int dat) { while((P8DR.BYTE & 0x01) != 0x01); // Wait for DREQ High PADR.BYTE = 0x38; // xRESET High + xDCS High + xCS High PADR.BYTE = 0x30; // xCS Low vswrite(0x02); vswrite(addr); vswrite(dat>>8); vswrite(dat); PADR.BYTE = 0x38; // xCS High return 0; } int sci_read(unsigned int addr) { int dat; while((P8DR.BYTE & 0x01) != 0x01); // Wait for DREQ High PADR.BYTE = 0x38; // xRESET High + xDCS High + xCS High PADR.BYTE = 0x30; // xCS Low vswrite(0x03); vswrite(addr); dat = vsread(); PADR.BYTE = 0x38; // xCS High return dat; } wait(int n) { int i; for(i=0;i