68 lines
1.5 KiB
C
68 lines
1.5 KiB
C
#ifdef SUPPORT_MS_EXTENSIONS
|
|
#pragma bss_seg(".sd_test.data.bss")
|
|
#pragma data_seg(".sd_test.data")
|
|
#pragma const_seg(".sd_test.text.const")
|
|
#pragma code_seg(".sd_test.text")
|
|
#endif
|
|
#include "system/includes.h"
|
|
#include "fs/fs.h"
|
|
extern void srand(unsigned int __seed) __THROW;
|
|
#include "generic/ascii.h"
|
|
#define CONFIG_ROOT_PATH "storage/sd0/C/sdtest"
|
|
extern void force_set_sd_online(char *sdx);
|
|
void sd_rw_test(u8 *buffer)
|
|
{
|
|
void *fd = dev_open("sd0", NULL);
|
|
u32 lba = 0;
|
|
while (fd) {
|
|
int r = dev_bulk_read(fd, buffer, lba++, 1);
|
|
if (r != 1) {
|
|
goto __sd_error;
|
|
}
|
|
|
|
put_buf(buffer, 512);
|
|
}
|
|
|
|
__sd_error:
|
|
puts(" ===sd rw err===\n");
|
|
while (1) {};
|
|
|
|
}
|
|
static void test_main(void *p)
|
|
{
|
|
force_set_sd_online("sd0");
|
|
u8 *buffer = dma_malloc(512);
|
|
|
|
void *mnt = mount("sd0", "storage/sd0", "fat", 3, NULL);
|
|
if (!mnt) {
|
|
puts(" ===sd mount err===\n");
|
|
goto __fs_error;
|
|
}
|
|
#ifndef CONFIG_CPU_BR52
|
|
FILE *fp = NULL;
|
|
char file_name[128];
|
|
u32 seed = JL_RAND->R64L;
|
|
snprintf(file_name, sizeof(file_name), CONFIG_ROOT_PATH"%d.bin", seed);
|
|
srand(seed);
|
|
fp = fopen(file_name, "w+");
|
|
if (!fp) {
|
|
puts("fopen err\n");
|
|
dma_free(buffer);
|
|
goto __fs_error;
|
|
}
|
|
while (1) {
|
|
fwrite(buffer, 512, 1, fp);
|
|
}
|
|
#endif
|
|
__fs_error:
|
|
sd_rw_test(buffer);
|
|
}
|
|
|
|
void sd_demo()
|
|
{
|
|
int err = task_create(test_main, NULL, "periph_demo");
|
|
if (err != OS_NO_ERR) {
|
|
r_printf("creat fail %x\n", err);
|
|
}
|
|
}
|