2025-10-10 16:07:00 +08:00

135 lines
2.8 KiB
C
Executable File

#include <common/bk_include.h>
#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 <os/mem.h>
#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