Go to the documentation of this file.
22 #include <S1D13781/Driver.h>
23 #include <S1D13781/registers.h>
65 MemCheckState(MemoryDevice& device) : device(device), maxAddr(device.getSize())
94 virtual void fillBlock(uint32_t addr, uint32_t* buffer,
size_t size)
96 os_get_random(
reinterpret_cast<uint8_t*
>(buffer), size * 4);
102 fillBlock(writeAddr, writeBuffer[bufIndex], bufSize / 4);
107 device.
write(reqWr, writeAddr, writeBuffer[bufIndex], bufSize);
108 writeAddr += bufSize;
109 bufIndex = 1 - bufIndex;
114 auto callback = [](Request& request) ->
bool {
118 device.
read(reqRd, readAddr, readBuffer, bufSize, callback,
this);
123 if(writeAddr < maxAddr) {
126 bufIndex = 1 - bufIndex;
131 if(readAddr < maxAddr) {
133 if(writeAddr < maxAddr) {
143 if(memcmp(readBuffer, writeBuffer[bufIndex], bufSize)) {
144 debug_e(
"Mem check failed between 0x%08x and 0x%08x", readAddr, readAddr + bufSize - 1);
147 for(
unsigned i = 0; i < checklen; ++i) {
148 auto in = readBuffer[i];
149 auto out = writeBuffer[bufIndex][i];
151 debug_e(
" @ 0x%08x: out 0x%08x in 0x%08x", readAddr + (i * 4), out, in);
161 debug_i(
"Memory check complete, %s, waitCycles = %u, trans = %u", timer.
elapsedTime().toString().c_str(),
162 stats.waitCycles, stats.transCount);
176 MemoryDevice& device;
178 static const unsigned bufSize{512};
179 uint32_t writeBuffer[2][bufSize / 4];
180 uint32_t readBuffer[bufSize / 4];
182 uint32_t writeAddr{0};
183 uint32_t readAddr{0};
185 Request reqRd, reqWr;
virtual ~MemCheckState()
Definition: MemCheckState.h:120
volatile uint8_t busy
Request in progress.
Definition: HardwareSPI/src/include/HSPI/Request.h:86
Template class to implement a polled timer.
Definition: PolledTimer.h:67
#define ARRAY_SIZE(a)
Definition: stringutil.h:76
void execute()
Definition: MemCheckState.h:124
virtual void fillBlock(uint32_t addr, uint32_t *buffer, size_t size)
Fill buffer with test data.
Definition: MemCheckState.h:145
SystemClass System
Global instance of system object.
#define debug_e(fmt,...)
Definition: debug_progmem.h:77
static bool queueCallback(TaskCallback32 callback, uint32_t param=0)
Queue a deferred callback.
MemCheckState(MemoryDevice &device)
Definition: MemCheckState.h:116
NanoTime::Time< TimeType > elapsedTime() const
Get elapsed time since start() was last called.
Definition: PolledTimer.h:186
void read(uint32_t address, void *buffer, size_t len)
Read a block of data.
Definition: MemoryDevice.h:212
Controller & controller
Definition: Libraries/HardwareSPI/src/include/HSPI/Device.h:255
void write(uint32_t address, const void *data, size_t len)
Write a block of data.
Definition: MemoryDevice.h:107
InterruptDelegate onComplete
Definition: MemCheckState.h:133
#define debug_i
Definition: debug_progmem.h:107