diff --git a/os/hal/boards/NONSTANDARD_STM32F4_BARTHESS2/board.h b/os/hal/boards/NONSTANDARD_STM32F4_BARTHESS2/board.h index 83808df2..9145af27 100644 --- a/os/hal/boards/NONSTANDARD_STM32F4_BARTHESS2/board.h +++ b/os/hal/boards/NONSTANDARD_STM32F4_BARTHESS2/board.h @@ -591,7 +591,7 @@ PIN_PUPDR_FLOATING(GPIOD_MEM_OE) | \ PIN_PUPDR_FLOATING(GPIOD_MEM_WE) | \ NAND_RB_NWAIT_PUPDR(GPIOD_NAND_RB_NWAIT) | \ - PIN_PUPDR_FLOATING(GPIOD_NAND_CE1) | \ + PIN_PUPDR_PULLUP(GPIOD_NAND_CE1) | \ PIN_PUPDR_FLOATING(GPIOD_MEM_D13) | \ PIN_PUPDR_FLOATING(GPIOD_MEM_D14) | \ PIN_PUPDR_FLOATING(GPIOD_MEM_D15) | \ @@ -899,7 +899,7 @@ NAND_RB1_PUPDR(GPIOG_NAND_RB1) | \ PIN_PUPDR_FLOATING(GPIOG_NAND_RB2) | \ PIN_PUPDR_FLOATING(GPIOG_PIN8) | \ - PIN_PUPDR_FLOATING(GPIOG_NAND_CE2) | \ + PIN_PUPDR_PULLUP(GPIOG_NAND_CE2) | \ PIN_PUPDR_FLOATING(GPIOG_PIN10) | \ PIN_PUPDR_FLOATING(GPIOG_PIN11) | \ PIN_PUPDR_FLOATING(GPIOG_SRAM_CS1) | \ diff --git a/testhal/STM32/STM32F4xx/FSMC_SRAM/main.c b/testhal/STM32/STM32F4xx/FSMC_SRAM/main.c index c661d145..186450ff 100644 --- a/testhal/STM32/STM32F4xx/FSMC_SRAM/main.c +++ b/testhal/STM32/STM32F4xx/FSMC_SRAM/main.c @@ -26,8 +26,8 @@ * DEFINES ****************************************************************************** */ -#define SRAM_START ((void *)FSMC_Bank1_4_MAP) #define SRAM_SIZE (512 * 1024) +#define SRAM_START ((void *)FSMC_Bank1_4_MAP) /* ****************************************************************************** @@ -49,11 +49,18 @@ static void mem_error_cb(memtest_t *memp, testtype_t e, size_t address); ****************************************************************************** */ +static size_t errors = 0; + +/* + * + */ +static uint8_t int_buf[64*1024]; + /* * SRAM driver configuration structure. */ static const SRAMConfig sram_cfg = { - 2 << 8 + (0 << 16) | (2 << 8) | (1 << 0) }; /* @@ -75,11 +82,6 @@ static membench_t membench_ext = { SRAM_SIZE, }; -/* - * - */ -static uint8_t int_buf[64*1024]; - /* * */ @@ -108,13 +110,15 @@ static inline void green_led_on(void) {palSetPad(GPIOI, GPIOI_LED_G);} static inline void green_led_off(void) {palClearPad(GPIOI, GPIOI_LED_G);} static inline void green_led_toggle(void) {palTogglePad(GPIOI, GPIOI_LED_G);} -static void mem_error_cb(memtest_t *memp, testtype_t e, size_t address) { +void mem_error_cb(memtest_t *memp, testtype_t e, size_t address) { (void)memp; (void)e; (void)address; green_led_off(); red_led_on(); + osalThreadSleepMilliseconds(10); + errors++; osalSysHalt("Memory broken"); } @@ -126,14 +130,8 @@ static void memtest(void) { red_led_off(); while (true) { - memtest_struct.width = MEMTEST_WIDTH_16; memtest_struct.rand_seed = chSysGetRealtimeCounterX(); memtest_run(&memtest_struct, MEMTEST_RUN_ALL); - - memtest_struct.width = MEMTEST_WIDTH_8; - memtest_struct.rand_seed = chSysGetRealtimeCounterX(); - memtest_run(&memtest_struct, MEMTEST_RUN_ALL); - green_led_toggle(); } diff --git a/testhal/STM32/STM32F4xx/FSMC_SRAM/memtest.cpp b/testhal/STM32/STM32F4xx/FSMC_SRAM/memtest.cpp index c12e9522..1be98a27 100644 --- a/testhal/STM32/STM32F4xx/FSMC_SRAM/memtest.cpp +++ b/testhal/STM32/STM32F4xx/FSMC_SRAM/memtest.cpp @@ -82,18 +82,21 @@ template class GeneratorMovingInvRand : public Generator { public: GeneratorMovingInvRand(void) : step(0), prev(0){;} - void init(size_t seed) { + void init(T seed) { srand(seed); + step = 0; + prev = 0; } T get(void) { T ret; + T mask = -1; if ((step & 1) == 0) { - ret = rand(); + ret = rand() & mask; prev = ret; } else { - ret = ~prev; + ret = ~prev & mask; } step++; @@ -116,9 +119,8 @@ static void memtest_sequential(memtest_t *memp, Generator &generator, T seed) /* fill ram */ generator.init(seed); - for (i=0; i -static void moving_inversion(memtest_t *memp) { +static void moving_inversion_zero(memtest_t *memp) { GeneratorMovingInv generator; + T mask = -1; memtest_sequential(memp, generator, 0); + memtest_sequential(memp, generator, 0xFFFFFFFF & mask); +} + +template +static void moving_inversion_55aa(memtest_t *memp) { + GeneratorMovingInv generator; + T mask = -1; + memtest_sequential(memp, generator, 0x55555555 & mask); + memtest_sequential(memp, generator, 0xAAAAAAAA & mask); } template static void moving_inversion_rand(memtest_t *memp) { GeneratorMovingInvRand generator; - memtest_sequential(memp, generator, memp->rand_seed); + T mask = -1; + memtest_sequential(memp, generator, memp->rand_seed & mask); } /* @@ -169,13 +182,13 @@ static void memtest_wrapper(memtest_t *memp, void (*p_u32)(memtest_t *memp)) { switch(memp->width){ case MEMTEST_WIDTH_32: - p_u32(memp); - p_u16(memp); p_u8(memp); + p_u16(memp); + p_u32(memp); break; case MEMTEST_WIDTH_16: - p_u16(memp); p_u8(memp); + p_u16(memp); break; case MEMTEST_WIDTH_8: p_u8(memp); @@ -190,37 +203,44 @@ void memtest_run(memtest_t *memp, uint32_t testmask) { if ((testmask & MEMTEST_WALKING_ONE) == MEMTEST_WALKING_ONE) { memtest_wrapper(memp, - walking_one, + walking_one, walking_one, - walking_one); + walking_one); } if ((testmask & MEMTEST_WALKING_ZERO) == MEMTEST_WALKING_ZERO) { memtest_wrapper(memp, - walking_zero, + walking_zero, walking_zero, - walking_zero); + walking_zero); } if ((testmask & MEMTEST_OWN_ADDRESS) == MEMTEST_OWN_ADDRESS) { memtest_wrapper(memp, - own_address, + own_address, own_address, - own_address); + own_address); } - if ((testmask & MEMTEST_MOVING_INVERSION) == MEMTEST_MOVING_INVERSION) { + if ((testmask & MEMTEST_MOVING_INVERSION_ZERO) == MEMTEST_MOVING_INVERSION_ZERO) { memtest_wrapper(memp, - moving_inversion, - moving_inversion, - moving_inversion); + moving_inversion_zero, + moving_inversion_zero, + moving_inversion_zero); + } + + if ((testmask & MEMTEST_MOVING_INVERSION_55AA) == MEMTEST_MOVING_INVERSION_55AA) { + memtest_wrapper(memp, + moving_inversion_55aa, + moving_inversion_55aa, + moving_inversion_55aa); } if ((testmask & MEMTEST_MOVING_INVERSION_RAND) == MEMTEST_MOVING_INVERSION_RAND) { memtest_wrapper(memp, - moving_inversion_rand, + moving_inversion_rand, moving_inversion_rand, - moving_inversion_rand); + moving_inversion_rand); } } diff --git a/testhal/STM32/STM32F4xx/FSMC_SRAM/memtest.hpp b/testhal/STM32/STM32F4xx/FSMC_SRAM/memtest.hpp index 8b21e94c..4a9e4e3a 100644 --- a/testhal/STM32/STM32F4xx/FSMC_SRAM/memtest.hpp +++ b/testhal/STM32/STM32F4xx/FSMC_SRAM/memtest.hpp @@ -4,13 +4,15 @@ #define MEMTEST_WALKING_ONE (1 << 0) #define MEMTEST_WALKING_ZERO (1 << 1) #define MEMTEST_OWN_ADDRESS (1 << 2) -#define MEMTEST_MOVING_INVERSION (1 << 3) -#define MEMTEST_MOVING_INVERSION_RAND (1 << 4) +#define MEMTEST_MOVING_INVERSION_ZERO (1 << 3) +#define MEMTEST_MOVING_INVERSION_55AA (1 << 4) +#define MEMTEST_MOVING_INVERSION_RAND (1 << 5) #define MEMTEST_RUN_ALL (MEMTEST_WALKING_ONE | \ MEMTEST_WALKING_ZERO | \ MEMTEST_OWN_ADDRESS | \ - MEMTEST_MOVING_INVERSION | \ + MEMTEST_MOVING_INVERSION_ZERO | \ + MEMTEST_MOVING_INVERSION_55AA | \ MEMTEST_MOVING_INVERSION_RAND) typedef struct memtest_t memtest_t;