Nrf5340 and W25Q128JV Nor Flash R/W problem?

Hello,

We are trying to use nrf5340 and W25Q128JV (https://www.winbond.com/resource-files/W25Q128JV%20RevI%2008232021%20Plus.pdf) nor flash on our own designed card. I am checking the flash operation via spi_flash example. 

I made changes to the DTS file. (jedec-id = [ef 40 18]; size = <134217728>;) 

When reading flash, FF is displayed and I can't write data to flash. Can you support me? 

Thanks

  • Hello, the problem continues, the flash cannot be accessed when the jedec-id is incorrectly defined. when the jedec-id is defined correctly, I get the ff value. 

    by the way, I observe that the same problem persists when I Decouple the flash located on the nrf5340dk and connect the W25Q128JV flash. The problem is software. How can I solve the problem

  • Hello,

    If the correct JEDEC ID is set, the jedec,spi-nor driver should connect to the device. However, there might be an issue during driver setup. You can check the logs or enable extra debug messages to confirm that the SPI NOR driver is properly connecting to the W25Q128JV and completing the required setup. Ensure that the power is stable and that the W25Q128JV is connected properly to the nRF5340

    Which SDK version are you using here?

    Please attach the log messages and DTS file here, use insert tab for doing that.

    Kind Regards,

    Abhijith

  • Hello,

    Thank you for your feedback. I'm using the 2.6.1 Sdk version.

    dts file is attached. JEDEC ID and size have been changed.

    nrf5340_cpuapp_common.dtsi:

    /*
     * Copyright (c) 2019-2020 Nordic Semiconductor ASA
     *
     * SPDX-License-Identifier: Apache-2.0
     */
    #include "nrf5340_cpuapp_common-pinctrl.dtsi"
    #include <zephyr/dt-bindings/input/input-event-codes.h>
    
    / {
    
    	chosen {
    		zephyr,console = &uart0;
    		zephyr,shell-uart = &uart0;
    		zephyr,uart-mcumgr = &uart0;
    		zephyr,bt-mon-uart = &uart0;
    		zephyr,bt-c2h-uart = &uart0;
    		zephyr,bt-hci-ipc = &ipc0;
    		nordic,802154-spinel-ipc = &ipc0;
    		zephyr,ieee802154 = &ieee802154;
    	};
    
    	leds {
    		compatible = "gpio-leds";
    		led0: led_0 {
    			gpios = <&gpio0 28 GPIO_ACTIVE_LOW>;
    			label = "Green LED 0";
    		};
    		led1: led_1 {
    			gpios = <&gpio0 29 GPIO_ACTIVE_LOW>;
    			label = "Green LED 1";
    		};
    		led2: led_2 {
    			gpios = <&gpio0 30 GPIO_ACTIVE_LOW>;
    			label = "Green LED 2";
    		};
    		led3: led_3 {
    			gpios = <&gpio0 31 GPIO_ACTIVE_LOW>;
    			label = "Green LED 3";
    		};
    	};
    
    	pwmleds {
    		compatible = "pwm-leds";
    		pwm_led0: pwm_led_0 {
    			pwms = <&pwm0 0 PWM_MSEC(20) PWM_POLARITY_INVERTED>;
    		};
    	};
    
    	buttons {
    		compatible = "gpio-keys";
    		button0: button_0 {
    			gpios = <&gpio0 23 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
    			label = "Push button 1";
    			zephyr,code = <INPUT_KEY_0>;
    		};
    		button1: button_1 {
    			gpios = <&gpio0 24 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
    			label = "Push button 2";
    			zephyr,code = <INPUT_KEY_1>;
    		};
    		button2: button_2 {
    			gpios = <&gpio0 8 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
    			label = "Push button 3";
    			zephyr,code = <INPUT_KEY_2>;
    		};
    		button3: button_3 {
    			gpios = <&gpio0 9 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
    			label = "Push button 4";
    			zephyr,code = <INPUT_KEY_3>;
    		};
    	};
    
    	arduino_header: connector {
    		compatible = "arduino-header-r3";
    		#gpio-cells = <2>;
    		gpio-map-mask = <0xffffffff 0xffffffc0>;
    		gpio-map-pass-thru = <0 0x3f>;
    		gpio-map = <0 0 &gpio0 4 0>,	/* A0 */
    			   <1 0 &gpio0 5 0>,	/* A1 */
    			   <2 0 &gpio0 6 0>,	/* A2 */
    			   <3 0 &gpio0 7 0>,	/* A3 */
    			   <4 0 &gpio0 25 0>,	/* A4 */
    			   <5 0 &gpio0 26 0>,	/* A5 */
    			   <6 0 &gpio1 0 0>,	/* D0 */
    			   <7 0 &gpio1 1 0>,	/* D1 */
    			   <8 0 &gpio1 4 0>,	/* D2 */
    			   <9 0 &gpio1 5 0>,	/* D3 */
    			   <10 0 &gpio1 6 0>,	/* D4 */
    			   <11 0 &gpio1 7 0>,	/* D5 */
    			   <12 0 &gpio1 8 0>,	/* D6 */
    			   <13 0 &gpio1 9 0>,	/* D7 */
    			   <14 0 &gpio1 10 0>,	/* D8 */
    			   <15 0 &gpio1 11 0>,	/* D9 */
    			   <16 0 &gpio1 12 0>,	/* D10 */
    			   <17 0 &gpio1 13 0>,	/* D11 */
    			   <18 0 &gpio1 14 0>,	/* D12 */
    			   <19 0 &gpio1 15 0>,	/* D13 */
    			   <20 0 &gpio1 2 0>,	/* D14 */
    			   <21 0 &gpio1 3 0>;	/* D15 */
    	};
    
    	arduino_adc: analog-connector {
    		compatible = "arduino,uno-adc";
    		#io-channel-cells = <1>;
    		io-channel-map = <0 &adc 0>,	/* A0 = P0.4 = AIN0 */
    				 <1 &adc 1>,	/* A1 = P0.5 = AIN1 */
    				 <2 &adc 2>,	/* A2 = P0.6 = AIN2 */
    				 <3 &adc 3>,	/* A3 = P0.7 = AIN3 */
    				 <4 &adc 4>,	/* A4 = P0.25 = AIN4 */
    				 <5 &adc 5>;	/* A5 = P0.26 = AIN5 */
    	};
    
    	gpio_fwd: nrf-gpio-forwarder {
    		compatible = "nordic,nrf-gpio-forwarder";
    		status = "okay";
    		uart {
    			gpios = <&gpio1 1 0>, <&gpio1 0 0>, <&gpio0 11 0>, <&gpio0 10 0>;
    		};
    	};
    
    	/* These aliases are provided for compatibility with samples */
    	aliases {
    		led0 = &led0;
    		led1 = &led1;
    		led2 = &led2;
    		led3 = &led3;
    		pwm-led0 = &pwm_led0;
    		sw0 = &button0;
    		sw1 = &button1;
    		sw2 = &button2;
    		sw3 = &button3;
    		bootloader-led0 = &led0;
    		mcuboot-button0 = &button0;
    		mcuboot-led0 = &led0;
    		watchdog0 = &wdt0;
    		spi-flash0 = &mx25r64;
    	};
    };
    
    &adc {
    	status = "okay";
    };
    
    &gpiote {
    	status = "okay";
    };
    
    &gpio0 {
    	status = "okay";
    };
    
    &gpio1 {
    	status = "okay";
    };
    
    &i2c1 {
    	compatible = "nordic,nrf-twim";
    	status = "okay";
    	pinctrl-0 = <&i2c1_default>;
    	pinctrl-1 = <&i2c1_sleep>;
    	pinctrl-names = "default", "sleep";
    };
    
    &uart0 {
    	status = "okay";
    	current-speed = <115200>;
    	pinctrl-0 = <&uart0_default>;
    	pinctrl-1 = <&uart0_sleep>;
    	pinctrl-names = "default", "sleep";
    };
    
    &pwm0 {
    	status = "okay";
    	pinctrl-0 = <&pwm0_default>;
    	pinctrl-1 = <&pwm0_sleep>;
    	pinctrl-names = "default", "sleep";
    };
    
    &qspi {
    	status = "okay";
    	pinctrl-0 = <&qspi_default>;
    	pinctrl-1 = <&qspi_sleep>;
    	pinctrl-names = "default", "sleep";
    	mx25r64: mx25r6435f@0 {
    		compatible = "nordic,qspi-nor";
    		reg = <0>;
    		/* MX25R64 supports only pp and pp4io */
    		writeoc = "pp4io";
    		/* MX25R64 supports all readoc options */
    		readoc = "read4io";
    		sck-frequency = <8000000>;
    		jedec-id = [ef 40 18];
    		sfdp-bfp = [
    			e5 20 f1 ff  ff ff ff 03  44 eb 08 6b  08 3b 04 bb
    			ee ff ff ff  ff ff 00 ff  ff ff 00 ff  0c 20 0f 52
    			10 d8 00 ff  23 72 f5 00  82 ed 04 cc  44 83 68 44
    			30 b0 30 b0  f7 c4 d5 5c  00 be 29 ff  f0 d0 ff ff
    		];
    		size = <134217728>;
    		has-dpd;
    		t-enter-dpd = <10000>;
    		t-exit-dpd = <35000>;
    	};
    };
    
    arduino_serial: &uart1 {
    	compatible = "nordic,nrf-uarte";
    	current-speed = <115200>;
    	pinctrl-0 = <&uart1_default>;
    	pinctrl-1 = <&uart1_sleep>;
    	pinctrl-names = "default", "sleep";
    };
    
    arduino_i2c: &i2c1 {};
    
    arduino_spi: &spi4 {
    	compatible = "nordic,nrf-spim";
    	status = "okay";
    	cs-gpios = <&arduino_header 16 GPIO_ACTIVE_LOW>; /* D10 */
    	pinctrl-0 = <&spi4_default>;
    	pinctrl-1 = <&spi4_sleep>;
    	pinctrl-names = "default", "sleep";
    };
    
    &flash0 {
    
    	partitions {
    		compatible = "fixed-partitions";
    		#address-cells = <1>;
    		#size-cells = <1>;
    
    		boot_partition: partition@0 {
    			label = "mcuboot";
    			reg = <0x00000000 0x00010000>;
    		};
    		slot0_partition: partition@10000 {
    			label = "image-0";
    		};
    		slot0_ns_partition: partition@50000 {
    			label = "image-0-nonsecure";
    		};
    		slot1_partition: partition@80000 {
    			label = "image-1";
    		};
    		slot1_ns_partition: partition@c0000 {
    			label = "image-1-nonsecure";
    		};
    		/* 0xf0000 to 0xf7fff reserved for TF-M partitions */
    		storage_partition: partition@f8000 {
    			label = "storage";
    			reg = <0x000f8000 0x00008000>;
    		};
    	};
    };
    
    &ieee802154 {
    	status = "okay";
    };
    
    zephyr_udc0: &usbd {
    	compatible = "nordic,nrf-usbd";
    	status = "okay";
    };
    
    / {
    
    	reserved-memory {
    		#address-cells = <1>;
    		#size-cells = <1>;
    		ranges;
    
    		sram0_image: image@20000000 {
    			/* Zephyr image(s) memory */
    		};
    
    		sram0_s: image_s@20000000 {
    			/* Secure image memory */
    		};
    
    		sram0_ns: image_ns@20040000 {
    			/* Non-Secure image memory */
    		};
    	};
    };
    
    /* Include partition configuration file */
    #include "nrf5340_cpuapp_partition_conf.dtsi"
    

    Log File:

    3113.log.log

    I couldn't solve the problem. What should I try? What are your suggestions?

  • hello,

    I am facing the same issue with the flash w25q512nw.
    I am using nrf connect sdk version v2.5.2 and nRf5340 SOC.

    &qspi {
    	status = "okay";
    	pinctrl-0 = <&qspi_default>;
    	pinctrl-1 = <&qspi_sleep>;
    	pinctrl-names = "default", "sleep";
    	w25q512: w25q512nw@0 {
    		compatible = "nordic,qspi-nor";
    		reg = <0>;
    		/* MX25R64 supports only pp and pp4io */
    		writeoc = "pp4io";
    		/* MX25R64 supports all readoc options */
    		readoc = "read4io";
    		sck-frequency = <8000000>;
    		// jedec-id = [c2 28 17];
    		jedec-id = [EF 60 20];
    		sfdp-bfp = [
    			e5 20 f1 ff  ff ff ff 03  44 eb 08 6b  08 3b 04 bb
    			ee ff ff ff  ff ff 00 ff  ff ff 00 ff  0c 20 0f 52
    			10 d8 00 ff  23 72 f5 00  82 ed 04 cc  44 83 68 44
    			30 b0 30 b0  f7 c4 d5 5c  00 be 29 ff  f0 d0 ff ff
    		];
    		size = <536870912>;
    		// address-size-32;
    		has-dpd;
    		// t-enter-dpd = <10000>;
    		// t-exit-dpd = <35000>;
    		t-enter-dpd = <3000>;
    		t-exit-dpd = <30000>;
    	};
    };

    I am using this flash in my custom board for store the sensor data. 

  • Hello,

    Our problem persists? What are your suggestions? We are waiting for your response.

Related