sd.c
Go to the documentation of this file.
00001
00038 #include "sd.h"
00039 #include "hw/hw_sd.h"
00040 #include "cfg/cfg_sd.h"
00041
00042 #define LOG_LEVEL  SD_LOG_LEVEL
00043 #define LOG_FORMAT SD_LOG_FORMAT
00044 #include <cfg/log.h>
00045
00046 #include <io/kblock.h>
00047
00048 #include <string.h>
00049
00050
00051 #ifdef SD_INCLUDE_SPI_SOURCE
00052     #include <drv/sd_spi.c>
00053 #endif
00054 
00055 void sd_writeTest(Sd *sd)
00056 {
00057     uint8_t buf[SD_DEFAULT_BLOCKLEN];
00058     memset(buf, 0, sizeof(buf));
00059
00060     for (block_idx_t i = 0; i < sd->b.blk_cnt; i++)
00061     {
00062         LOG_INFO("writing block %ld: %s\n", i, (kblock_read(&sd->b, i, buf, 0, SD_DEFAULT_BLOCKLEN) == SD_DEFAULT_BLOCKLEN) ? "OK" : "FAIL");
00063     }
00064 }
00065
00066 bool sd_test(Sd *sd)
00067 {
00068     uint8_t buf[SD_DEFAULT_BLOCKLEN];
00069
00070     if (kblock_read(&sd->b, 0, buf, 0, sd->b.blk_size) != sd->b.blk_size)
00071         return false;
00072
00073     kputchar('\n');
00074     for (int i = 0; i < SD_DEFAULT_BLOCKLEN; i++)
00075     {
00076         kprintf("%02X ", buf[i]);
00077         buf[i] = i;
00078         if (!((i+1) % 16))
00079             kputchar('\n');
00080     }
00081
00082     if (kblock_write(&sd->b, 0, buf, 0, SD_DEFAULT_BLOCKLEN) != SD_DEFAULT_BLOCKLEN)
00083         return false;
00084
00085     memset(buf, 0, sizeof(buf));
00086     if (kblock_read(&sd->b, 0, buf, 0, sd->b.blk_size) != sd->b.blk_size)
00087         return false;
00088
00089     kputchar('\n');
00090     for (block_idx_t i = 0; i < sd->b.blk_size; i++)
00091     {
00092         kprintf("%02X ", buf[i]);
00093         buf[i] = i;
00094         if (!((i+1) % 16))
00095             kputchar('\n');
00096     }
00097
00098     return true;
00099 }
00100
00101
00102