MLAのFrameworkでfileioを試してみる
〔少しだけ簡単組込み〕
〔PICの動かせ方入門に戻る〕
Microchip社MLA(Microchip Libraries for Applications)のFrameworkに”fileio”と言うライブラリが
有ります、これはSDカードのファイルにアクセスする為の関数集です。
これを動作させて覚書として記述して置きたいと思います。
Frameworkのfileioライブラリ(v1.03)はこちらのサイトよりプログラムをダウンロードします。
インストール方法は、USBフレームワークでの記事ですが同じなのでこちらを参照下さい。
(ここでのFrameworkは"V2016-11-07"で、
"C:\microchip\mla\v2016_11_07"がインストール先です)
インストールしたfileioライブラリのサンプルプログラムですがぁ、dsPIC33EP512MU810・PIC24EP512
GU810・PIC24F128GA010/GB204/GB110/DA210等のPIC24/dsPIC33/dsPIC30系統の物の様です。
私はこれらのPICの持ち合わせが無く触れた事も有りません。
でぇFramework内のSPI関連ドライバを覗いていたらぁ”drv_spi_pic18.c”
なる物を発見しました、
これでぇPIC18系統がいけるかもぉっと思いPIC18F25K22でチップに関連するプログラムだけ変更して
コンパイルしました、がぁ、えぇ、こっこれわぁ、プログラム容量が足りません。
ならぁってんでぇ、
PIC18F26K22に換えコンパイルした結果正常終了したので、コンパイル容量を確認
ぬぁ〜にぃ、約36Kバイトぉぉ(XC8 v1.40)、!Σ( ̄□ ̄|||)、Too Big
PIC24EP256MC202(XC16)でも動作させてみました、その話はページの最後の方に記載しています。
(ヘルプマニュアルの場所)
fileioライブラリ= C:\microchip\mla\v2016_11_07\doc\help_mla_fileio.jar
SPIドライバ = C:\microchip\mla\v2016_11_07\doc\help_mla_driver.jar
《PIC18F26K22》
(fileioライブラリ関連ファイルについ
て)
ソフトウェアの階層図
ア
プ
リ
関
連
|
|
|
main.c
|
18F26K22用メインのサンプルプログラム
|
26K22
|
skSDfileio.c
|
fileioを使う為のSDカード用ライブラリ
|
PIC18
|
skSDfileio.h |
fileioを使う為のSDカード用ライブラリヘッダファイル
|
PIC18
|
|
|
system.c
|
18F26K22用のSDカード接続ピンの実装を行うプログラム CD,WP,CSピンの指定を行います。
|
26K22 |
system.h
|
SPI通信速度設定用システムクロックの定義をここで行う
|
PIC18 |
system_config.h |
|
|
フ
ァ
イ
ル
関
連
|
C:\microchip\mla\v2016_11_07\framework\fileio
|
|
fileio.c
|
ファイルにアクセスする為のライブラリ |
|
fileio.h
|
ファイルにアクセスする為のライブラリヘッダファイル |
|
fileio_private.h
|
|
|
fileio_media.h
|
|
|
fileio_config.h
|
各種ファイル機能をコンパイルするかしないか選択出来る
これによりファイルサイズを調整可能です。
|
|
S
P
I
で
S
D
ア
ク
セ
ス
関
連
|
C:\microchip\mla\v2016_11_07\framework\fileio\drivers\sd_spi
|
|
sd_spi.c
|
SPIでSDカードにアクセスする為のライブラリ |
|
sd_spi.h
|
SPIでSDカードにアクセスする為のライブラリヘッダファイル |
|
sd_spi_private.h |
|
|
sd_spi_config.h |
ここでカード検出を、CDピン接続で行うか、ソフトで判断するか
選択出来ます。
|
|
S
P
I
ド
ラ
イ
バ
関
連
|
C:\microchip\mla\v2016_11_07\framework\driver\spi
|
|
drv_spi_pic18.c
|
実際にSPIで入出力するドライバプログラム
|
PIC18 |
drv_spi.h
|
SPIで入出力するドライバプログラムのヘッダファイル |
|
drv_spi_config.h |
SPIで入出力するモジュール(SPI1/2やMSSP1/2等)をここで指定する
|
|
|
|
|
※ [26K22]がPIC18F26K22専用 [PIC18]がPIC18系で利用可能と思われます。
※ オレンジ色ファイルがPICや実験装置により変更するファイル、
その他はPIC18/PIC24/dsPIC30/dsPIC33系で利用出来そうなファイルです。
それと、LCDに表示を行う為に以下のファイルが必要です。
skI2CLCDlib.c
skI2CLCDlib.h
skI2Clib.c
skI2Clib.h
このファイルの内容は”秋月電子I2C接続小型LCDモジュールに表示を行う”を参照下さい。
これらのファイル↓からダウロード出来ますが、"license_mla.pdf"のライセンスファイルも付て置きます。
[fileio_PIC18.zip]
(ロングファイル名について)
fileioライブラリの"fileio.h"/"fileio.c"がショートバージョンのファイルです、これに替えて
"fileio_lfn.h"/"fileio_lfn.c"のファイルを使えばロングファイル名に対応するらしいです。
但し、PICのリソースをかなり消費するでしょう、ここでは実験はしていません。
(実験の回路について)
実験部品は秋月電子通商の、I2C接続小型LCDとマイクロSDカードスロットです。
SDCはMicroSD(TDK 2GB FAT16)を使用しました。
回路電源は、3.3Vです。
SPI接続のSDカードは、
MSSP1側を使用し
I2C接続のLCDは
MSSP2側を使っています。
尚、I2C用のプルアップ抵抗はPIC内蔵を利用しています。
このSDソケットの9/10番端子はカード検出用(CD)ですが、今回配線していません
なのでカードの検出はソフト(
sd_spi_config.h)
で行っています。
サンプルプログラムは、"TEST.CSV"ファイルを作成して"DATA,123\r\n"を1行書込んでいるだけです。
プログラムを起動すると、LCDに[SDC_TEST]を表示し3秒後に書き込まれます。
正常終了すればLCDの1行目に[WriteOK!]、2行目に[Success]が表示されます。
初期化失敗時は2行目に[InitERR!]が表示され、
書き込み失敗時は2行目に[ERno=??]が表示されます、??はFILEIO_ERROR_TYPEの番号を表示。
尚、FILEIO_ERROR_TYPEの値は、"fileio.h"
のファイルを見ましょう。
(コンパイルについて)
左図は18F25K22ではなく、
18F26K22の間違いです。
上からダウンロードしたファイルを、作成したMPLAB Xのプロジェクトに
全てコピーし、左の様に取り込みました。
ここでは、"MPLAB X IDE v3.50" "XC8 v1.40"でコンパイルしています。
デフォルトのままコンパイルを行うとぉ、
も〜ぉ、いっぱい、"Wanning"が出てしまいます。
これでは、ちょっとぉ、わけワカメ状態なのでぇ、"Wanning Level"を変更して
再コンパイルを行いましょう。
"Wanning Level"はデフォルト値で[-3]となっているので[0]辺りにします、
"Wanning Level"の変更は、
メニューバーから[File]→[Project Properties]を順にクリックします。
下記画面が表示されます。
@ "XC8 compier"を選択します。
A 表示された右の画面から"Wanning
level"を[-3]から[0]に変更します。
B [OK]ボタンをクリックしましょう。
これで再コンパイルを行うと少しまだ出ますがOKでしょう。
(skSDfileioライブラリの関数説明)
このファイルは、fileioライブラリの初期化の部分を簡単に使いやすくする為に作成した関数集です。
PIC18F26K22で実験し作成していますが、PIC18/PIC24E系で利用可能と思います。
"sd_spi_config.h"のコメントに、
「SDカードのメディア初期化シーケンスでは、一部のメディアタイプが
オープンドレイン出力モードで
起動し、最初は高速で動作する事が出来ない為、
100kHz〜400kHzの周波数でメディアを
クロック動作する必要が有ります。」
と書いて有ります。
なので、PLLEN=1(32MHz/64MHz)の場合は一旦PLLEN=0としてSDを低速初期化後にPLLEN=1に
戻しています。
でぇ、"system.h"の"SYS_CLK_FrequencySystemGet(
)"値は"4x"する前のCPUクロック値を設定する、
だからぁ、32MHz(8MHzx4)時なら8000000の値を記述すると、SPI速度設定は"x64 divider"で設定され
8000000/64=125KHzの低速通信速度で初期化されま
す。
初期化後は、PLLEN=1に戻り"x4 divider"で設定されるので32000000/4=8MHzの通信速度となります。
もし、初期化後に上手くいかない場合は、"sd_spi.c"の1736行目に記述の"x4 divider"を変更すると良い
かもね。
※ 私の持っているSDカード達は別に100kHz〜400kHzにしなくても動作はするのですがぁ、動作しない
SDカードが有る場合に対応しておいた方が良さげかもね。
※ 32MHzでは動作したが、64MHzでは上手く動作しなかった事を付け加えておこう。
ans = SD_Init( DriveId )
SDカードの初期化を行う処理
FILEIO_Initialize/FILEIO_MediaDetect/FILEIO_DriveMount関数を纏めて呼び出した処理です。
char DriveId:1文字のドライブIDを指定します('A'-'Z')
絶対パスを指定する場合にこの文字を使います。("A:/DIR1/TEST.TXT")
SDINIT_ERROR_TYPE ans : SDINIT_ERROR_NONE(0)= 正常終了
SDINIT_ERROR_FILEIO_INIT(1)= FILEIO_Initializeの初期化エラー
SDINIT_ERROR_NO_CARD(2)= カードが検出されなかった
SDINIT_ERROR_NO_MOUNT(3)= ドライバーがマウントされなかった
ans = SD_Termination( DriveId )
SDカードの終了操作処理
FILEIO_DriveUnmountを行う処理です。
char DriveId:1文字のドライブIDを指定します('A'-'Z')
FILEIO_ERROR_TYPE ans:FILEIO_ERROR_TYPEを返します(FILEIO_ErrorGetの返り値です)
FILEIO_ERROR_TYPEの値は、"fileio.h"のファイルを見ましょう。
ans = SD_fGets( buffer,nbyte,fp )
ファイルから1行読み込む処理
0x0a(LF)に出会うまで読みます、或いはnbyte数まで読み込みます。
bufferには、0x0d(CR)/0x0a(LF)もコピーされます、バッファサイズに注意です。
FILEIO_Read関数を1byte単位で読み出しているので速度的には遅くなります。
char *buffer:読み込んだデータの格納先バッファのポインタを指定
size_t nbyte :読込むデータのバイト数を指定します
FILEIO_OBJECT *fp:ファイルオブジェクトへのポインタ
int ans:正常終了=正常終了時は読み込んだバイト数が返されます
異常終了=−1(FILEIO_RESULT_FAILURE)
(ファイルのタイムスタンプについて)
ファイル/ディレクトリの作成日または書き込み日をセットする為には、ユーザが時刻を得る関数を
作成しないとダメです。
そしてFILEIO_RegisterTimestampGet(
)で、作成した時刻を得る関数を登録すればfileioライブラリが
時刻をセットする際に呼び出されます。
FILEIO_TIMESTAMP *timeStamp ;
void GetTimestamp(FILEIO_TIMESTAMP *timeStamp) ;
を作成した場合は、
FILEIO_RegisterTimestampGet(GetTimestamp) ;
とします。
でぇ、GetTimestamp( )関数内で変数のtimeStamp構造体に現在時刻をセットしてやれば良いという事に
なります。
なのでぇ、得る時刻は何らかの方法(ここやここやここ等)で実装しないとダメですが、
このページではGetTimestamp( )関数等は実装していませんので、
”fileio.c:1562: warning: (1471) indirect function call via a NULL pointer ignored”
のワーニングが出ます。
以下に構造体を示します。(fileio.hからの抜
粋です)
------------------------------------------------------------
// FATファイルシステムの日付を記述する構造体
typedef union
{
struct
{
uint16_t day : 5; // 日(1-31)
uint16_t month : 4; // 月(1-12)
uint16_t year : 7; // 年(1980年から起算した年(0〜127)。1980(0)〜2107(127)年)
} bitfield;
uint16_t value;
} FILEIO_DATE;
// FATファイルシステムの時間を記述する構造体
typedef union
{
struct
{
uint16_t secondsDiv2 : 5; // 秒(2秒単位で記録) (0-29)。0〜58秒 値が5なら10秒です
uint16_t minutes : 6; // 分(0-59)
uint16_t hours : 5; // 時(0-23)
} bitfield;
uint16_t value;
} FILEIO_TIME;
// ファイルの時間フィールドを記述する構造体
typedef struct
{
FILEIO_DATE date; // ファイル/ディレクトリの作成日または書き込み日。
FILEIO_TIME time; // ファイル/ディレクトリの書き込み時間の作成。
uint8_t timeMs; // 時間のミリ秒の部分。時刻の10ミリ秒 (0-199)
} FILEIO_TIMESTAMP;
※ timeMsは、secondsDiv2が2秒単位にしかセット出来ない為にその間を表す為の物です。
------------------------------------------------------------
(fileioライブラリの関数説明)
”fileio.c”内に有る主な関数のみ説明して置きます、その他はヘルプマニュアルを参照下さい。
ans = FILEIO_Initialize( )
FILEIOライブラリで使用される構造体の初期化を行う処理
int ans:正常終了= 0(FILEIO_RESULT_SUCCESS)
異常終了=−1(FILEIO_RESULT_FAILURE)
ans = FILEIO_MediaDetect( SdDrive, sdCardMediaParameters )
メディアデバイス(SDカード)が利用出来るか検出を行う処理
検出を、ソフトで行うかハードで行うかの選択は"sd_spi_config.h"で行います。
const FILEIO_DRIVE_CONFIG *SdDrive:
ドライブにアクセスする為に使用する関数ポインタを含む定数構造体
void *sdCardMediaParameters:
SPIピン関連のタスクを実行する為に使用する関数ポインタを含む構造体
bool ans:正常終了= true 異常終了= false
ans = FILEIO_DriveMount( DriveId,SdDrive, sdCardMediaParameters )
ドライブのマウントを行う処理
SPIの初期化やSDカードの初期化が行われます。
ドライブ情報の初期化とSDカードの情報を読み込みます。
char DriveId:1文字のドライブIDを指定します('A'-'Z')
絶対パスを指定する場合にこの文字を使います。("A:/DIR1/TEST.TXT")
const FILEIO_DRIVE_CONFIG *SdDrive:
ドライブにアクセスする為に使用する関数ポインタを含む定数構造体
void *sdCardMediaParameters:
SPIピン関連のタスクを実行する為に使用する関数ポインタを含む構造体
FILEIO_ERROR_TYPE ans:正常終了=0(FILEIO_ERROR_NONE)
ans = FILEIO_DriveUnmount( DriveId )
ドライブのアンマウントを行う処理
ドライブ情報のリソース割り当てを解除します。
char DriveId:1文字のドライブIDを指定します('A'-'Z')
例)
extern FILEIO_SD_DRIVE_CONFIG sdCardMediaParameters ;
const FILEIO_DRIVE_CONFIG SdDrive = {
(FILEIO_DRIVER_IOInitialize)FILEIO_SD_IOInitialize,
(FILEIO_DRIVER_MediaDetect)FILEIO_SD_MediaDetect,
(FILEIO_DRIVER_MediaInitialize)FILEIO_SD_MediaInitialize,
(FILEIO_DRIVER_MediaDeinitialize)FILEIO_SD_MediaDeinitialize,
(FILEIO_DRIVER_SectorRead)FILEIO_SD_SectorRead,
(FILEIO_DRIVER_SectorWrite)FILEIO_SD_SectorWrite,
(FILEIO_DRIVER_WriteProtectStateGet)FILEIO_SD_WriteProtectStateGet,
} ;
if (FILEIO_Initialize() == 0) {
if (FILEIO_MediaDetect(&SdDrive, &sdCardMediaParameters) == true) {
if (FILEIO_DriveMount('A', &SdDrive, &sdCardMediaParameters) == FILEIO_ERROR_NONE) {
/* ファイルの読み書きを行う */
FILEIO_DriveUnmount ('A');
}
}
}
ans = FILEIO_Remove( pathName )
指定されたファイルを削除する処理
const char *pathName:削除するファイルの名前(パス指定も出来ます)
int ans:正常終了= 0(FILEIO_RESULT_SUCCESS)
異常終了=−1(FILEIO_RESULT_FAILURE)
ans = FILEIO_Open( fp,pathName,mode )
ファイルのオープンを行う処理
一度に複数のファイルを開く事が可能です。
FILEIO_OBJECT *fp: ファイルオブジェクトへのポインタ
const char *pathName:開くファイルの名前(パス指定も出来ます)
Uint16_t mode:ファイルの開くモードを指定します
FILEIO_OPEN_READ (0x01) = ファイルを開いて読み込みます。
FILEIO_OPEN_WRITE (0x02) = ファイルを開いて書き込みます。
FILEIO_OPEN_CREATE (0x04) = ファイルが存在しない場合は作成します。
FILEIO_OPEN_TRUNCATE (0x08) = ファイルを長さ0に切り捨てます。
FILEIO_OPEN_APPEND(0x10) = ファイルの現在の読書き場所をファイルの
終端に設定します。
int ans:正常終了= 0(FILEIO_RESULT_SUCCESS)
異常終了=−1(FILEIO_RESULT_FAILURE)
ans = FILEIO_Close( fp )
ファイルのクローズを行う処理
FILEIO_OBJECT *fp:ファイルオブジェクトへのポインタ
int ans:正常終了= 0(FILEIO_RESULT_SUCCESS)
異常終了=−1(FILEIO_RESULT_FAILURE)
ans = FILEIO_Write( buff,size,count,fp )
ファイルに指定サイズのデータ書き込みを行う処理
const void *buff:書き込むデータが格納されているバッファのポインタを指定。
size_t size: 書き込むデータのバイト単位を指定(通常は1バイトかな?)
size_t count: 書き込むデータのバイト単位は何個書き込むのか
size x count = 書き込まれるバイト数
FILEIO_OBJECT *fp:ファイルオブジェクトへのポインタ
size_t ans:正常終了時は書き込んだcount数が返されます
異常終了時はcount未満になります(FILEIO_ErrorGet)
ans = FILEIO_PutChar( c,fp )
ファイルに1バイト書き込みを行う処理
即ち、FILEIO_Write(&c, 1, 1, &fp)と同じです。
char c:書き込む1バイトのデータを指定
FILEIO_OBJECT *fp:ファイルオブジェクトへのポインタ
int ans:正常終了= 0(FILEIO_RESULT_SUCCESS)
異常終了=−1(FILEIO_RESULT_FAILURE)
ans = FILEIO_Read( buff,size,count,fp )
ファイルから指定サイズのデータ読み込みを行う処理
void *buff: 読み込むデータの格納先バッファのポインタを指定。
size_t size: 読み込むデータのバイト単位を指定(通常は1バイトかな?)
size_t count:読み込むデータのバイト単位は何個読み込むのか
size x count = 読み込れるバイト数
FILEIO_OBJECT *fp:ファイルオブジェクトへのポインタ
size_t ans:正常終了時は読み込んだcount数が返されます
異常終了時はcount未満になります(FILEIO_ErrorGet)
ans = FILEIO_GetChar( fp )
ファイルから1バイト読み込みを行う処理
即ち、FILEIO_Read(&c, 1, 1, &fp)と同じです。
FILEIO_OBJECT *fp:ファイルオブジェクトへのポインタ
int ans:正常終了 = 読み込んだ1バイト(0-255)のデータを返します
異常終了=−1(FILEIO_RESULT_FAILURE)
例)
char Data[] = "Framework SD Test\r\n" ;
FILEIO_OBJECT fp;
// ファイルは作成して追加書き込みモードで開く
if ((FILEIO_Open(&fp, "TEST.TXT",
FILEIO_OPEN_WRITE | FILEIO_OPEN_APPEND | FILEIO_OPEN_CREATE) == FILEIO_RESULT_SUCCESS) {
if (FILEIO_Write(Data, 1, strlen(Data), &fp) != strlen(Data)) {
/* 書き込みエラー */
}
FILEIO_Close(&fp) ;
} else {
/* オープンエラー */
}
ans
= FILEIO_Seek( fp,offset,base )
ファイル内の現在の読み取り/書き込み位置を変更する処理
FILEIO_OBJECT *fp:ファイルオブジェクトへのポインタ
int32_t offset:ベース位置からの新しい読み込み/書き込み位置へのオフセット値
int base: シークの為のベース位置を指定します
FILEIO_SEEK_SET = ファイルの先頭からのオフセットに変更します。
FILEIO_SEEK_CUR = 現在の位置を基準にしたオフセットに変更します。
FILEIO_SEEK_END = ファイルの終わりを基準にしたオフセットに変更します。
int ans:正常終了 = 0(FILEIO_RESULT_SUCCESS)
異常終了=−1(FILEIO_RESULT_FAILURE)
ans = FILEIO_Tell( fp )
ファイル内の現在の読み書き位置を返す処理
ファイルハンドルは有効で開いているファイルでなければなりません。
FILEIO_OBJECT *fp:ファイルオブジェクトへのポインタ
long ans:ファイルの先頭からの現在の読み取り/書き込み位置のオフセット(バイト単位)
ans = FILEIO_Flush( fp )
未書き込みのファイルデータを閉じずにSDに一旦書き込む処理
FILEIO_OBJECT *fp:ファイルオブジェクトへのポインタ
int ans:正常終了 = 0(FILEIO_RESULT_SUCCESS)
異常終了=−1(FILEIO_RESULT_FAILURE)
《PIC24EP256MC202》
今度は、24EP256MC202でfileioライブラリを使って見ます、XC16(v1.30)でのコンパイルとなりますね
コンパイル容量は約32Kバイトでした。
(fileioライブラリ関連ファイルについて)
fileioライブラリのサンプルに"PIC24EP512GU810"が有りこれを参考に進めました。
PIC18F26K22の場合と異なる点は、
”drv_spi_pic18.c”を”drv_spi_16bit.c”に変更して、"main.c"/"system.c"/"system.h"は
24EP256MC202専用に書き換えています。
又、”skSDfileio.c”と”skSDfileio.h”のファイルはPIC18とPIC24Eの共用です。
その他は同じファイルと思います、たぶん.....
今回のサンプルは、FCY=60MHz(60MIPS)で動作させています、
でぇ、"system.h"の"SYS_CLK_FrequencySystemGet( )"値の設定値なのですがぁ、
「100kHz〜400kHzの周波数でメディアをクロック動作する必要が有ります。」
という事なのでぇ、FCY*2倍の値を設定すれば良いでしょう。
だから"120MHz"の記述とすると、SPI通信速度は312.5KHzで初期化され、その後は"x4
divider"での
通信速度なので60000000/4=15MHzなのですがぁ、まあ私のSDカードは動作しています、
もし動作しないなら"sd_spi.c"の1730行目に記述のプライマリプレスケールの"x4 divider"を変更すると
良いかもね。
サンプルファイル↓からダウロード出来ますが、"license_mla.pdf"のライセンスファイルも付て置きます。
[fileio_PIC24E.zip]
(実験の回路について)
ここのSDカードソケットはスイッチサイエンスで購入しましたが、現在は販売終了で代替えがこちら
ですがピン配列が異なっていますので配線が下記回路と違います。
(ピン配列は異なりますが秋月電子通商のこちらの基板もCD/WP端子が有り使用出来るでしょう。)
回路電源は3.3Vで、PICの27/28番ピンはアナログ専用電圧です。
10uFのコンデンサーは内蔵のレギュレータ用で、PICの1番ピンの抵抗はMCLR用です。
SPI接続のSDカードは、
SPI1側を使用し
I2C接続のLCDは
I2C2側を使っています。
この回路では、CD/WP端子を配線(桃色線)しハードでのカード検出を行っています。
又、I2C用とCD/WPののプルアップ抵抗はPIC内蔵を利用しています。
サンプルプログラムの動作は18F25K22の場合と同じです。
CD(カード検出)とWP(ライトプロテクト検出)をハードで行っているので、抜き差しやスイッチの入切りを
行って見ましょう。
今度は、こちらのMy ”skSDlib”ライブラリを使って24EP256MC202で上記の回路を使いSDカードに
アクセスして見たいと思います。
↓からサンプルプログラムをダウンロードして下さい。
[SDlib_PIC24E.zip]
skI2CLCDlib.c
skI2CLCDlib.h
このファイルの内容は”秋月電子I2C
接続小型LCDモジュールに表示を行う”を参照下さい。
skI2Clib.c
skI2Clib.h
skSPIlib.c
skSPIlib.h
このファイルの内容はPIC24Eシリアル通信(I2C/SPI/UART)についてを参照下さい。
”fileio”
コンパイル容量が32-37Kbyte程とかなりデカいですがぁ、一通りファイル関連の操作が出来て
ロングファイル名も出来てぇのでかなり高機能です。
それにぃ、Microchip作成なので信頼出来るみたいなぁ感じぃ。
”skSDlib”
コンパイル容量が7Kbyte程と小さいです、その分機能が限定されていますがぁ....
私作成なのでぇ信頼出来ない、低機能、遅い....みたいなぁ感じぃ。
でもぉ、動いていそうな感じぃなのでぇ、別にいいじゃんな人向けです。
サンプルプログラムの動作は、
"TEST1.TXT"と"TEST2.TXT"のファイルを同時にオープンして1行ずつ読み込みLCDに表示します。
なのでぇ、PCでファイルを作成しSDカードに書き込んで置く必要が有ります。
プログラムを起動すると、LCDに[SDC_TEST ]を表示し3秒後に開始します。
正常終了すればLCDの1行目に"TEST1.TXT"ファイルの内容を表示し、
2行目に"TEST2.TXT"ファイルの内容が表示されます。
初期化失敗時は1行目に[Init ERR]が表示され、2行目にエラー番号が表示されます。
エラー番号は、こちらの記事を見ましょう。
オープン失敗時は1行目に[Open?ERR]が表示されます。?は1か2です。
SDカードの通信速度は、
このサンプルも、FCY=60MHz(60MIPS)で動作させていますが、初期化時に低速にするとかは行っていません。
SPIの初期化は"SPI_PPRE_DIV16"で60MHz/16=3.75MHzで全て行っています。
【きむ茶工房ガレージハウス】
Copyright (C) 2006-2017 Shigehiro Kimura All Rights Reserved.