{"id":184,"date":"2020-06-10T21:24:53","date_gmt":"2020-06-10T12:24:53","guid":{"rendered":"https:\/\/r-side.net\/?p=184"},"modified":"2020-06-10T21:47:02","modified_gmt":"2020-06-10T12:47:02","slug":"post-184","status":"publish","type":"post","link":"https:\/\/r-side.net\/?p=184","title":{"rendered":"RX64M\u3067SD(TF)\u30ab\u30fc\u30c9\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b"},"content":{"rendered":"<p>RX64M\u306b\u306fSD\u30db\u30b9\u30c8\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u304c\u642d\u8f09\u3055\u308c\u3066\u3044\u307e\u3059\u3002<br \/>\n\u4ee5\u524d\u306f\u3001\u30e9\u30a4\u30bb\u30f3\u30b9\u306e\u95a2\u4fc2\u3067\u4e00\u822c\u306b\u306f\u4f7f\u7528\u51fa\u6765\u306a\u304b\u3063\u305f\u69d8\u3067\u3059\u304c\u3001\u6700\u8fd1FIT\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u516c\u958b\u3055\u308c\u3066\u3044\u307e\u3059\u306e\u3067\u3001\u3055\u3063\u305d\u304f\u4f7f\u7528\u3057\u3066\u307f\u305f\u3044\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n<p style=\"text-align: center;\">\u4f7f\u7528\u3057\u305f\u30d0\u30fc\u30b8\u30e7\u30f3\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3001\u305d\u308c\u305e\u308c\u306eFIT\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u8a2d\u5b9a\u3057\u3066\u3044\u304d\u307e\u3059\u3002<br \/>\nr_sdc_sdmem_rx 3.00<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-185\" src=\"https:\/\/r-side.net\/wordpress\/wp-content\/uploads\/2020\/06\/r_sdc_sdmem_rx.png\" alt=\"\" width=\"612\" height=\"134\" srcset=\"https:\/\/r-side.net\/wordpress\/wp-content\/uploads\/2020\/06\/r_sdc_sdmem_rx.png 612w, https:\/\/r-side.net\/wordpress\/wp-content\/uploads\/2020\/06\/r_sdc_sdmem_rx-300x66.png 300w, https:\/\/r-side.net\/wordpress\/wp-content\/uploads\/2020\/06\/r_sdc_sdmem_rx-530x116.png 530w, https:\/\/r-side.net\/wordpress\/wp-content\/uploads\/2020\/06\/r_sdc_sdmem_rx-565x124.png 565w\" sizes=\"auto, (max-width: 612px) 100vw, 612px\" \/>r_sdhi_rx 2.06<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-186\" src=\"https:\/\/r-side.net\/wordpress\/wp-content\/uploads\/2020\/06\/r_sdhi_rx.png\" alt=\"\" width=\"613\" height=\"546\" srcset=\"https:\/\/r-side.net\/wordpress\/wp-content\/uploads\/2020\/06\/r_sdhi_rx.png 613w, https:\/\/r-side.net\/wordpress\/wp-content\/uploads\/2020\/06\/r_sdhi_rx-300x267.png 300w, https:\/\/r-side.net\/wordpress\/wp-content\/uploads\/2020\/06\/r_sdhi_rx-530x472.png 530w, https:\/\/r-side.net\/wordpress\/wp-content\/uploads\/2020\/06\/r_sdhi_rx-565x503.png 565w\" sizes=\"auto, (max-width: 613px) 100vw, 613px\" \/>WP\u7aef\u5b50\u3092\u4f7f\u7528\u3057\u306a\u3044\u5834\u5408\u306f\u30c1\u30a7\u30c3\u30af\u3092\u5916\u3057\u307e\u3059\u3002<br \/>\n\u30a2\u30af\u30c6\u30a3\u30d6\u306e\u5909\u66f4\u306f\u51fa\u6765\u306a\u3044\u3088\u3046\u306a\u306e\u3067\u3001\u4f7f\u7528\u3059\u308b\u5834\u5408\u306f\u6ce8\u610f\u3057\u307e\u3059\u3002<\/p>\n<p>r_tfat_driver_rx 1.08<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-187\" src=\"https:\/\/r-side.net\/wordpress\/wp-content\/uploads\/2020\/06\/r_tfat_driver_rx.png\" alt=\"\" width=\"613\" height=\"491\" srcset=\"https:\/\/r-side.net\/wordpress\/wp-content\/uploads\/2020\/06\/r_tfat_driver_rx.png 613w, https:\/\/r-side.net\/wordpress\/wp-content\/uploads\/2020\/06\/r_tfat_driver_rx-300x240.png 300w, https:\/\/r-side.net\/wordpress\/wp-content\/uploads\/2020\/06\/r_tfat_driver_rx-530x425.png 530w, https:\/\/r-side.net\/wordpress\/wp-content\/uploads\/2020\/06\/r_tfat_driver_rx-565x453.png 565w\" sizes=\"auto, (max-width: 613px) 100vw, 613px\" \/>r_tfat_rx 4.00<br \/>\n[\u8a2d\u5b9a\u9805\u76ee\u306a\u3057]<\/p>\n<p>\u30bd\u30d5\u30c8\u30a6\u30a8\u30a2\u306b\u3064\u3044\u3066\u306f\u3001\u30b7\u30b9\u30c6\u30e0\u30bf\u30a4\u30de\u3092\u4f7f\u3063\u3066\u3044\u308b\u306e\u3067\u3001\u4ee5\u4e0b\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u30a4\u30f3\u30af\u30eb\u30fc\u30c9\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"lang:c++ decode:true\" title=\"\u30a4\u30f3\u30af\u30eb\u30fc\u30c9\">\/\/\u30b7\u30b9\u30c6\u30e0\u30bf\u30a4\u30de\r\n#include \"r_sys_time_rx_if.h\"\r\n\/\/SDC\r\n#include \"r_sdhi_rx_if.h\"\r\n#include \"r_sdhi_rx_pinset.h\"\r\n#include \"r_sdc_sd_rx_if.h\"\r\n#include \"r_sdc_sd_rx_config.h\"\r\n\/\/FAT\r\n#include \"r_tfat_driver_rx_if.h\"\r\n#include \"r_tfat_driver_rx_config.h\"\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>SD\u30ab\u30fc\u30c9\u5236\u5fa1\u7528\u306e\u30bd\u30fc\u30b9\u306f\u3001\u4e0b\u8a18\u306e\u69d8\u306b\u4f5c\u6210\u3057\u307e\u3057\u305f\u3002<\/p>\n<pre class=\"lang:c++ decode:true\" title=\"SD\u30ab\u30fc\u30c9\u30b3\u30f3\u30c8\u30fc\u30eb\">#define SD_CARD_DEBUG_PRINT     1                   \/\/\u30c7\u30d0\u30c3\u30b0\u7528 Printf\u306e\u6709\u52b9\u5316\r\n#define SD_CARD_DEV_NO          0                   \/\/SD\u30ab\u30fc\u30c9 \u30c7\u30d0\u30a4\u30b9\u756a\u53f7\r\n#define SD_CARD_DRV_LETTER      \"0:\"                \/\/SD\u30ab\u30fc\u30c9 \u30c9\u30e9\u30a4\u30d6\u756a\u53f7(FatFs)\r\n#define SD_POWER_PORT            PORT1.PODR.BIT.B0  \/\/SD\u30ab\u30fc\u30c9\u96fb\u6e90\u5236\u5fa1\u30dd\u30fc\u30c8\r\n\r\nFATFS               SD_CARD_FATFS;                  \/\/SD\u30ab\u30fc\u30c9 \u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\r\nuint32_t            SD_CARD_WORK_MEM[50];           \/\/SD\u30ab\u30fc\u30c9 \u30ef\u30fc\u30af\u30a8\u30ea\u30a2(200Byte\u5fc5\u8981)\r\nunsigned short      SD_CARD_POWER_WAIT;             \/\/SD\u30ab\u30fc\u30c9 \u96fb\u6e90\u6295\u5165\u30bf\u30a4\u30de\r\nunsigned short      SD_CARD_ERR_STATUS = 0;         \/\/SD\u30ab\u30fc\u30c9 \u30a8\u30e9\u30fc\u30b9\u30c6\u30fc\u30bf\u30b9\r\nunsigned short      SD_CARD_READY = 0;              \/\/SD\u30ab\u30fc\u30c9 \u6e96\u5099\u30c6\u30fc\u30bf\u30b9\r\n\r\n\/\/SD\u30ab\u30fc\u30c9 \u96fb\u6e90\u521d\u671f\u5316\r\nsdc_sd_status_t sd_card_power_init(uint32_t card_no){\r\n    if (SDC_SD_CARD_NO0 == card_no){    \/\/User must create processing for device number 1 or later.\r\n       SD_POWER_PORT = 0;               \/\/SD-POW\r\n    }\r\n    return SDC_SD_SUCCESS;\r\n}\r\n\r\n\/\/SD\u30ab\u30fc\u30c9 \u96fb\u6e90 ON\r\nsdc_sd_status_t sd_card_power_on(uint32_t card_no){\r\n    if (SDC_SD_CARD_NO0 == card_no){    \/\/User must create processing for device number 1 or later.\r\n        SD_POWER_PORT = 1;              \/\/SD-POW\r\n    }\r\n    \/\/R_BSP_SoftwareDelay(10, BSP_DELAY_MILLISECS);    \/\/Supplies the Power to the SD Card and waits.\r\n    SD_CARD_POWER_WAIT = 10;\r\n    return SDC_SD_SUCCESS;\r\n}\r\n\r\n\/\/SD\u30ab\u30fc\u30c9 \u96fb\u6e90 OFF\r\nsdc_sd_status_t sd_card_power_off(uint32_t card_no){\r\n    if (SDC_SD_CARD_NO0 == card_no){    \/\/User must create processing for device number 1 or later.\r\n        SD_POWER_PORT = 0;              \/\/SD-POW\r\n    }\r\n    \/\/R_BSP_SoftwareDelay(1, BSP_DELAY_MILLISECS);    \/\/Supplies the Power to the SD Card and waits.\r\n    return SDC_SD_SUCCESS;\r\n}\r\n\r\n\/\/\u30ab\u30fc\u30c9\u691c\u51fa(CD)\u30b3\u30fc\u30eb\u30d0\u30c3\u30af\r\nsdc_sd_status_t sd_card_cd_callback (int32_t cd){\r\n    uint32_t card_no;\r\n    R_SDC_SD_CdInt(SD_CARD_DEV_NO, SDC_SD_CD_INT_DISABLE, 0);\r\n    return SDC_SD_SUCCESS;\r\n}\r\n\r\n\/\/\u30ab\u30fc\u30c9\u72b6\u614b\u5909\u5316\u30b3\u30fc\u30eb\u30d0\u30c3\u30af\r\nsdc_sd_status_t sd_card_status_callback (int32_t channel){\r\n    return SDC_SD_SUCCESS;\r\n}\r\n\r\n\r\n\/\/\u30a8\u30e9\u30fc\u691c\u51fa\r\nvoid sd_card_error_trap (uint32_t sdc_sd_card_no){\r\n    sdc_sd_status_t err_code;\r\n    err_code = R_SDC_SD_GetErrCode(sdc_sd_card_no);\r\n    #ifdef SD_CARD_DEBUG_PRINT\r\n    printf(\"ERROR: error code (sdc_sd_status_t) is %d.\\n\", err_code);\r\n    #endif\r\n    SD_CARD_ERR_STATUS |= 0x0020;\r\n}\r\n\r\n\/\/\u30bf\u30a4\u30de\u51e6\u7406\r\nvoid sd_card_1ms_interval(void){\r\n    if(SD_CARD_POWER_WAIT) SD_CARD_POWER_WAIT--;\r\n    r_sdc_sd_1msInterval();\r\n}\r\n\r\n\/\/SD\u30ab\u30fc\u30c9\u306e\u521d\u671f\u5316\r\nvoid sd_card_init(void){\r\n    sdc_sd_status_t sdc_sd_status;\r\n    uint32_t        cmt_channel;\r\n    bool            cmt_ret;\r\n    \r\n    \/\/1mS\u5468\u671f\u5272\u308a\u8fbc\u307f\u306e\u767b\u9332\r\n    \/\/cmt_ret = R_CMT_CreatePeriodic(1000,(void(*)(void*))R_SDC_SD_1msInterval, &amp;cmt_channel);\r\n    cmt_ret = R_CMT_CreatePeriodic(1000,(void(*)(void*))sd_card_1ms_interval, &amp;cmt_channel);\r\n    if(cmt_ret != true){\r\n        SD_CARD_ERR_STATUS |= 0x0001;\r\n    }\r\n    \r\n    \/\/SDHI \u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u306e\u521d\u671f\u5316\r\n    R_SDHI_PinSetInit();                    \/\/SDHI \u7aef\u5b50\u306e\u521d\u671f\u8a2d\u5b9a\r\n    sd_card_power_init(SD_CARD_DEV_NO);     \/\/\u30ab\u30fc\u30c9\u96fb\u6e90\u521d\u671f\u5316\r\n    \r\n    \/\/SD \u30e1\u30e2\u30ea\u30ab\u30fc\u30c9\u30c9\u30e9\u30a4\u30d0\u306e\u521d\u671f\u5316\r\n    sdc_sd_status = R_SDC_SD_Open(SD_CARD_DEV_NO, SD_CARD_DEV_NO, &amp;SD_CARD_WORK_MEM);\r\n    if(sdc_sd_status != SDC_SD_SUCCESS){\r\n        #ifdef SD_CARD_DEBUG_PRINT\r\n        printf(\"ERROR: R_SDC_SD_Open. Error code (sdc_sd_status_t) is %d.\\n\", sdc_sd_status);\r\n        #endif\r\n        SD_CARD_ERR_STATUS |= 0x0010;\r\n    }\r\n    sdc_sd_status = R_SDC_SD_CdInt(SD_CARD_DEV_NO, SDC_SD_CD_INT_ENABLE, sd_card_cd_callback);\r\n    if (SDC_SD_SUCCESS != sdc_sd_status){\r\n        sd_card_error_trap(SD_CARD_DEV_NO);\r\n    }\r\n    \/\/sdc_sd_status = R_SDC_SD_IntCallback(SD_CARD_DEV_NO, sd_card_status_callback);\r\n    sdc_sd_status = R_SDC_SD_IntCallback(SD_CARD_DEV_NO, NULL);\r\n    if (SDC_SD_SUCCESS != sdc_sd_status){\r\n        sd_card_error_trap(SD_CARD_DEV_NO);\r\n    }\r\n    \r\n}\r\n\r\n\/\/SD\u30ab\u30fc\u30c9\u691c\u51fa\u51e6\u7406\r\nvoid sd_card_task(void){\r\n    static short                init_status = 0;                            \/\/\u521d\u671f\u5316\u72b6\u614b\u30d5\u30e9\u30b0\r\n    static sdc_sd_status_t      pre_detection_status = SDC_SD_SUCCESS;      \/\/\u30ab\u30fc\u30c9\u691c\u51fa\u524d\u56de\u5024\r\n\r\n    sdc_sd_status_t     detection_status;\r\n    sdc_sd_status_t     sdc_sd_status;\r\n    sdc_sd_cfg_t        sdc_sd_config;\r\n    FRESULT             f_res;\r\n    \r\n    \/\/\u30ab\u30fc\u30c9\u691c\u51fa\u72b6\u614b\u306e\u78ba\u8a8d\r\n    detection_status = R_SDC_SD_GetCardDetection(SD_CARD_DEV_NO);\r\n    if(pre_detection_status != detection_status){\r\n        pre_detection_status = detection_status;\r\n        if(detection_status == SDC_SD_SUCCESS){\r\n            \/\/\u30ab\u30fc\u30c9\u691c\u51fa\u6642\r\n            #ifdef SD_CARD_DEBUG_PRINT\r\n            printf(\"Detected attached SD card.\\n\");\r\n            #endif\r\n            sd_card_power_on(SD_CARD_DEV_NO);                               \/\/\u30ab\u30fc\u30c9\u96fb\u6e90\u6295\u5165\r\n            init_status = 1;\r\n        }else{\r\n            \/\/\u30ab\u30fc\u30c9\u672a\u691c\u51fa\u6642\r\n            #ifdef SD_CARD_DEBUG_PRINT\r\n            printf(\"Detected detached SD card.\\n\");\r\n            #endif\r\n            sdc_sd_status = R_SDC_SD_End(SD_CARD_DEV_NO, SDC_SD_MODE_MEM);\r\n            if (SDC_SD_SUCCESS != sdc_sd_status){\r\n                sd_card_error_trap(SD_CARD_DEV_NO);\r\n            }\r\n            init_status = 0;\r\n            sd_card_power_off(SD_CARD_DEV_NO);\r\n            SD_CARD_READY = 0;\r\n        }\r\n    }\r\n    \r\n    \/\/\u30ab\u30fc\u30c9\u521d\u671f\u5316\u51e6\u7406\r\n    if(init_status == 1){\r\n        if(SD_CARD_POWER_WAIT == 0){    \/\/\u96fb\u6e90\u6295\u5165\u5f8c\u5b89\u5b9a\u5316\u5f85\u3061\r\n            R_SDHI_PinSetTransfer();    \/\/\u30db\u30b9\u30c8\u3092\u8ee2\u9001\u53ef\u80fd\u72b6\u614b\u306b\u3059\u308b\r\n            init_status++;\r\n        }\r\n    }else if(init_status){\r\n        sdc_sd_config.mode = SDC_SD_CFG_DRIVER_MODE;                    \r\n        sdc_sd_config.voltage = SDC_SD_VOLT_3_3;\r\n        sdc_sd_status = R_SDC_SD_Initialize(SD_CARD_DEV_NO, &amp;sdc_sd_config, SDC_SD_MODE_MEM);\r\n        if (SDC_SD_SUCCESS == sdc_sd_status){\r\n            init_status = 0;\r\n            f_res = f_mount(&amp;SD_CARD_FATFS, SD_CARD_DRV_LETTER, 0);\r\n            if(f_res == FR_OK){\r\n                SD_CARD_READY = 1;\r\n            }else{\r\n                SD_CARD_ERR_STATUS |= 0x0400;\r\n            }\r\n        }else{\r\n            sdc_sd_status = R_SDC_SD_End(SD_CARD_DEV_NO, SDC_SD_MODE_MEM);\r\n            if (SDC_SD_SUCCESS != sdc_sd_status){\r\n                sd_card_error_trap(SD_CARD_DEV_NO);\r\n            }\r\n            if(init_status++ &gt; 10000){\r\n                init_status = 0;\r\n                SD_CARD_ERR_STATUS |= 0x0100;\r\n                SD_CARD_READY = 0;\r\n            }\r\n        }\r\n    }\r\n}\r\n<\/pre>\n<p>\u521d\u671f\u5316\u51e6\u7406\u3068\u3057\u3066\u3001sd_card_init();\u3092\u4e00\u5ea6\u5b9f\u884c\u3057\u307e\u3059\u3002<br \/>\n\u305d\u306e\u5f8c\u306f\u30e1\u30a4\u30f3\u30eb\u30fc\u30d7\u306b\u3066\u3001sd_card_task();\u3092\u5e38\u6642\u5b9f\u884c\u3057\u307e\u3059\u3002<br \/>\n\u30ab\u30fc\u30c9\u306e\u633f\u5165\u3092\u691c\u51fa\u3059\u308b\u3068\u3001SD_CARD_READY \u304c1\u3068\u306a\u308a\u3001\u30a2\u30af\u30bb\u30b9\u304c\u53ef\u80fd\u3067\u3059\u3002<\/p>\n<p>\u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c\u81ea\u4f53\u306f\u3001ChaN\u3055\u3093\u306eFatfs\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u306e\u3067\u3001\u305d\u3061\u3089\u3092\u53c2\u7167\u3057\u307e\u3059\u3002<br \/>\n\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30ce\u30fc\u30c8\u306e\u30b5\u30f3\u30d7\u30eb\u3092\u305d\u306e\u307e\u307e\u4f7f\u7528\u3059\u308b\u5834\u5408\u306f\u3001\u3053\u3093\u306a\u611f\u3058\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<pre class=\"lang:c++ decode:true \" title=\"\u30b5\u30f3\u30d7\u30eb\u30bd\u30fc\u30b9\">void tfat_sample(void){\r\n    FIL g_file;\r\n    FRESULT rst;\r\n    UINT file_rw_cnt;\r\n    uint32_t byte_count;\r\n    uint16_t data_count;\r\n    uint8_t buff[512]; \/* Working buffer *\/\r\n    \r\n    printf(\"Start TFAT sample.\\n\");\r\n\r\n    \/\/ Create the directory \r\n    rst = f_mkdir(\"0:FLD1\");\r\n    if (FR_OK != rst){\r\n        R_error(2, &amp;rst);\r\n    }\r\n\r\n    \/\/ Create the file to be written\r\n    rst = f_open( &amp;g_file, path_txt, FA_CREATE_ALWAYS | FA_WRITE);\r\n    if (FR_OK != rst){\r\n        R_error(3, &amp;rst);\r\n    }\r\n    \/\/ Complete file open\r\n\r\n    \/\/ Copy the contents to the newly created file\r\n    rst = f_write( &amp;g_file, (void *) filebuffer, sizeof(filebuffer), &amp;file_rw_cnt);\r\n    if (rst != FR_OK || file_rw_cnt &lt; sizeof(filebuffer)){\r\n        R_error(4, &amp;rst);\r\n    }\r\n    \/\/ file write complete\r\n\r\n    \/\/ Close the file\r\n    rst = f_close( &amp;g_file);\r\n    if (FR_OK != rst){\r\n        R_error(5, &amp;rst);\r\n    }\r\n\r\n    \/* Open the file to be read *\/\r\n    rst = f_open( &amp;g_file, path_txt, FA_OPEN_ALWAYS | FA_READ);\r\n    if (FR_OK != rst){\r\n        R_error(6, &amp;rst);\r\n    }\r\n\r\n    \/* Ensure that the file pointer points at beginning of the file *\/\r\n    rst = f_lseek( &amp;g_file, 0);\r\n    if (FR_OK != rst){\r\n        R_error(7, &amp;rst);\r\n    }\r\n\r\n    \/* Clear the counter before counting the no. of bytes read *\/\r\n    byte_count = 0;\r\n\r\n    \/* Repeat the read process until required no. of bytes are read *\/\r\n    while (byte_count &lt; (sizeof(filebuffer) - 1)){\r\n        \/* Read the file. 512 bytes at a time. *\/\r\n        rst = f_read( &amp;g_file, (void *) buff, sizeof(buff), &amp;file_rw_cnt);\r\n\r\n        \/* Check if the read operation was successful &amp; the no. of bytes read\r\n        by the function matches with the size of the R\/W buffer *\/\r\n        if (rst != FR_OK || file_rw_cnt &lt; sizeof(buff)){\r\n            R_error(8, &amp;rst);\r\n        }else{\r\n            \/* Compare the contents of the file with the ROM data *\/\r\n            for (data_count = 0; data_count &lt; sizeof(buff); data_count++){\r\n            if (buff[data_count] != filebuffer[byte_count + data_count]){\r\n                \/* error indication *\/\r\n                \/* explicit error data, address *\/\r\n                R_error(9, &amp;rst);\r\n            }\r\n        }\r\n        \/* verify complete *\/\r\n        \/* ================== *\/\r\n        }\r\n        \/* Update the counter with the total no. of bytes read from the file *\/\r\n        byte_count += file_rw_cnt;\r\n    }\r\n\r\n    \/* Close the file    *\/\r\n    rst = f_close( &amp;g_file);\r\n    if (FR_OK != rst){\r\n        R_error(10, &amp;rst);\r\n    }\r\n\r\n    printf(\"Finished TFAT sample.\\n\");\r\n}\r\n<\/pre>\n<p>\u3042\u3068\u306f\u3001const uint8_t filebuffer[] = {\u30fb\u30fb\u30fb} \u306b\u66f8\u304d\u8fbc\u3080\u30c0\u30df\u30fc\u30c7\u30fc\u30bf\u3092\u7528\u610f\u3057\u3001<br \/>\n\u30a8\u30e9\u30fc\u8868\u793a\u7528\u306estatic void R_error (uint8_t err_code, FRESULT *rst){} \u95a2\u6570\u3092\u7528\u610f\u3057\u307e\u3059\u3002<\/p>\n<p>\u6a19\u6e96\u306e\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u304cfatfs\u306b\u306a\u3063\u305f\u306e\u3067\u3001\u4f7f\u3044\u3084\u3059\u304f\u306a\u308a\u307e\u3057\u305f\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>RX64M\u306b\u306fSD\u30db\u30b9\u30c8\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u304c\u642d\u8f09\u3055\u308c\u3066\u3044\u307e\u3059\u3002 \u4ee5\u524d\u306f\u3001\u30e9\u30a4\u30bb\u30f3\u30b9\u306e\u95a2\u4fc2\u3067\u4e00\u822c\u306b\u306f\u4f7f\u7528\u51fa\u6765\u306a\u304b\u3063\u305f\u69d8\u3067\u3059\u304c\u3001\u6700\u8fd1FIT\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u516c\u958b\u3055\u308c\u3066\u3044\u307e\u3059\u306e\u3067\u3001\u3055\u3063\u305d\u304f\u4f7f\u7528\u3057\u3066\u307f\u305f\u3044\u3068\u601d\u3044\u307e\u3059\u3002 \u4f7f\u7528\u3057\u305f\u30d0\u30fc\u30b8\u30e7\u30f3\u306f [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[28],"tags":[29],"class_list":["post-184","post","type-post","status-publish","format-standard","hentry","category-rx64m","tag-rx64m"],"_links":{"self":[{"href":"https:\/\/r-side.net\/index.php?rest_route=\/wp\/v2\/posts\/184","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/r-side.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/r-side.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/r-side.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/r-side.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=184"}],"version-history":[{"count":3,"href":"https:\/\/r-side.net\/index.php?rest_route=\/wp\/v2\/posts\/184\/revisions"}],"predecessor-version":[{"id":194,"href":"https:\/\/r-side.net\/index.php?rest_route=\/wp\/v2\/posts\/184\/revisions\/194"}],"wp:attachment":[{"href":"https:\/\/r-side.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=184"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/r-side.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=184"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/r-side.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=184"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}