forked from xuos/xiuos
108 lines
3.0 KiB
C
Executable File
108 lines
3.0 KiB
C
Executable File
/*
|
|
* Copyright (c) 2020 AIIT XUOS Lab
|
|
* XiUOS is licensed under Mulan PSL v2.
|
|
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
|
* You may obtain a copy of Mulan PSL v2 at:
|
|
* http://license.coscl.org.cn/MulanPSL2
|
|
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
|
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
|
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
|
* See the Mulan PSL v2 for more details.
|
|
*/
|
|
|
|
/**
|
|
* @file: test_extsram.c
|
|
* @brief: a extsram test application
|
|
* @version: 2.0
|
|
* @author: AIIT XUOS Lab
|
|
* @date: 2022/9/26
|
|
*
|
|
*/
|
|
|
|
#include <transform.h>
|
|
#include "stdio.h"
|
|
|
|
/* parameters for sram peripheral */
|
|
// /* stm32f4 Bank3:0X68000000 */
|
|
// #define SRAM_BANK_ADDR ((uint32_t)0X68000000)
|
|
|
|
/* OK-1052 semc:0X80000000 */
|
|
#define SRAM_BANK_ADDR ((uint32_t)0X80000000)
|
|
|
|
/* data width: 8, 16, 32 */
|
|
#define SRAM_DATA_WIDTH 16
|
|
|
|
/* sram size */
|
|
#define SRAM_SIZE ((uint32_t)0x2000000)
|
|
|
|
#define TICK_PER_SECOND 100
|
|
|
|
int ExtsramTest(void)
|
|
{
|
|
int i = 0;
|
|
uint32_t start_time = 0, time_cast = 0;
|
|
#if SRAM_DATA_WIDTH == 8
|
|
char data_width = 1;
|
|
uint8_t data = 0;
|
|
#elif SRAM_DATA_WIDTH == 16
|
|
char data_width = 2;
|
|
uint16_t data = 0;
|
|
#else
|
|
char data_width = 4;
|
|
uint32_t data = 0;
|
|
#endif
|
|
|
|
/* write data */
|
|
printf("Writing the %ld bytes data, waiting....\n", SRAM_SIZE);
|
|
start_time = PrivGetTickTime();
|
|
for (i = 0; i < SRAM_SIZE / data_width; i++)
|
|
{
|
|
#if SRAM_DATA_WIDTH == 8
|
|
*(volatile uint8_t *)(SRAM_BANK_ADDR + i * data_width) = (uint8_t)0x55;
|
|
#elif SRAM_DATA_WIDTH == 16
|
|
*(volatile uint16_t *)(SRAM_BANK_ADDR + i * data_width) = (uint16_t)0x5555;
|
|
#else
|
|
*(volatile uint32_t *)(SRAM_BANK_ADDR + i * data_width) = (uint32_t)0x55555555;
|
|
#endif
|
|
}
|
|
time_cast = PrivGetTickTime() - start_time;
|
|
printf("Write data success, total time: %ld.%03ldS.\n", time_cast / TICK_PER_SECOND,
|
|
time_cast % TICK_PER_SECOND / ((TICK_PER_SECOND * 1 + 999) / 1000));
|
|
|
|
/* read data */
|
|
printf("start Reading and verifying data, waiting....\n");
|
|
for (i = 0; i < SRAM_SIZE / data_width; i++)
|
|
{
|
|
#if SRAM_DATA_WIDTH == 8
|
|
data = *(volatile uint8_t *)(SRAM_BANK_ADDR + i * data_width);
|
|
if (data != 0x55)
|
|
{
|
|
printf("SRAM test failed!");
|
|
break;
|
|
}
|
|
#elif SRAM_DATA_WIDTH == 16
|
|
data = *(volatile uint16_t *)(SRAM_BANK_ADDR + i * data_width);
|
|
if (data != 0x5555)
|
|
{
|
|
printf("SRAM test failed! data = 0x%x\n",data);
|
|
break;
|
|
}
|
|
#else
|
|
data = *(volatile uint32_t *)(SRAM_BANK_ADDR + i * data_width);
|
|
if (data != 0x55555555)
|
|
{
|
|
printf("SRAM test failed!\n");
|
|
break;
|
|
}
|
|
#endif
|
|
}
|
|
|
|
if (i >= SRAM_SIZE / data_width)
|
|
{
|
|
printf("SRAM test success!\n");
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
PRIV_SHELL_CMD_FUNCTION(ExtsramTest, a extsram test sample, PRIV_SHELL_CMD_MAIN_ATTR);
|