From 9fc7863f367d148c3cbe41d8e6db900f1ff6439a Mon Sep 17 00:00:00 2001 From: Silvano Seva Date: Fri, 22 Jan 2021 22:20:15 +0100 Subject: [PATCH] Utility for dumping external flash security registers on MDx devices --- tests/platform/dumpSecurityRegs_MDx.c | 70 +++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 tests/platform/dumpSecurityRegs_MDx.c diff --git a/tests/platform/dumpSecurityRegs_MDx.c b/tests/platform/dumpSecurityRegs_MDx.c new file mode 100644 index 00000000..407a73e3 --- /dev/null +++ b/tests/platform/dumpSecurityRegs_MDx.c @@ -0,0 +1,70 @@ +/*************************************************************************** + * Copyright (C) 2020 by Federico Amedeo Izzo IU2NUO, * + * Niccolò Izzo IU2KIN, * + * Frederik Saraci IU2NRO, * + * Silvano Seva IU2KWO * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 3 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, see * + ***************************************************************************/ + +#include +#include +#include +#include + +void printChunk(void *chunk) +{ + uint8_t *ptr = ((uint8_t *) chunk); + for(size_t i = 0; i < 16; i++) printf("%02x ", ptr[i]); + for(size_t i = 0; i < 16; i++) + { + if((ptr[i] > 0x22) && (ptr[i] < 0x7f)) printf("%c", ptr[i]); + else printf("."); + } +} + +void printSecurityRegister(uint32_t reg) +{ + uint8_t secRegister[256] = {0}; + W25Qx_wakeup(); + W25Qx_readSecurityRegister(reg, secRegister, 256); + W25Qx_sleep(); + + for(uint32_t addr = 0; addr < 256; addr += 16) + { + printf("\r\n%02lx: ", addr); + printChunk(&(secRegister[addr])); + } +} + +int main() +{ + W25Qx_init(); + + while(1) + { + getchar(); + + printf("0x1000:"); + printSecurityRegister(0x1000); + + printf("\r\n\r\n0x2000:"); + printSecurityRegister(0x2000); + + printf("\r\n\r\n0x3000:"); + printSecurityRegister(0x3000); + } + + return 0; +}