float SPIBONE_CLKDIV = 4.0f; void test_sdram() { uint32_t rxbuf[128] = { 0 }; uint32_t txbuf[128] = { 0 }; float old_clkdiv = SPIBONE_CLKDIV; static fastPRNG::fastXS32 fastR(0x12345678); while(true) { SPIBONE_CLKDIV = old_clkdiv - 0.01f; printf("Setting clock div to %9.6f %d\r\n", SPIBONE_CLKDIV, (uint32_t)(SPIBONE_CLKDIV * 1000)); printf("Testing SDRAM (Short Simple - 1 Byte Write)\r\n"); for(uint32_t i = 0; i < 0x10000; i += 4*128) { for(uint32_t j = 0; j < 128; j++) { txbuf[j] = i + j; } spi_bone_write32_blocking(0x40000000 + i, txbuf, 128); } old_clkdiv = SPIBONE_CLKDIV; SPIBONE_CLKDIV = 5.0; printf("Testing SDRAM (Short Simple - 1 Byte Read)\r\n"); for(uint32_t i = 0; i < 0x10000; i += 4*128) { // 800000 spi_bone_read32_blocking(0x40000000 + i, rxbuf, 128); for(uint32_t j = 0; j < 128; j++) { if(rxbuf[j] != (i + j*4)) { printf("Memory read failed at 0x%08X (%08X)\r\n", 0x40000000 + i, rxbuf[j]); return; } } } SPIBONE_CLKDIV = old_clkdiv; printf("Testing SDRAM (Short Random - 1 Byte Write)\r\n"); fastR.seed(0x12345678); for(uint32_t i = 0; i < 0x10000; i += 4*128) { for(uint32_t j = 0; j < 128; j++) { txbuf[j] = fastR.xoshiro128p(); } spi_bone_write32_blocking(0x40000000 + i, txbuf, 128); } SPIBONE_CLKDIV = 5.0; printf("Testing SDRAM (Short Random - 1 Byte Read)\r\n"); fastR.seed(0x12345678); for(uint32_t i = 0; i < 0x10000; i += 4*128) { spi_bone_read32_blocking(0x40000000 + i, rxbuf, 128); for(uint32_t j = 0; j < 128; j++) { uint32_t random = fastR.xoshiro128p(); if(rxbuf[j] != random) { printf("Memory read failed at 0x%08X (%08X %08X)\r\n", 0x40000000 + i, random, rxbuf[0]); return; } } } } }