From 39905b3b60e8600a8f86902cee52f9e86286fbda Mon Sep 17 00:00:00 2001 From: jflyper Date: Mon, 7 Oct 2019 04:09:09 +0900 Subject: [PATCH 1/2] Fix W25M support --- src/main/drivers/flash_w25m.c | 22 +++++++++++++++++++++- src/main/drivers/flash_w25n01g.c | 3 --- src/main/drivers/flash_w25n01g.h | 3 +++ 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/main/drivers/flash_w25m.c b/src/main/drivers/flash_w25m.c index d8cf88e12..75c3366f0 100644 --- a/src/main/drivers/flash_w25m.c +++ b/src/main/drivers/flash_w25m.c @@ -43,12 +43,14 @@ #include "flash_m25p16.h" #include "flash_w25m.h" +#include "flash_w25n01g.h" #include "pg/flash.h" #define W25M_INSTRUCTION_SOFTWARE_DIE_SELECT 0xC2 #define JEDEC_ID_WINBOND_W25M512 0xEF7119 // W25Q256 x 2 +#define JEDEC_ID_WINBOND_W25M02G 0xEFAB21 // W25N01G x 2 static const flashVTable_t w25m_vTable; @@ -108,6 +110,7 @@ bool w25m_detect(flashDevice_t *fdevice, uint32_t chipID) { switch (chipID) { +#ifdef USE_FLASH_W25M512 case JEDEC_ID_WINBOND_W25M512: // W25Q256 x 2 dieCount = 2; @@ -121,6 +124,23 @@ bool w25m_detect(flashDevice_t *fdevice, uint32_t chipID) fdevice->geometry.flashType = FLASH_TYPE_NOR; break; +#endif + +#ifdef USE_FLASH_W25M02G + case JEDEC_ID_WINBOND_W25M02G: + // W25N01G x 2 + dieCount = 2; + + for (int die = 0 ; die < dieCount ; die++) { + w25m_dieSelect(fdevice->io.handle.busdev, die); + dieDevice[die].io.handle.busdev = fdevice->io.handle.busdev; + dieDevice[die].io.mode = fdevice->io.mode; + w25n01g_detect(&dieDevice[die], JEDEC_ID_WINBOND_W25N01GV); + } + + fdevice->geometry.flashType = FLASH_TYPE_NAND; + break; +#endif default: // Not a valid W25M series device @@ -131,7 +151,7 @@ bool w25m_detect(flashDevice_t *fdevice, uint32_t chipID) return false; } - fdevice->geometry.sectors = dieDevice[0].geometry.sectors; + fdevice->geometry.sectors = dieDevice[0].geometry.sectors * dieCount; fdevice->geometry.sectorSize = dieDevice[0].geometry.sectorSize; fdevice->geometry.pagesPerSector = dieDevice[0].geometry.pagesPerSector; fdevice->geometry.pageSize = dieDevice[0].geometry.pageSize; diff --git a/src/main/drivers/flash_w25n01g.c b/src/main/drivers/flash_w25n01g.c index 01fd26b80..41385899e 100644 --- a/src/main/drivers/flash_w25n01g.c +++ b/src/main/drivers/flash_w25n01g.c @@ -50,9 +50,6 @@ serialPort_t *debugSerialPort = NULL; #define DPRINTF(x) #endif -// JEDEC ID -#define JEDEC_ID_WINBOND_W25N01GV 0xEFAA21 - // Device size parameters #define W25N01G_PAGE_SIZE 2048 #define W25N01G_PAGES_PER_BLOCK 64 diff --git a/src/main/drivers/flash_w25n01g.h b/src/main/drivers/flash_w25n01g.h index 19ac05c98..219a3fa46 100644 --- a/src/main/drivers/flash_w25n01g.h +++ b/src/main/drivers/flash_w25n01g.h @@ -22,4 +22,7 @@ #pragma once +// JEDEC ID +#define JEDEC_ID_WINBOND_W25N01GV 0xEFAA21 + bool w25n01g_detect(flashDevice_t *fdevice, uint32_t chipID); From babe5e9e1e6c4e39a939045e3aee58ebed9db40e Mon Sep 17 00:00:00 2001 From: jflyper Date: Fri, 11 Oct 2019 00:22:54 +0900 Subject: [PATCH 2/2] Add targets for CI on W25M support --- src/main/target/NUCLEOF7/target.h | 10 ++++++++++ src/main/target/NUCLEOF7/target.mk | 2 +- src/main/target/common_unified.h | 6 ++++-- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/main/target/NUCLEOF7/target.h b/src/main/target/NUCLEOF7/target.h index 080855dc4..3a6d85e5d 100644 --- a/src/main/target/NUCLEOF7/target.h +++ b/src/main/target/NUCLEOF7/target.h @@ -133,6 +133,16 @@ #define SDCARD_SPI_CS_PIN SPI4_NSS_PIN #define SPI4_TX_DMA_OPT 0 // DMA 2 Stream 1 Channel 4 +#define USE_FLASHFS +#define USE_FLASH_CHIP +#define USE_FLASH_M25P16 +#define USE_FLASH_W25N01G // 1Gb NAND flash support +#define USE_FLASH_W25M // Stacked die support +#define USE_FLASH_W25M512 // 512Kb (256Kb x 2 stacked) NOR flash support +#define USE_FLASH_W25M02G // 2Gb (1Gb x 2 stacked) NAND flash support +#define FLASH_SPI_INSTANCE SPI4 +#define FLASH_CS_PIN PE10 + #define USE_I2C #define USE_I2C_DEVICE_1 #define I2C_DEVICE (I2CDEV_1) diff --git a/src/main/target/NUCLEOF7/target.mk b/src/main/target/NUCLEOF7/target.mk index 63387ef75..b4697a23d 100644 --- a/src/main/target/NUCLEOF7/target.mk +++ b/src/main/target/NUCLEOF7/target.mk @@ -1,5 +1,5 @@ F7X6XG_TARGETS += $(TARGET) -FEATURES += SDCARD_SPI VCP +FEATURES += SDCARD_SPI ONBOARDFLASH VCP TARGET_SRC = \ drivers/accgyro/accgyro_fake.c \ diff --git a/src/main/target/common_unified.h b/src/main/target/common_unified.h index da15c3bbf..83ae83885 100644 --- a/src/main/target/common_unified.h +++ b/src/main/target/common_unified.h @@ -72,8 +72,10 @@ #define USE_FLASHFS #define USE_FLASH_M25P16 -#define USE_FLASH_W25M -#define USE_FLASH_W25N01G // 1G NAND flash support +#define USE_FLASH_W25N01G // 1Gb NAND flash support +#define USE_FLASH_W25M // Stacked die support +#define USE_FLASH_W25M512 // 512Kb (256Kb x 2 stacked) NOR flash support +#define USE_FLASH_W25M02G // 2Gb (1Gb x 2 stacked) NAND flash support #define USE_MAX7456