Skip to content

Conversation

mjs513
Copy link

@mjs513 mjs513 commented Jan 11, 2025

This adresses issue #26. as we;; as issue #15

Added libraries:
ea_malloc - had to delete #pragma marks since gave a warnings during compile
zephyr_sdram - modified mbed sdram library for zephyr

llext_exports.c
Added missing symbols for this, as well SD and others.

m7_conf and overlays modifed for fmc.

Test case results:

testing with pseudo-random sequence, seed=2976674124 testing with pseudo-random sequence, seed=1438200953 testing with pseudo-random sequence, seed=3413783263 testing with pseudo-random sequence, seed=1900517911 testing with pseudo-random sequence, seed=1227909400 testing with pseudo-random sequence, seed=276562754 testing with pseudo-random sequence, seed=146878114 testing with pseudo-random sequence, seed=615545407 testing with pseudo-random sequence, seed=110497896 testing with pseudo-random sequence, seed=74539250 testing with pseudo-random sequence, seed=4197336575 testing with pseudo-random sequence, seed=2280382233 testing with pseudo-random sequence, seed=542894183 testing with pseudo-random sequence, seed=3978544245 testing with pseudo-random sequence, seed=2315909796 testing with pseudo-random sequence, seed=3736286001 testing with pseudo-random sequence, seed=2876690683 testing with pseudo-random sequence, seed=215559886 testing with pseudo-random sequence, seed=539179291 testing with pseudo-random sequence, seed=537678650 testing with pseudo-random sequence, seed=4001405270 testing with pseudo-random sequence, seed=2169216599 testing with pseudo-random sequence, seed=4036891097 testing with pseudo-random sequence, seed=1535452389 testing with pseudo-random sequence, seed=2959727213 testing with pseudo-random sequence, seed=4219363395 testing with pseudo-random sequence, seed=1036929753 testing with pseudo-random sequence, seed=2125248865 testing with pseudo-random sequence, seed=3177905864 testing with pseudo-random sequence, seed=2399307098 testing with pseudo-random sequence, seed=3847634607 testing with pseudo-random sequence, seed=27467969 testing with pseudo-random sequence, seed=520563506 testing with pseudo-random sequence, seed=381313790 testing with pseudo-random sequence, seed=4174769276 testing with pseudo-random sequence, seed=3932189449 testing with pseudo-random sequence, seed=4079717394 testing with pseudo-random sequence, seed=868357076 testing with pseudo-random sequence, seed=2474062993 testing with pseudo-random sequence, seed=1502682190 testing with pseudo-random sequence, seed=2471230478 testing with pseudo-random sequence, seed=85016565 testing with pseudo-random sequence, seed=1427530695 testing with pseudo-random sequence, seed=1100533073 testing with fixed pattern 55555555 testing with fixed pattern 33333333 testing with fixed pattern 0F0F0F0F testing with fixed pattern 00FF00FF testing with fixed pattern 0000FFFF testing with fixed pattern AAAAAAAA testing with fixed pattern CCCCCCCC testing with fixed pattern F0F0F0F0 testing with fixed pattern FF00FF00 testing with fixed pattern FFFF0000 testing with fixed pattern FFFFFFFF testing with fixed pattern 00000000 test ran for 0.32 seconds All memory tests passed :-) 

Sketch:

