From bcfe335bd70eba15cb554e032efd2add9cf1a6b5 Mon Sep 17 00:00:00 2001 From: Steve Evans Date: Thu, 15 Dec 2022 14:06:11 +0000 Subject: [PATCH] Display FLASH JEDEC ID in status and flash_info (#12051) --- src/main/cli/cli.c | 11 +++++++++-- src/main/drivers/flash.c | 29 ++++++++++++++++++++--------- src/main/drivers/flash.h | 1 + 3 files changed, 30 insertions(+), 11 deletions(-) diff --git a/src/main/cli/cli.c b/src/main/cli/cli.c index 00a7ca01ab..e397b9e743 100644 --- a/src/main/cli/cli.c +++ b/src/main/cli/cli.c @@ -2456,8 +2456,8 @@ static void cliFlashInfo(const char *cmdName, char *cmdline) const flashGeometry_t *layout = flashGetGeometry(); - cliPrintLinef("Flash sectors=%u, sectorSize=%u, pagesPerSector=%u, pageSize=%u, totalSize=%u", - layout->sectors, layout->sectorSize, layout->pagesPerSector, layout->pageSize, layout->totalSize); + cliPrintLinef("Flash sectors=%u, sectorSize=%u, pagesPerSector=%u, pageSize=%u, totalSize=%u JEDEC ID=0x%08x", + layout->sectors, layout->sectorSize, layout->pagesPerSector, layout->pageSize, layout->totalSize, layout->jedecId); for (uint8_t index = 0; index < FLASH_MAX_PARTITIONS; index++) { const flashPartition_t *partition; @@ -4854,6 +4854,13 @@ static void cliStatus(const char *cmdName, char *cmdline) cliSdInfo(cmdName, ""); #endif +#ifdef USE_FLASH_CHIP + const flashGeometry_t *layout = flashGetGeometry(); + if (layout->jedecId != 0) { + cliPrintLinef("FLASH: JEDEC ID=0x%08x %uM", layout->jedecId, layout->totalSize >> 20); + } +#endif + cliPrint("Arming disable flags:"); armingDisableFlags_e flags = getArmingDisableFlags(); while (flags) { diff --git a/src/main/drivers/flash.c b/src/main/drivers/flash.c index 22c4bc1af6..4a026a9460 100644 --- a/src/main/drivers/flash.c +++ b/src/main/drivers/flash.c @@ -121,6 +121,9 @@ static bool flashQuadSpiInit(const flashConfig_t *flashConfig) phase++; } while (phase != BAIL && !detected); + if (detected) { + flashDevice.geometry.jedecId = chipID; + } return detected; } #endif // USE_QUADSPI @@ -134,6 +137,7 @@ void flashPreInit(const flashConfig_t *flashConfig) static bool flashSpiInit(const flashConfig_t *flashConfig) { + bool detected = false; // Read chip identification and send it to device detect dev = &devInstance; @@ -179,31 +183,38 @@ static bool flashSpiInit(const flashConfig_t *flashConfig) #ifdef USE_FLASH_M25P16 if (m25p16_detect(&flashDevice, chipID)) { - return true; + detected = true; } #endif #if defined(USE_FLASH_W25M512) || defined(USE_FLASH_W25M) - if (w25m_detect(&flashDevice, chipID)) { - return true; + if (!detected && w25m_detect(&flashDevice, chipID)) { + detected = true; } #endif - // Newer chips - chipID = (readIdResponse[1] << 16) | (readIdResponse[2] << 8) | (readIdResponse[3]); + if (!detected) { + // Newer chips + chipID = (readIdResponse[1] << 16) | (readIdResponse[2] << 8) | (readIdResponse[3]); + } #ifdef USE_FLASH_W25N01G - if (w25n01g_detect(&flashDevice, chipID)) { - return true; + if (!detected && w25n01g_detect(&flashDevice, chipID)) { + detected = true; } #endif #ifdef USE_FLASH_W25M02G - if (w25m_detect(&flashDevice, chipID)) { - return true; + if (!detected && w25m_detect(&flashDevice, chipID)) { + detected = true; } #endif + if (detected) { + flashDevice.geometry.jedecId = chipID; + return detected; + } + spiPreinitByTag(flashConfig->csTag); return false; diff --git a/src/main/drivers/flash.h b/src/main/drivers/flash.h index bdbd6583a3..426f8479fd 100644 --- a/src/main/drivers/flash.h +++ b/src/main/drivers/flash.h @@ -45,6 +45,7 @@ typedef struct flashGeometry_s { uint32_t totalSize; // This is just sectorSize * sectors uint16_t pagesPerSector; flashType_e flashType; + uint32_t jedecId; } flashGeometry_t; void flashPreInit(const flashConfig_t *flashConfig);