SPI SD カードライブラリ 32-BIT MICROCONTROLLER FM0+ Family, FM3 Family, FM4 Family APPLICATION NOTE Publication Number MCU_AN-510049-J-11 Revision 1.0 Issue Date September 11, 2015
対象製品 本操作マニュアルに記載されている内容の対象製品は FM0+ Family, FM3 Family, および FM4 Family の全製品です 2 MCU_AN-510049-J-11, September 11, 2015
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. 主な変更内容... 24 September 11, 2015, MCU_AN-510049-J-11 3
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 カードライブラリ適用ステップ 4 MCU_AN-510049-J-11, September 11, 2015
2. SD カードライブラリ APⅠ 紹介 2.1 SD カードライブラリ Low level API: 主に以下を含みます ( マークの 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(u 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) u Sdcard_Write(stc_sdcardinfo_t *pstcsdcardinfo, uint8_t *pu8buf, uint16_t u16length) static void SdcardSpiStopRX(void) static void SdcardSpiRXHandler(void) u Sdcard_Read(stc_sdcardinfo_t *pstcsdcardinfo, uint8_t *pu8buf, uint16_t u16length) SD CMD basic API: static uint8_t SdcardGetCRC7(uint8_t *pu8buf, i32len) static uint16_t SdcardGetCRC16(const uint8_t *pu8buf, i32len) static void WriteCmd(stc_sdcardinfo_t *pstcsdcardinfo, uint8_t u8idx, u u32arg) static WaitResponse(stc_sdcardinfo_t *pstcsdcardinfo, uint8_t *pu8c, u u32timeout) static ReadCmdResponse(stc_sdcardinfo_t *pstcsdcardinfo, uint8_t *pu8buf, u u32len) static ReadDataBlock(stc_sdcardinfo_t *pstcsdcardinfo, uint8_t *u8buf, i32len, i32timeout) static ReadDataResponse(stc_sdcardinfo_t *pstcsdcardinfo) static WaitBusyOff(stc_sdcardinfo_t *pstcsdcardinfo) static WaitBusyOff2(stc_sdcardinfo_t *pstcsdcardinfo) static void Shutdown(stc_sdcardinfo_t *pstcsdcardinfo) SD CMD API SDDSendCMD0_GO_IDLE_STATE(stc_sdcardinfo_t *pstcsdcardinfo) SDDSendCMD8_CHECK_VERSION(stc_sdcardinfo_t *pstcsdcardinfo) SDDSendCMD9_SEND_CSD(stc_sdcardinfo_t *pstcsdcardinfo, uint8_t *pu8csd) SDDSendCMD13_SEND_STAUS(stc_sdcardinfo_t *pstcsdcardinfo) SDDSendCMD16_SET_BLOCK_LEN(stc_sdcardinfo_t *pstcsdcardinfo) SDDSendCMD17_READ_SINGLE_BLOCK(stc_sdcardinfo_t *pstcsdcardinfo, u u32addr, uint8_t *pu8buf) SDDSendCMD24_WRITE_BLOCK(stc_sdcardinfo_t *pstcsdcardinfo, u u32addr, const uint8_t *pu8buf) September 11, 2015, MCU_AN-510049-J-11 5
static SendCMD55_APP_CMD(stc_sdcardinfo_t *pstcsdcardinfo) SDDSendACMD41_SEND_OP_CODE(stc_sdcardinfo_t *pstcsdcardinfo) SDDSendCMD58_READ_OCR(stc_sdcardinfo_t *pstcsdcardinfo, uint8_t *pu8buf) SDDSendCMD59_CRC_ON_OFF(stc_sdcardinfo_t *pcsioinfo, i32on_off) SD API Sdcard_Init(stc_sdcardinfo_t *pstcsdcardinfo) Sdcard_ReadSector(stc_sdcardinfo_t *pstcsdcardinfo, u u32start, uint16_t u16count, uint8_t *pu8buf) Sdcard_WriteSector(stc_sdcardinfo_t *pstcsdcardinfo, u u32start, uint16_t u16count, const uint8_t *pu8buf) Sdcard_GetCardSize(u *pu32sectors) 6 MCU_AN-510049-J-11, September 11, 2015
2.2 グローバル API 関数 2.2.1 Sdcard_TimeWait カウント数サイクル待機 void Sdcard_TimeWait(u u32cnt) u32cnt: カウント数 この関数は SD カードコマンド / 初期化時に 待機のために使用されます パラメータ u32cnt は以下のとおりです unsigned int number 2.2.2 Sdcard_IsCardExist SD カードがソケットに挿入されているか確認します uint8_t Sdcard_IsCardExist(void) SD カード存在ステータス この関数は SD カードがソケットに挿入されているか確認するために CD ピンを確認します 戻り値は以下のどれかの値となります 0: 存在しません 1: 存在します 2.2.3 Sdcard_CardSelect SD カード選択オン void Sdcard_CardSelect(stc_sdcardinfo_t *pstcsdcardinfo) この関数は SD Card の CS を有効にします September 11, 2015, MCU_AN-510049-J-11 7
2.2.4 Sdcard_CardDeSelect SD カード選択オフ void Sdcard_CardDeSelect(stc_sdcardinfo_t *pstcsdcardinfo) この関数は SD Card の CS を無効にします 2.2.5 Sdcard_IsWrProtect SD カードが書込み禁止か確認します uint8_t Sdcard_IsWrProtect(void) SD カード書込み禁止保護ステータス この関数は SD カードが書込み禁止保護されているか確認するため WP ピンを確認するのに使われます 戻り値は以下の値のどちらかとなります 0: 保護 1: 保護あり 2.2.6 Sdcard_ConfigFifo SD カードに使う SPI チャネルの FIFO を定義します void Sdcard_ConfigFifo(stc_sdcardinfo_t *pstcsdcardinfo) この関数は SD カードに使う SPI チャネルの FIFO を定義するために使われます 8 MCU_AN-510049-J-11, September 11, 2015
2.2.7 Sdcard_SpiModeConfig SD カードに使う SPI チャネルを定義します void Sdcard_SpiModeConfig(stc_sdcardinfo_t *pstcsdcardinfo) pstcsdcardinfo: Pointer of SD card information この関数は SD カードに使う SPI チャネルの動作モードを定義するために使われます 2.2.8 Sdcard_Write データを SD カードに送信します u Sdcard_Write(stc_sdcardinfo_t *pstcsdcardinfo, uint8_t *pu8buf, uint16_t u16length) pu8buf : 送信データバッファのポインタ u16length : 送信データの数 この関数は SD カードへ指定された長さのデータを書き込むために使われます 戻り値は以下の値のどちらかとなります SpiCommEND: 成功 SpiCommERR: 通信時にエラーあり 2.2.9 Sdcard_Read SD カードからデータを受信します u Sdcard_Read(stc_sdcardinfo_t *pstcsdcardinfo, uint8_t *pu8buf, uint16_t u16length) pu8buf : 受信データバッファのポインタ u16length : 受信データの数 この関数は SD カードから指定された長さのデータを受信するために使われます 戻り値は以下の値のどちらかとなります SpiCommEND: 成功 SpiCommERR: 通信時にエラーあり September 11, 2015, MCU_AN-510049-J-11 9
2.2.10 Sdcard_Cmd0 SD カードのコマンド 0 Sdcard_Cmd0(stc_sdcardinfo_t *pstcsdcardinfo) コマンド 0 結果 この関数は SD カードへコマンド 0(GO_IDLE_STATE) を送付するために使用され SD から SPI モードへ変更するために使われます 戻り値は以下の値の内のどれかになります 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 2.2.11 Sdcard_Cmd8 SD カードのコマンド 8 Sdcard_Cmd8(stc_sdcardinfo_t *pstcsdcardinfo) コマンド 8 結果 この関数は 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 10 MCU_AN-510049-J-11, September 11, 2015
2.2.12 Sdcard_Cmd9 SD カードのコマンド 9 Sdcard_Cmd9(stc_sdcardinfo_t *pstcsdcardinfo) コマンド 9 結果 この関数は SD カードへコマンド 9(SEND_CSD) を送付するために使用されます 戻り値は以下の値の内のどれかになります 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 2.2.13 Sdcard_Cmd13 SD カードのコマンド 13 Sdcard_Cmd13(stc_sdcardinfo_t *pstcsdcardinfo) コマンド 13 結果 この関数は SD カードへコマンド 13(SEND_STATUS) を送付するために使用されます 戻り値は以下の値の内のどれかになります 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 September 11, 2015, MCU_AN-510049-J-11 11
2.2.14 Sdcard_Cmd16 SD カードのコマンド 16 Sdcard_Cmd16(stc_sdcardinfo_t *pstcsdcardinfo) コマンド 16 結果 この関数は SD カードへコマンド 16(SET_BLOCKLEN) を送付するために使用されます 戻り値は以下の値の内どれかになります 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 2.2.15 Sdcard_Cmd17 SD カードのコマンド 17 Sdcard_Cmd17(stc_sdcardinfo_t *pstcsdcardinfo) コマンド 17 結果 この関数は SD カードへコマンド 17(READ_SINGLE_BLOCK) を送付するために使用されます 戻り値は以下の値の内のどれかになります 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 12 MCU_AN-510049-J-11, September 11, 2015
2.2.16 Sdcard_Cmd24 SD カードのコマンド 24 Sdcard_Cmd24(stc_sdcardinfo_t *pstcsdcardinfo) コマンド 24 結果 この関数は SD カードへコマンド 24(WRITE_BLOCK) を送付するために使用されます 戻り値は以下の値の内のどれかになります 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 2.2.17 Sdcard_AppCmd41 SD カードのアプリケーションコマンド 41 Sdcard_AppCmd41(stc_sdcardinfo_t *pstcsdcardinfo) アプリケーションコマンド 41 結果 この関数は SD カードへアプリケーションコマンド 41(SEND_OP_CODE) を送付するために使用されます 戻り値は以下の値の内のどれかになります 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 September 11, 2015, MCU_AN-510049-J-11 13
2.2.18 Sdcard_AppCmd55 SD カードのアプリケーションコマンド 55 Sdcard_AppCmd55(stc_sdcardinfo_t *pstcsdcardinfo) アプリケーションコマンド 55 結果 この関数は SD カードへアプリケーションコマンド 55(APP_CMD) を送付するために使用されます 戻り値は以下の値の内のどれかになります 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 2.2.19 Sdcard_Cmd58 SD カードのコマンド 58 Sdcard_Cmd58(stc_sdcardinfo_t *pstcsdcardinfo) Command 58 結果 この関数は SD カードへコマンド 58(READ_OCR) を送付するために使用されます 戻り値は以下の値の内のどれかになります 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 14 MCU_AN-510049-J-11, September 11, 2015
2.2.20 Sdcard_Cmd59 SD カードのコマンド 59 Sdcard_Cmd59(stc_sdcardinfo_t *pstcsdcardinfo) Command 59 結果 この関数は SD カードへコマンド 59(CRC_ON_OFF) を送付するために使用されます 戻り値は以下の値の内のどれかになります 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 2.2.21 Sdcard_Init SD カード初期化 Sdcard_Init(stc_sdcardinfo_t *pstcsdcardinfo) 初期化結果 この関数は 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 September 11, 2015, MCU_AN-510049-J-11 15
2.2.22 Sdcard_ReadSector SD カードセクタ読出し Sdcard_ReadSector(stc_sdcardinfo_t *pstcsdcardinfo, u u32start, uint16_t u16count, uint8_t *pu8buf) u32start: 開始セクタ番号 u16count: セクタカウント pu8buf: 受信バッファ 読出し結果 この関数は 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 2.2.23 Sdcard_WriteSector SD カードセクタ書込み Sdcard_WriteSector(stc_sdcardinfo_t *pstcsdcardinfo, u u32start, uint16_t u16count, uint8_t *pu8buf) u32start: 開始セクタ番号 u16count: セクタカウント pu8buf: 送信バッファ 書込み結果 この関数は 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 16 MCU_AN-510049-J-11, September 11, 2015
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); } } September 11, 2015, MCU_AN-510049-J-11 17
3.1.2 環境 MB9BF506R-SK (IAR) ( 上記図左側のボード ) FSSDC-9B618-EVB-V1.0 3.1.3 デモ手続き 1. IAR を開きます 2. 相当する PRJ を開始します (506/618) 3. SD Card/micro SD Card を相当するカードソケットに挿入します 4. テストコードを実施し 結果を確認します (BPs and check を設定してください ) 18 MCU_AN-510049-J-11, September 11, 2015
September 11, 2015, MCU_AN-510049-J-11 19
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(); 20 MCU_AN-510049-J-11, September 11, 2015
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 を設定してください ) September 11, 2015, MCU_AN-510049-J-11 21
4. SD カードライブラリ適用ステップ この SD カードライブラリは SPI I/F があるどの FM シリーズ MCU にも適用できます 以下のステップに従ってください 1. クロックと相関ピンを board.h 中に定義してください 2. sdcard_hw.c 中の SdcardChipSelect/SdcardPresent/SdcardWriteProtect を確認してください 22 MCU_AN-510049-J-11, September 11, 2015
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 September 11, 2015, MCU_AN-510049-J-11 23
6. 主な変更内容 Revision 1.0 ページ場所変更箇所 - - Initial release 24 MCU_AN-510049-J-11, September 11, 2015
MCU-AN-510049-J-11 Cypress Application Note FM0+ Family, FM3 Family, FM4 Family 32-BIT MICROCONTROLLER SPI SD カードライブラリアプリケーションノート Published: Cypress Semiconductor Corp. Edited: コーポレートコミュニケーション部 September 2015 Rev. 1.0 September 11, 2015, MCU_AN-510049-J-11 25
免責事項本資料に記載された製品は 通常の産業用, 一般事務用, パーソナル用, 家庭用などの一般的用途 ( ただし 用途の限定はありません ) に使用されることを意図して設計 製造されています (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. の商標です 第三者の社名 製品名等の記載はここでは情報提供を目的として表記したものであり 各権利者の商標もしくは登録商標となっている場合があります 26 MCU_AN-510049-J-11, September 11, 2015