#include <Arduino.h> #line 1 "C:\\Users\\Merli\\AppData\\Local\\Temp\\.arduinoIDE-unsaved20241127-17516-1tayv7l.qbzs\\sketch_dec27c\\sketch_dec27c.ino" /****************************************************************** * * This sketch test 32gb SDRAM memory chip (ISI IS42S16160J) * with random and fixed patterns * ******************************************************************/ #include "LibPrintf.h" #include "SDRAM.h" #include "elapsedMillis.h" bool memory_ok = false; uint32_t *memory_begin, *memory_end; bool check_fixed_pattern(uint32_t pattern); bool check_lfsr_pattern(uint32_t seed); void setup() {	while (!Serial) ; // wait	pinMode(LED_BUILTIN, OUTPUT);	uint8_t size = 8;	printf("SDRAM Memory Test, %d Mbyte\n", size);	if (size == 0) return; /********************************************************** * sdram.begin initializes the available SDRAM Module *********************************************************/ if(!SDRAM.begin()) { Serial.println("SDRAM FAILED TO INITIALIZE....."); //while(1); }	memory_begin = (uint32_t *)(0xc0000000);	memory_end = (uint32_t *)(0xc0000000 + (320*240*2));	elapsedMillis msec = 0;	if (!check_fixed_pattern(0x5A698421)) return;	if (!check_lfsr_pattern(2976674124ul)) return;	if (!check_lfsr_pattern(1438200953ul)) return;	if (!check_lfsr_pattern(3413783263ul)) return;	if (!check_lfsr_pattern(1900517911ul)) return;	if (!check_lfsr_pattern(1227909400ul)) return;	if (!check_lfsr_pattern(276562754ul)) return;	if (!check_lfsr_pattern(146878114ul)) return;	if (!check_lfsr_pattern(615545407ul)) return;	if (!check_lfsr_pattern(110497896ul)) return;	if (!check_lfsr_pattern(74539250ul)) return;	if (!check_lfsr_pattern(4197336575ul)) return;	if (!check_lfsr_pattern(2280382233ul)) return;	if (!check_lfsr_pattern(542894183ul)) return;	if (!check_lfsr_pattern(3978544245ul)) return;	if (!check_lfsr_pattern(2315909796ul)) return;	if (!check_lfsr_pattern(3736286001ul)) return;	if (!check_lfsr_pattern(2876690683ul)) return;	if (!check_lfsr_pattern(215559886ul)) return;	if (!check_lfsr_pattern(539179291ul)) return;	if (!check_lfsr_pattern(537678650ul)) return;	if (!check_lfsr_pattern(4001405270ul)) return;	if (!check_lfsr_pattern(2169216599ul)) return;	if (!check_lfsr_pattern(4036891097ul)) return;	if (!check_lfsr_pattern(1535452389ul)) return;	if (!check_lfsr_pattern(2959727213ul)) return;	if (!check_lfsr_pattern(4219363395ul)) return;	if (!check_lfsr_pattern(1036929753ul)) return;	if (!check_lfsr_pattern(2125248865ul)) return;	if (!check_lfsr_pattern(3177905864ul)) return;	if (!check_lfsr_pattern(2399307098ul)) return;	if (!check_lfsr_pattern(3847634607ul)) return;	if (!check_lfsr_pattern(27467969ul)) return;	if (!check_lfsr_pattern(520563506ul)) return;	if (!check_lfsr_pattern(381313790ul)) return;	if (!check_lfsr_pattern(4174769276ul)) return;	if (!check_lfsr_pattern(3932189449ul)) return;	if (!check_lfsr_pattern(4079717394ul)) return;	if (!check_lfsr_pattern(868357076ul)) return;	if (!check_lfsr_pattern(2474062993ul)) return;	if (!check_lfsr_pattern(1502682190ul)) return;	if (!check_lfsr_pattern(2471230478ul)) return;	if (!check_lfsr_pattern(85016565ul)) return;	if (!check_lfsr_pattern(1427530695ul)) return;	if (!check_lfsr_pattern(1100533073ul)) return;	if (!check_fixed_pattern(0x55555555)) return;	if (!check_fixed_pattern(0x33333333)) return;	if (!check_fixed_pattern(0x0F0F0F0F)) return;	if (!check_fixed_pattern(0x00FF00FF)) return;	if (!check_fixed_pattern(0x0000FFFF)) return;	if (!check_fixed_pattern(0xAAAAAAAA)) return;	if (!check_fixed_pattern(0xCCCCCCCC)) return;	if (!check_fixed_pattern(0xF0F0F0F0)) return;	if (!check_fixed_pattern(0xFF00FF00)) return;	if (!check_fixed_pattern(0xFFFF0000)) return;	if (!check_fixed_pattern(0xFFFFFFFF)) return;	if (!check_fixed_pattern(0x00000000)) return;	printf(" test ran for %.2f seconds\n", (float)msec / 1000.0f);	Serial.println("All memory tests passed :-)");	memory_ok = true; } bool fail_message(volatile uint32_t *location, uint32_t actual, uint32_t expected) {	printf(" Error at %08X, read %08X but expected %08X\n",	(uint32_t)location, actual, expected);	return false; } // fill the entire RAM with a fixed pattern, then check it bool check_fixed_pattern(uint32_t pattern) {	volatile uint32_t *p;	printf("testing with fixed pattern %08X\n", pattern);	for (p = memory_begin; p < memory_end; p++) {	*p = pattern;	}	for (p = memory_begin; p < memory_end; p++) {	uint32_t actual = *p;	if (actual != pattern) return fail_message(p, actual, pattern);	}	return true; } // fill the entire RAM with a pseudo-random sequence, then check it bool check_lfsr_pattern(uint32_t seed) {	volatile uint32_t *p;	uint32_t reg;	printf("testing with pseudo-random sequence, seed=%u\n", seed);	reg = seed;	for (p = memory_begin; p < memory_end; p++) {	*p = reg;	for (int i=0; i < 3; i++) {	// https://en.wikipedia.org/wiki/Xorshift	reg ^= reg << 13;	reg ^= reg >> 17;	reg ^= reg << 5;	}	}	reg = seed;	for (p = memory_begin; p < memory_end; p++) {	uint32_t actual = *p;	if (actual != reg) return fail_message(p, actual, reg);	//Serial.printf(" reg=%08X\n", reg);	for (int i=0; i < 3; i++) {	reg ^= reg << 13;	reg ^= reg >> 17;	reg ^= reg << 5;	}	}	return true; } void loop() {	digitalWrite(LED_BUILTIN, HIGH);	delay(100);	if (!memory_ok) digitalWrite(LED_BUILTIN, LOW); // rapid blink if any test fails	delay(100); } 
@mjs513
Copy link
Author

mjs513 commented Jan 13, 2025

Going to close this and redo not that the other pr is incorporated. Will be cleaner

@mjs513 mjs513 closed this Jan 13, 2025
@mjs513 mjs513 deleted the SDRAM-llext-Updates branch January 13, 2025 14:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

1 participant