#include #include "bk_arm_arch.h" #if CONFIG_SDCARD #include "sdio_driver.h" #include "sdcard.h" #include "sdcard_pub.h" #include "bk_drv_model.h" #include "bk_sys_ctrl.h" #include #include "bk_icu.h" #include "bk_misc.h" #include "sdcard_test.h" #include "driver/sd_card.h" #define SDCARD_TEST_BUFFER_SIZE (512 * 2) static SDIO_Error sdcard_test_open(void) { return bk_sd_card_init(); } static void sdcard_test_close(void) { bk_sd_card_deinit(); } UINT32 sdcard_intf_test(void) { SDIO_Error ret = SD_OK; UINT32 err = SDCARD_SUCCESS; ret = sdcard_test_open(); if (ret != SD_OK) { SDCARD_FATAL("Can't open sdcard, please check\r\n"); goto err_out; } SDCARD_PRT("sdcard_open is ok \r\n"); return err; err_out: SDCARD_FATAL("sdcard_test err, ret:%d\r\n", ret); return SDCARD_FAILURE; } UINT32 test_sdcard_read(UINT32 blk, UINT32 blk_cnt) { UINT32 ret=0, j; uint8_t *testbuf; os_printf("%s[+]\r\n", __func__); testbuf = os_malloc(SDCARD_TEST_BUFFER_SIZE); os_memset(testbuf, 0, SDCARD_TEST_BUFFER_SIZE); if (testbuf == NULL) return 1; for (j = 0; j < blk_cnt; j+=(SDCARD_TEST_BUFFER_SIZE/512)) { ret = bk_sd_card_read_blocks(testbuf, blk + j, SDCARD_TEST_BUFFER_SIZE/512); for (int i = 0; i < SDCARD_TEST_BUFFER_SIZE; i+=16) { os_printf("0x%08x,0x%08x,0x%08x,0x%08x\r\n", *(uint32_t *)&testbuf[i], *(uint32_t *)&testbuf[i+4], *(uint32_t *)&testbuf[i+8], *(uint32_t *)&testbuf[i+12]); } } os_free(testbuf); os_printf("%s[-]\r\n", __func__); return ret; } UINT32 test_sdcard_write(UINT32 blk, UINT32 blk_cnt, UINT32 wr_val) { UINT32 ret=0, j = 0; uint8_t *testbuf; testbuf = os_malloc(SDCARD_TEST_BUFFER_SIZE); os_memset(testbuf, 0, SDCARD_TEST_BUFFER_SIZE); if (testbuf == NULL) return 1; os_printf("%s[+]\r\n", __func__); for (int i = 0; i < SDCARD_TEST_BUFFER_SIZE; i+=16) { if(wr_val != 0x12345678) { *(uint32_t *)&testbuf[i] = wr_val; *(uint32_t *)&testbuf[i+4] = wr_val; *(uint32_t *)&testbuf[i+8] = wr_val; *(uint32_t *)&testbuf[i+12] = wr_val; } else { *(uint32_t *)&testbuf[i] = j | (j << 8) | (j << 16) | (j << 24); j++; *(uint32_t *)&testbuf[i+4] = j | (j << 8) | (j << 16) | (j << 24); j++; *(uint32_t *)&testbuf[i+8] = j | (j << 8) | (j << 16) | (j << 24); j++; *(uint32_t *)&testbuf[i+12] = j | (j << 8) | (j << 16) | (j << 24); j++; } os_printf("0x%08x,0x%08x,0x%08x,0x%08x\r\n", *(uint32_t *)&testbuf[i], *(uint32_t *)&testbuf[i+4], *(uint32_t *)&testbuf[i+8], *(uint32_t *)&testbuf[i+12]); } for (j = 0; j < blk_cnt; j+=(SDCARD_TEST_BUFFER_SIZE/512)) { ret = bk_sd_card_write_blocks(testbuf, blk + j, SDCARD_TEST_BUFFER_SIZE/512); } os_free(testbuf); os_printf("%s[-]\r\n", __func__); return ret; } void sdcard_intf_close(void) { sdcard_test_close(); } #endif