SPI SD カードライブラリ
32-BIT MICROCONTROLLER
FM0+ Family, FM3 Family, FM4 Family
APPLICATION NOTE
A P P L I C A T I O N N O T E
対象製品
本操作マニュアルに記載されている内容の対象製品は、FM0+ Family, FM3 Family, および FM4 Family の 全製品です。
A P P L I C A T I O N N O T E
Table of Contents
1. 導入 ... 4 1.1 FM ファミリ MCU に関して ... 4 1.2 SD カードライブラリ (Secure Digital)に関して ... 4 1.3 Document に関して ... 4 2. SD カードライブラリ APⅠ 紹介 ... 5 2.1 SD カードライブラリ ... 5 2.2 グローバル API 関数 ... 7 2.2.1 Sdcard_TimeWait ... 7 2.2.2 Sdcard_IsCardExist ... 7 2.2.3 Sdcard_CardSelect ... 7 2.2.4 Sdcard_CardDeSelect ... 8 2.2.5 Sdcard_IsWrProtect ... 8 2.2.6 Sdcard_ConfigFifo ... 8 2.2.7 Sdcard_SpiModeConfig... 9 2.2.8 Sdcard_Write ... 9 2.2.9 Sdcard_Read ... 9 2.2.10 Sdcard_Cmd0 ... 10 2.2.11 Sdcard_Cmd8 ... 10 2.2.12 Sdcard_Cmd9 ... 11 2.2.13 Sdcard_Cmd13 ... 11 2.2.14 Sdcard_Cmd16 ... 12 2.2.15 Sdcard_Cmd17 ... 12 2.2.16 Sdcard_Cmd24 ... 13 2.2.17 Sdcard_AppCmd41 ... 13 2.2.18 Sdcard_AppCmd55 ... 14 2.2.19 Sdcard_Cmd58 ... 14 2.2.20 Sdcard_Cmd59 ... 15 2.2.21 Sdcard_Init ... 15 2.2.22 Sdcard_ReadSector ... 16 2.2.23 Sdcard_WriteSector ... 16 3. SD カードライブラリ サンプルデモンストレーション ... 17 3.1 SD カードベーシック API デモ ... 17 3.1.1 コード... 17 3.1.2 環境 ... 18 3.1.3 デモ手続き ... 18 3.2 SD カード fatFS デモ ... 20 3.2.1 コード... 20 3.2.2 環境 ... 21 3.2.3 デモ手続き ... 21 4. SD カードライブラリ適用ステップ ... 22 5. 付録 ... 23 6. 主な変更内容 ... 24A P P L I C A T I O N N O T E
1.
導入
1.1
FM ファミリ MCU に関して
FM ファミリは Cypress の 32-bit ARM アーキテクチャ MCU シリーズで、FM0+, FM3, FM4 があります。す べての FM ファミリには CSIO インタフェース(I/F) があります。 CSIO I/F として、SIO および SPI モード の通信手法を持ちます。
1.2
SD カードライブラリ (Secure Digital)に関して
SD はポータブルデバイスで使われる不揮発メモリカードフォーマットで、SDSC/SDHC/SDXC/SDIO の4つ のファミリを持ちます。また SD には、オリジナルサイズ/ミニサイズ/マイクロサイズ 3 つの異なるサイズ があります。通信手段として SPI および SD I/F をサポートします。 本 SD カードライブラリでは、以下のものがサポートされます。 − SD ファミリに関して:SDSC/SDHC − SD サイズに関して:すべて − 通信に関して:SPI − SD API に関して、以下の機能を提供します − SD カード 初期化 − SD カード セクタリード/ライト − SD カード ステータス取得 − MCU に関して、以下のものをサポートします − 全 FM3 タイプ − 全 FM0+ タイプ − 全 FM4 タイプ1.3
Document に関して
このアプリケーションノートでは、主に以下の事項をご紹介します − SD カードライブラリ API 紹介 − SD カードライブラリ サンプルデモンストレーション − SD カードライブラリ適用ステップA P P L I C A T I O N N O T E
2.
SD カードライブラリ APⅠ 紹介
2.1
SD カードライブラリ
主に以下を含みます(■マークの API は空関数です) Low level API:
static void SdcardPowerOn(void)
static void SdcardChipSelect(stc_sdcardinfo_t *pstcSdcardInfo, uint8_t u8Select) static uint8_t SdcardPresent(void)
static uint8_t SdcardWriteProtect(void) static void SdcardPowerOff(void)
void Sdcard_TimeWait(uint32_t u32cnt) uint8_t Sdcard_IsCardExist(void)
void Sdcard_CardSelect(stc_sdcardinfo_t *pstcSdcardInfo) void Sdcard_CardDeSelect(stc_sdcardinfo_t *pstcSdcardInfo) void Sdcard_Start(void) void Sdcard_PowerOn(void) void Sdcard_WaitPowerup(void) void Sdcard_Stop(void) void Sdcard_PowerOff(void) uint8_t Sdcard_IsWrProtect(void)
void Sdcard_ConfigFifo(stc_sdcardinfo_t *pstcSdcardInfo) void Sdcard_SpiModeConfig(stc_sdcardinfo_t *pstcSdcardInfo) static void SdcardSpiStopTX(void)
static void SdcardSpiTXHandler(void)
uint32_t Sdcard_Write(stc_sdcardinfo_t *pstcSdcardInfo, uint8_t *pu8Buf, uint16_t u16Length) static void SdcardSpiStopRX(void)
static void SdcardSpiRXHandler(void)
uint32_t Sdcard_Read(stc_sdcardinfo_t *pstcSdcardInfo, uint8_t *pu8Buf, uint16_t u16Length)
SD CMD basic API:
static uint8_t SdcardGetCRC7(uint8_t *pu8buf, int32_t i32len) static uint16_t SdcardGetCRC16(const uint8_t *pu8buf, int32_t i32len)
static void WriteCmd(stc_sdcardinfo_t *pstcSdcardInfo, uint8_t u8idx, uint32_t u32arg)
static int32_t WaitResponse(stc_sdcardinfo_t *pstcSdcardInfo, uint8_t *pu8c, uint32_t u32timeout) static int32_t ReadCmdResponse(stc_sdcardinfo_t *pstcSdcardInfo, uint8_t *pu8buf, uint32_t u32len)
static int32_t ReadDataBlock(stc_sdcardinfo_t *pstcSdcardInfo, uint8_t *u8buf, int32_t i32len, int32_t i32timeout) static int32_t ReadDataResponse(stc_sdcardinfo_t *pstcSdcardInfo)
static int32_t WaitBusyOff(stc_sdcardinfo_t *pstcSdcardInfo) static int32_t WaitBusyOff2(stc_sdcardinfo_t *pstcSdcardInfo) static void Shutdown(stc_sdcardinfo_t *pstcSdcardInfo) SD CMD API
int32_t SDDSendCMD0_GO_IDLE_STATE(stc_sdcardinfo_t *pstcSdcardInfo) int32_t SDDSendCMD8_CHECK_VERSION(stc_sdcardinfo_t *pstcSdcardInfo)
int32_t SDDSendCMD9_SEND_CSD(stc_sdcardinfo_t *pstcSdcardInfo, uint8_t *pu8csd) int32_t SDDSendCMD13_SEND_STAUS(stc_sdcardinfo_t *pstcSdcardInfo)
int32_t SDDSendCMD16_SET_BLOCK_LEN(stc_sdcardinfo_t *pstcSdcardInfo)
int32_t SDDSendCMD17_READ_SINGLE_BLOCK(stc_sdcardinfo_t *pstcSdcardInfo, uint32_t u32addr, uint8_t *pu8buf)
A P P L I C A T I O N N O T E static int32_t SendCMD55_APP_CMD(stc_sdcardinfo_t *pstcSdcardInfo) int32_t SDDSendACMD41_SEND_OP_CODE(stc_sdcardinfo_t *pstcSdcardInfo)
int32_t SDDSendCMD58_READ_OCR(stc_sdcardinfo_t *pstcSdcardInfo, uint8_t *pu8buf) int32_t SDDSendCMD59_CRC_ON_OFF(stc_sdcardinfo_t *pCSIOInfo, int32_t i32on_off)
SD API
int32_t Sdcard_Init(stc_sdcardinfo_t *pstcSdcardInfo)
int32_t Sdcard_ReadSector(stc_sdcardinfo_t *pstcSdcardInfo, uint32_t u32start, uint16_t u16count, uint8_t *pu8buf)
int32_t Sdcard_WriteSector(stc_sdcardinfo_t *pstcSdcardInfo, uint32_t u32start, uint16_t u16count, const uint8_t *pu8buf)
A P P L I C A T I O N N O T E
2.2
グローバル API 関数
2.2.1
Sdcard_TimeWait
カウント数サイクル待機 Prototype: void Sdcard_TimeWait(uint32_t u32cnt) Parameter: u32cnt: カウント数 Return: なし Description: この関数は、SD カードコマンド/初期化時に、待機のために使用されます。 パラメータ u32cnt は以下のとおりです。unsigned int number Remark: なし
2.2.2
Sdcard_IsCardExist
SD カードがソケットに挿入されているか確認します。 Prototype: uint8_t Sdcard_IsCardExist(void) Parameter: なし Return: SD カード存在ステータス Description: この関数は、 SD カードがソケットに挿入されているか確認するために CD ピンを確認します。 戻り値は以下のどれかの値となります。 0: 存在しません 1: 存在します Remark: なし2.2.3
Sdcard_CardSelect
SD カード選択オン Prototype: void Sdcard_CardSelect(stc_sdcardinfo_t *pstcSdcardInfo) Parameter: pstcSdcardInfo: SD カード情報のポインタ Return: なし Description: この関数は SD Card の CS を有効にします。 Remark: なしA P P L I C A T I O N N O T E
2.2.4
Sdcard_CardDeSelect
SD カード選択オフ Prototype: void Sdcard_CardDeSelect(stc_sdcardinfo_t *pstcSdcardInfo) Parameter: pstcSdcardInfo: SD カード情報のポインタ Return: なし Description: この関数は SD Card の CS を無効にします。 Remark: なし2.2.5
Sdcard_IsWrProtect
SD カードが書込み禁止か確認します Prototype: uint8_t Sdcard_IsWrProtect(void) Parameter: なし Return: SD カード書込み禁止保護ステータス Description: この関数は、SD カードが書込み禁止保護されているか確認するため、WP ピンを確認するのに使 われます。 戻り値は以下の値のどちらかとなります。 0: 保護なし 1: 保護あり Remark: なし2.2.6
Sdcard_ConfigFifo
SD カードに使う SPI チャネルの FIFO を定義します。 Prototype: void Sdcard_ConfigFifo(stc_sdcardinfo_t *pstcSdcardInfo) Parameter: pstcSdcardInfo: SD カード情報のポインタ Return: なし Description: この関数は SD カードに使う SPI チャネルの FIFO を定義するために使われます。 Remark: なしA P P L I C A T I O N N O T E
2.2.7
Sdcard_SpiModeConfig
SD カードに使う SPI チャネルを定義します。 Prototype: void Sdcard_SpiModeConfig(stc_sdcardinfo_t *pstcSdcardInfo) Parameter:pstcSdcardInfo: Pointer of SD card information Return: なし Description: この関数は SD カードに使う SPI チャネルの動作モードを定義するために使われます。 Remark: なし
2.2.8
Sdcard_Write
データを SD カードに送信します。 Prototype: uint32_tSdcard_Write(stc_sdcardinfo_t *pstcSdcardInfo, uint8_t *pu8Buf, uint16_t u16Length) Parameter: pstcSdcardInfo: SD カード情報のポインタ pu8Buf : 送信データバッファのポインタ u16Length : 送信データの数 Return: なし Description: この関数は SD カードへ指定された長さのデータを書き込むために使われます。 戻り値は以下の値のどちらかとなります。 SpiCommEND: 成功 SpiCommERR: 通信時にエラーあり Remark: なし
2.2.9
Sdcard_Read
SD カードからデータを受信します。 Prototype: uint32_tSdcard_Read(stc_sdcardinfo_t *pstcSdcardInfo, uint8_t *pu8Buf, uint16_t u16Length) Parameter: pstcSdcardInfo: SD カード情報のポインタ pu8Buf : 受信データバッファのポインタ u16Length : 受信データの数 Return: なし Description: この関数は SD カードから指定された長さのデータを受信するために使われます。 戻り値は以下の値のどちらかとなります。 SpiCommEND: 成功 SpiCommERR: 通信時にエラーあり Remark: なし
A P P L I C A T I O N N O T E
2.2.10
Sdcard_Cmd0
SD カードのコマンド 0 Prototype: int32_t Sdcard_Cmd0(stc_sdcardinfo_t *pstcSdcardInfo) Parameter: pstcSdcardInfo: SD カード情報のポインタ Return: コマンド 0 結果 Description: この関数は SD カードへコマンド0(GO_IDLE_STATE)を送付するために使用され、SD から SPI モードへ変更するために使われます。 戻り値は以下の値の内のどれかになります。 E_SDD_CMD_OK: SuccessE_SDD_CMD_ACCEPT: Command accepted E_SDD_CMD_ERR: Command error E_SDD_CMD_TIMEOUT: Timeout error E_SDD_CMD_CRC_ERR: CRC error E_SDD_CMD_WR_ERR: Write error E_SDD_CMD_IDLE: Command idle E_SDD_CMD_CARD_ERR: Card error Remark: なし
2.2.11
Sdcard_Cmd8
SD カードのコマンド 8 Prototype: int32_t Sdcard_Cmd8(stc_sdcardinfo_t *pstcSdcardInfo) Parameter: pstcSdcardInfo: SD カード情報のポインタ Return: コマンド 8 結果 Description: この関数は SD カードへコマンド8を送付するために使用され、 High Capacity Memory をサポートするために必要とされます。 戻り値は以下の値の内のどれかになります。E_SDD_CMD_OK: Success
E_SDD_CMD_ACCEPT: Command accepted E_SDD_CMD_ERR: Command error E_SDD_CMD_TIMEOUT: Timeout error E_SDD_CMD_CRC_ERR: CRC error E_SDD_CMD_WR_ERR: Write error E_SDD_CMD_IDLE: Command idle E_SDD_CMD_CARD_ERR: Card error Remark:
A P P L I C A T I O N N O T E
2.2.12
Sdcard_Cmd9
SD カードのコマンド 9 Prototype: int32_t Sdcard_Cmd9(stc_sdcardinfo_t *pstcSdcardInfo) Parameter: pstcSdcardInfo: SD カード情報のポインタ Return: コマンド 9 結果 Description: この関数は SD カードへコマンド9(SEND_CSD)を送付するために使用されます。 戻り値は以下の値の内のどれかになります。 E_SDD_CMD_OK: SuccessE_SDD_CMD_ACCEPT: Command accepted E_SDD_CMD_ERR: Command error E_SDD_CMD_TIMEOUT: Timeout error E_SDD_CMD_CRC_ERR: CRC error E_SDD_CMD_WR_ERR: Write error E_SDD_CMD_IDLE: Command idle E_SDD_CMD_CARD_ERR: Card error Remark: なし
2.2.13
Sdcard_Cmd13
SD カードのコマンド 13 Prototype: int32_t Sdcard_Cmd13(stc_sdcardinfo_t *pstcSdcardInfo) Parameter: pstcSdcardInfo: SD カード情報のポインタ Return: コマンド 13 結果 Description: この関数は SD カードへコマンド 13(SEND_STATUS)を送付するために使用されます。 戻り値は以下の値の内のどれかになります。 E_SDD_CMD_OK: SuccessE_SDD_CMD_ACCEPT: Command accepted E_SDD_CMD_ERR: Command error E_SDD_CMD_TIMEOUT: Timeout error E_SDD_CMD_CRC_ERR: CRC error E_SDD_CMD_WR_ERR: Write error E_SDD_CMD_IDLE: Command idle E_SDD_CMD_CARD_ERR: Card error Remark:
A P P L I C A T I O N N O T E
2.2.14
Sdcard_Cmd16
SD カードのコマンド 16 Prototype: int32_t Sdcard_Cmd16(stc_sdcardinfo_t *pstcSdcardInfo) Parameter: pstcSdcardInfo: SD カード情報のポインタ Return: コマンド 16 結果 Description: この関数は SD カードへコマンド 16(SET_BLOCKLEN)を送付するために使用されます。 戻り値は以下の値の内どれかになります。 E_SDD_CMD_OK: SuccessE_SDD_CMD_ACCEPT: Command accepted E_SDD_CMD_ERR: Command error E_SDD_CMD_TIMEOUT: Timeout error E_SDD_CMD_CRC_ERR: CRC error E_SDD_CMD_WR_ERR: Write error E_SDD_CMD_IDLE: Command idle E_SDD_CMD_CARD_ERR: Card error Remark: なし
2.2.15
Sdcard_Cmd17
SD カードのコマンド 17 Prototype: int32_t Sdcard_Cmd17(stc_sdcardinfo_t *pstcSdcardInfo) Parameter: pstcSdcardInfo: SD カード情報のポインタ Return: コマンド 17 結果 Description: この関数は SD カードへコマンド 17(READ_SINGLE_BLOCK)を送付するために使用されます。 戻り値は以下の値の内のどれかになります。 E_SDD_CMD_OK: SuccessE_SDD_CMD_ACCEPT: Command accepted E_SDD_CMD_ERR: Command error E_SDD_CMD_TIMEOUT: Timeout error E_SDD_CMD_CRC_ERR: CRC error E_SDD_CMD_WR_ERR: Write error E_SDD_CMD_IDLE: Command idle E_SDD_CMD_CARD_ERR: Card error Remark:
A P P L I C A T I O N N O T E
2.2.16
Sdcard_Cmd24
SD カードのコマンド 24 Prototype: int32_t Sdcard_Cmd24(stc_sdcardinfo_t *pstcSdcardInfo) Parameter: pstcSdcardInfo: SD カード情報のポインタ Return: コマンド 24 結果 Description: この関数は SD カードへコマンド 24(WRITE_BLOCK)を送付するために使用されます。 戻り値は以下の値の内のどれかになります。 E_SDD_CMD_OK: SuccessE_SDD_CMD_ACCEPT: Command accepted E_SDD_CMD_ERR: Command error E_SDD_CMD_TIMEOUT: Timeout error E_SDD_CMD_CRC_ERR: CRC error E_SDD_CMD_WR_ERR: Write error E_SDD_CMD_IDLE: Command idle E_SDD_CMD_CARD_ERR: Card error Remark: なし
2.2.17
Sdcard_AppCmd41
SD カードのアプリケーションコマンド 41 Prototype: int32_t Sdcard_AppCmd41(stc_sdcardinfo_t *pstcSdcardInfo) Parameter: pstcSdcardInfo: SD カード情報のポインタ Return: アプリケーションコマンド 41 結果 Description: この関数は SD カードへアプリケーションコマンド 41(SEND_OP_CODE)を送付するために使用さ れます。 戻り値は以下の値の内のどれかになります。 E_SDD_CMD_OK: SuccessE_SDD_CMD_ACCEPT: Command accepted E_SDD_CMD_ERR: Command error E_SDD_CMD_TIMEOUT: Timeout error E_SDD_CMD_CRC_ERR: CRC error E_SDD_CMD_WR_ERR: Write error E_SDD_CMD_IDLE: Command idle E_SDD_CMD_CARD_ERR: Card error Remark:
A P P L I C A T I O N N O T E
2.2.18
Sdcard_AppCmd55
SD カードのアプリケーションコマンド 55 Prototype: int32_t Sdcard_AppCmd55(stc_sdcardinfo_t *pstcSdcardInfo) Parameter: pstcSdcardInfo: SD カード情報のポインタ Return: アプリケーションコマンド 55 結果 Description: この関数は SD カードへアプリケーションコマンド 55(APP_CMD)を送付するために使用されます。 戻り値は以下の値の内のどれかになります。 E_SDD_CMD_OK: SuccessE_SDD_CMD_ACCEPT: Command accepted E_SDD_CMD_ERR: Command error E_SDD_CMD_TIMEOUT: Timeout error E_SDD_CMD_CRC_ERR: CRC error E_SDD_CMD_WR_ERR: Write error E_SDD_CMD_IDLE: Command idle E_SDD_CMD_CARD_ERR: Card error Remark: なし
2.2.19
Sdcard_Cmd58
SD カードのコマンド 58 Prototype: int32_t Sdcard_Cmd58(stc_sdcardinfo_t *pstcSdcardInfo) Parameter: pstcSdcardInfo: SD カード情報のポインタ Return: Command 58 結果 Description: この関数は SD カードへコマンド 58(READ_OCR)を送付するために使用されます。 戻り値は以下の値の内のどれかになります。 E_SDD_CMD_OK: SuccessE_SDD_CMD_ACCEPT: Command accepted E_SDD_CMD_ERR: Command error E_SDD_CMD_TIMEOUT: Timeout error E_SDD_CMD_CRC_ERR: CRC error E_SDD_CMD_WR_ERR: Write error E_SDD_CMD_IDLE: Command idle E_SDD_CMD_CARD_ERR: Card error Remark:
A P P L I C A T I O N N O T E
2.2.20
Sdcard_Cmd59
SD カードのコマンド 59 Prototype: int32_t Sdcard_Cmd59(stc_sdcardinfo_t *pstcSdcardInfo) Parameter: pstcSdcardInfo: SD カード情報のポインタ Return: Command 59 結果 Description: この関数は SD カードへコマンド 59(CRC_ON_OFF)を送付するために使用されます。 戻り値は以下の値の内のどれかになります。 E_SDD_CMD_OK: SuccessE_SDD_CMD_ACCEPT: Command accepted E_SDD_CMD_ERR: Command error E_SDD_CMD_TIMEOUT: Timeout error E_SDD_CMD_CRC_ERR: CRC error E_SDD_CMD_WR_ERR: Write error E_SDD_CMD_IDLE: Command idle E_SDD_CMD_CARD_ERR: Card error Remark: なし
2.2.21
Sdcard_Init
SD カード初期化 Prototype: int32_t Sdcard_Init(stc_sdcardinfo_t *pstcSdcardInfo) Parameter: pstcSdcardInfo: SD カード情報のポインタ Return: 初期化結果 Description: この関数は SD カードを初期化するために使われます。 戻り値は以下の値の内のどれかになります。 E_SDD_OK: SuccessE_SDD_NO_CARD: No card error
E_SDD_INACTIVE: SD Card is not activated E_SDD_PARAMETER: Parameter error E_SDD_PROTECT: SD Card is written protected E_SDD_DEVICE_TYPE: Not support
E_SDD_ACTIVE: SD Card is already activated Remark:
A P P L I C A T I O N N O T E
2.2.22
Sdcard_ReadSector
SD カードセクタ読出し Prototype:
int32_t
Sdcard_ReadSector(stc_sdcardinfo_t *pstcSdcardInfo, uint32_t u32start, uint16_t u16count, uint8_t *pu8buf) Parameter: pstcSdcardInfo: SD カード情報のポインタ u32start: 開始セクタ番号 u16count: セクタカウント pu8buf: 受信バッファ Return: 読出し結果 Description: この関数は SD カードからのデータ読出しに使用されます。 戻り値は以下の値の内のどれかになります。 E_SDD_OK: Success
E_SDD_NO_CARD: No card error
E_SDD_INACTIVE: SD Card is not activated E_SDD_PARAMETER: Parameter error E_SDD_PROTECT: SD Card is written protected E_SDD_DEVICE_TYPE: Not support
E_SDD_ACTIVE: SD Card is already activated Remark: なし
2.2.23
Sdcard_WriteSector
SD カードセクタ書込み Prototype: int32_tSdcard_WriteSector(stc_sdcardinfo_t *pstcSdcardInfo, uint32_t u32start, uint16_t u16count, uint8_t *pu8buf) Parameter: pstcSdcardInfo: SD カード情報のポインタ u32start: 開始セクタ番号 u16count: セクタカウント pu8buf: 送信バッファ Return: 書込み結果 Description: この関数は SD カードへのデータ書込みに使用されます。 戻り値は以下の値の内のどれかになります。 E_SDD_OK: Success
E_SDD_NO_CARD: No card error
E_SDD_INACTIVE: SD Card is not activated E_SDD_PARAMETER: Parameter error E_SDD_PROTECT: SD Card is written protected E_SDD_DEVICE_TYPE: Not support
E_SDD_ACTIVE: SD Card is already activated Remark:
A P P L I C A T I O N N O T E
3.
SD カードライブラリ サンプルデモンストレーション
3.1
SD カードベーシック API デモ
3.1.1
コード
IO 初期化コード Sdcard_Io_Init(); SD カード情報セッティングコード /* Config structure init */Sdcard_stcSdSpiInfo.u8Channel = SD_MFS_CH; Sdcard_stcSdSpiInfo.u8HwFifoFlag = NOHWFIFO; Sdcard_stcSdSpiInfo.u8TransState = SpiCommIDLE; Sdcard_stcSdSpiInfo.pstcModeConfig = &m_stcSdSpiModeConfig; Sdcard_stcSdSpiInfo.pstcFIFOConfig = NULL; Sdcard_SpiModeConfig(&Sdcard_stcSdSpiInfo); if(Sdcard_stcSdSpiInfo.u8HwFifoFlag == HWFIFO) { Sdcard_ConfigFifo(&Sdcard_stcSdSpiInfo); } SD カード初期化コード i32RetValue = SdcardInit(&Sdcard_stcSdSpiInfo); if(0 == i32RetValue) { ... SD カードセクタ番号取得/書込み、読出しセクタテストコード if(0 == i32RetValue) { //Initialization success! i32RetValue = Sdcard_GetCardSize(&m_u32SdcardSectorNum); if(0 != i32RetValue) { //Fail while(1); }
//Write sector test
i32RetValue = SdcardWriteSector(&Sdcard_stcSdSpiInfo); if(0 != i32RetValue) { //Fail while(1); }
//Read sector test
i32RetValue = SdcardReadSector(&Sdcard_stcSdSpiInfo); if(0 != i32RetValue) { //Fail while(1); } }
A P P L I C A T I O N N O T E
3.1.2
環境
MB9BF506R-SK (IAR) (上記図左側のボード) FSSDC-9B618-EVB-V1.03.1.3
デモ手続き
1. IAR を開きます。 2. 相当する PRJ を開始します(506/618)。 3. SD Card/micro SD Card を相当するカードソケットに挿入します。 4. テストコードを実施し、結果を確認します(BPs and check を設定してください)。A P P L I C A T I O N N O T E
A P P L I C A T I O N N O T E
3.2
SD カード fatFS デモ
3.2.1
コード
IO 初期化コード Sdcard_Io_Init(); SD カード情報セッティングコード /* Config structure init */Sdcard_stcSdSpiInfo.u8Channel = SD_MFS_CH; Sdcard_stcSdSpiInfo.u8HwFifoFlag = NOHWFIFO; Sdcard_stcSdSpiInfo.u8TransState = SpiCommIDLE; Sdcard_stcSdSpiInfo.pstcModeConfig = &m_stcSdSpiModeConfig; Sdcard_stcSdSpiInfo.pstcFIFOConfig = NULL; Sdcard_SpiModeConfig(&Sdcard_stcSdSpiInfo); if(Sdcard_stcSdSpiInfo.u8HwFifoFlag == HWFIFO) { Sdcard_ConfigFifo(&Sdcard_stcSdSpiInfo); } SD カード初期化コード i32RetValue = SdcardInit(&Sdcard_stcSdSpiInfo); if(0 == i32RetValue) { ... fatFS テストコード #if 1
/* fatFS API test */ /* Call the Test API */ // FatFsfmount(); // FatFsfopenclose(); // FatFsfread(); // FatFsfwrite(); // FatFsflseek(); // FatFsfgetfree(); // FatFsunlink(); // FatFschmod(); // FatFsrename(); // FatFsgets(); // FatFsputc(); // FatFsputs(); FatFssize();
A P P L I C A T I O N N O T E
3.2.2
環境
3.1.2 項と同様。3.2.3
デモ手続き
1. IAR を開きます。 2. 相当する PRJ を開始します (506/618)。 3. SD Card/micro SD Card を相当するカードソケットに挿入します。 4. テストコードを実施し、結果を確認します(BPs and check を設定してください)。A P P L I C A T I O N N O T E
4.
SD カードライブラリ適用ステップ
この SD カードライブラリは SPI I/F があるどの FM シリーズ MCU にも適用できます。以下の ステップに 従ってください。
1. クロックと相関ピンを board.h 中に定義してください。
A P P L I C A T I O N N O T E
5.
付録
ピンアサイメント board.h 506R 618S CLKHC (4MHZ) (4MHZ) CLKLC (100KHZ) (100KHZ) CLKM0 (4MHZ) (4MHZ) CLKS0 (32768UL) (32768UL)SD_CS_IO_PORT IO_PORT4 IO_PORT5
SD_CS_IO_PIN IO_PINxA IO_PINx3
SD_CD_IO_PORT IO_PORT4 IO_PORT0
SD_CD_IO_PIN IO_PINxB IO_PINx9
SD_WP_IO_PORT IO_PORT5 -
SD_WP_IO_PIN IO_PINxB -
USER_MFS_CH MFS_Ch1 MFS_Ch3
SD_MFS_PORT IO_PORT5 IO_PORT5
SD_MFS_SCK_PIN IO_PINx8 IO_PINx2
SD_MFS_SOT_PIN IO_PINx7 IO_PINx1
SD_MFS_SIN_PIN IO_PINx6 IO_PINx0
SD_MFS_SCK_PIN_LOC IO_MFS_SCKx_SCKx_0 IO_MFS_SCKx_SCKx_1 SD_MFS_SOT_PIN_LOC IO_MFS_SOTx_SOTx_0 IO_MFS_SOTx_SOTx_1 SD_MFS_SIN_PIN_LOC IO_MFS_SINx_SINx_0 IO_MFS_SINx_SINx_1
A P P L I C A T I O N N O T E
6.
主な変更内容
ページ 場所 変更箇所
Revision 1.0
A P P L I C A T I O N N O T E
MCU-AN-510049-J-11 Cypress Application Note
FM0+ Family, FM3 Family, FM4 Family 32-BIT MICROCONTROLLER
SPI SD カードライブラリ アプリケーションノート
September 2015 Rev. 1.0 Published: Cypress Semiconductor Corp.
A P P L I C A T I O N N O T E 免責事項 本資料に記載された製品は、通常の産業用, 一般事務用, パーソナル用, 家庭用などの一般的用途 (ただし、用途の限定はあ りません) に使用されることを意図して設計・製造されています。(1) 極めて高度な安全性が要求され、仮に当該安全性が 確保されない場合、社会的に重大な影響を与えかつ直接生命・身体に対する重大な危険性を伴う用途 (原子力施設における 核反応制御, 航空機自動飛行制御, 航空交通管制, 大量輸送システムにおける運行制御, 生命維持のための医療機器, 兵器シ ステムにおけるミサイル発射制御等をいう) 、ならびに(2) 極めて高い信頼性が要求される用途 (海底中継器, 宇宙衛星等を いう) に使用されるよう設計・製造されたものではありません。上記の製品の使用法によって惹起されたいかなる請求また は損害についても、Cypress は、お客様または第三者、あるいはその両方に対して責任を一切負いません。半導体デバイス はある確率で故障が発生します。当社半導体デバイスが故障しても、結果的に人身事故, 火災事故, 社会的な損害を生じさ せないよう、お客様において、装置の冗長設計, 延焼対策設計, 過電流防止対策設計, 誤動作防止設計などの安全設計をお願 いします。本資料に記載された製品が、外国為替及び外国貿易法、米国輸出管理関連法規などの規制に基づき規制されてい る製品または技術に該当する場合には、本製品の輸出に際して、同法に基づく許可が必要となります。 商標および注記 このドキュメントは、断りなく変更される場合があります。本資料には Cypress が開発中の Cypress 製品に関する情報が記 載されている場合があります。Cypress は、それらの製品に対し、予告なしに仕様を変更したり、開発を中止したりする権 利を有します。このドキュメントに含まれる情報は、現状のまま、保証なしに提供されるものであり、その正確性, 完全性, 実施可能性および特定の目的に対する適合性やその市場性および他者の権利を侵害しない事を保証するものでなく、また、 明示, 黙示または法定されているあらゆる保証をするものでもありません。Cypress は、このドキュメントに含まれる情報を 使用することにより発生したいかなる損害に対しても責任を一切負いません。
Copyright © 2015 Cypress Semiconductor Corp. All rights reserved. 商標:Cypress, Cypress ロゴ, Spansion®
, Spansion ロゴ (図形マーク), MirrorBit®, MirrorBit® Eclipse™, ORNAND™, Easy DesignSim™, Traveo™ 及びこれらの組合せは、米国・日本ほか諸外国における Cypress Semiconductor Corp.の商標です。第三