GD25WB256 Alternative + Firmware Changes (nRF9151 External Flash)

Hi,

I’m using GD25WB256 as external flash on nRF9151 for MCUboot secondary slot. It’s currently not available from our supplier, so I’m looking for alternatives.

Current overlay:

/ {
    chosen {
        nordic,pm-ext-flash = &gd25wb256;
    };
};

&gd25wb256 {
    status = "okay";
};

Questions:

  1. What are good 256Mbit SPI NOR alternatives (preferably 1.8V) that work well with nRF Connect SDK + MCUboot?
    • Considering Winbond / ISSI / Macronix parts
  2. For replacing the flash, is it enough to:
    • Just update the device tree (JEDEC ID, size)
    • Keep everything else unchanged?
  3. Anything to watch out for (4-byte addressing, SFDP, etc.)?

Thanks!

Parents
  • Hi Akshay, 

    We won't be able to give you a specific recommendation for an alternative to GD25WB256. The NCS SDK is highly agnostic to a specific flash chip. Any modern QSPI flash will be "plug-and-play" once you update the JEDEC ID and size in your Devicetree. We are not supposed to give any "favorite" flash chip/ manufacturer that you should use. 

    As far as I know, you just need to use the correct JDEC ID and correct size in the device tree overlay you should be fine. 

    Anything to watch out for (4-byte addressing, SFDP, etc.)?

    Not that I'm aware of, AFAIK you just need enter-4byte-addr = <0x01>;     defined in the device tree overlay.

  • Hi Hung,

    We decided to use the 3 V SPI NOR flash from Winbond, the W25Q256JV, as an external flash for the nRF9151.

    Below are the relevant schematics and firmware configuration.

    Hardware:

    • SPI3 used for the flash
    • CS connected to the dedicated SPI CS line
    • HOLD#/RESET and WP#/IO2 are pulled up to VCC using 10 kΩ resistors
    • VCC = 3.0 V
    • Decoupling capacitor: 100 nF close to the flash
    • SPI signals routed directly from the nRF9151

    Device tree configuration:

    &spi3 {
        status = "okay";
    
        w25q256: w25q256jv@1 {
            compatible = "jedec,spi-nor";
            status = "okay";
            reg = <1>;
    
            spi-max-frequency = <8000000>;
            jedec-id = [ef 70 19];
            size = <268435456>;
    
            sfdp-bfp = [
                e5 20 f3 ff  ff ff ff 0f  44 eb 08 6b  08 3b 42 bb
                ee ff ff ff  ff ff 00 ff  ff ff 00 ff  0c 20 0f 52
                10 d8 00 ff  44 7a c9 fe  83 67 26 62  ec 82 18 44
                7a 75 7a 75  04 c4 d5 5c  00 06 74 00  08 50 00 01
            ];
    
            //sfdp-bfp = [];
    
            has-dpd;
            t-enter-dpd = <3000>;
            t-exit-dpd = <40000>;
    
            /* Required for 256 Mbit */
            enter-4byte-addr = <0x01>;
        };
    };
    
    chosen {
        nordic,pm-ext-flash = &w25q256;
    };

    Kconfig:

    CONFIG_SPI_NOR_SFDP_RUNTIME=y

    Since I do not know the correct sfdp-bfp values for the W25Q256JV, I initially copied the values from the GD25WB256. However, I am expecting the driver to read the SFDP dynamically at runtime because CONFIG_SPI_NOR_SFDP_RUNTIME=y is enabled.

    Unfortunately, this is not working.

    Could you please verify:

    1. Whether the hardware schematic connections look correct for the W25Q256JV
    2. Whether the device tree configuration is correct
    3. Whether CONFIG_SPI_NOR_SFDP_RUNTIME=y should completely eliminate the need for sfdp-bfp
    4. Whether the enter-4byte-addr = <0x01>; configuration is correct for this flash
    5. If there are any additional requirements for using the W25Q256JV with the nRF9151 external flash / PM subsystem.

    Thanks,

Reply
  • Hi Hung,

    We decided to use the 3 V SPI NOR flash from Winbond, the W25Q256JV, as an external flash for the nRF9151.

    Below are the relevant schematics and firmware configuration.

    Hardware:

    • SPI3 used for the flash
    • CS connected to the dedicated SPI CS line
    • HOLD#/RESET and WP#/IO2 are pulled up to VCC using 10 kΩ resistors
    • VCC = 3.0 V
    • Decoupling capacitor: 100 nF close to the flash
    • SPI signals routed directly from the nRF9151

    Device tree configuration:

    &spi3 {
        status = "okay";
    
        w25q256: w25q256jv@1 {
            compatible = "jedec,spi-nor";
            status = "okay";
            reg = <1>;
    
            spi-max-frequency = <8000000>;
            jedec-id = [ef 70 19];
            size = <268435456>;
    
            sfdp-bfp = [
                e5 20 f3 ff  ff ff ff 0f  44 eb 08 6b  08 3b 42 bb
                ee ff ff ff  ff ff 00 ff  ff ff 00 ff  0c 20 0f 52
                10 d8 00 ff  44 7a c9 fe  83 67 26 62  ec 82 18 44
                7a 75 7a 75  04 c4 d5 5c  00 06 74 00  08 50 00 01
            ];
    
            //sfdp-bfp = [];
    
            has-dpd;
            t-enter-dpd = <3000>;
            t-exit-dpd = <40000>;
    
            /* Required for 256 Mbit */
            enter-4byte-addr = <0x01>;
        };
    };
    
    chosen {
        nordic,pm-ext-flash = &w25q256;
    };

    Kconfig:

    CONFIG_SPI_NOR_SFDP_RUNTIME=y

    Since I do not know the correct sfdp-bfp values for the W25Q256JV, I initially copied the values from the GD25WB256. However, I am expecting the driver to read the SFDP dynamically at runtime because CONFIG_SPI_NOR_SFDP_RUNTIME=y is enabled.

    Unfortunately, this is not working.

    Could you please verify:

    1. Whether the hardware schematic connections look correct for the W25Q256JV
    2. Whether the device tree configuration is correct
    3. Whether CONFIG_SPI_NOR_SFDP_RUNTIME=y should completely eliminate the need for sfdp-bfp
    4. Whether the enter-4byte-addr = <0x01>; configuration is correct for this flash
    5. If there are any additional requirements for using the W25Q256JV with the nRF9151 external flash / PM subsystem.

    Thanks,

Children
No Data
Related