nrf52840-read data

Hello forum ,

                   In here i will upload my project in zip where i m using w25q64 flash -nrf52840 .i m trying to read data of qspi flash read write and read for an two byte(trying for qspi write and read) .here my pins are P0.19 - clk;p0.16 -chqspi_try.zipip select ;P0.14 for MOSI(IO0);P0.23 for miso(IO1);P0.13 for flash hold and p1.15 - flash write protect ;i have alread add screenshot of output terminal ...pls go through it 

Parents
  • Hi,

    The JEDEC ID of w25q64 should be [ef 40 17], but I understand you found that. As you are able to read the ID other communication/read/write should also be possible. I do not have that exact flash to test with, but I have a w25q16 that I intended to test with some modifications, but I am not able to build your projcet. Can you share a project that builds in the SDK without any other modifications, or alternatively, also share any changes you have done to the SDK (perhaps device tree files) as well? Along with instructions on how to build and test?

Reply
  • Hi,

    The JEDEC ID of w25q64 should be [ef 40 17], but I understand you found that. As you are able to read the ID other communication/read/write should also be possible. I do not have that exact flash to test with, but I have a w25q16 that I intended to test with some modifications, but I am not able to build your projcet. Can you share a project that builds in the SDK without any other modifications, or alternatively, also share any changes you have done to the SDK (perhaps device tree files) as well? Along with instructions on how to build and test?

Children
  • i have already upload my project as qspi_try.zip in above kindly pls go through in above 

  • i will upload the file that is default .dts file in before i musing w25q64 in .dts file used MX25r64

    /*
     * Copyright (c) 2017 Linaro Limited
     *
     * SPDX-License-Identifier: Apache-2.0
     */
    
     /dts-v1/;
     #include <nordic/nrf52840_qiaa.dtsi>
     #include "nrf52840dk_nrf52840-pinctrl.dtsi"
     #include <zephyr/dt-bindings/input/input-event-codes.h>
     
     / {
    	 model = "Nordic nRF52840 DK NRF52840";
    	 compatible = "nordic,nrf52840-dk-nrf52840";
     
    	 chosen {
    		 zephyr,console = &uart0;
    		 zephyr,shell-uart = &uart0;
    		 zephyr,uart-mcumgr = &uart0;
    		 zephyr,bt-mon-uart = &uart0;
    		 zephyr,bt-c2h-uart = &uart0;
    		 zephyr,sram = &sram0;
    		 zephyr,flash = &flash0;
    		 zephyr,code-partition = &slot0_partition;
    		 zephyr,ieee802154 = &ieee802154;
    	 };
     
    	 leds {
    		 compatible = "gpio-leds";
    		 led0: led_0 {
    			 gpios = <&gpio0 13 GPIO_ACTIVE_LOW>;
    			 label = "Green LED 0";
    		 };
    		 led1: led_1 {
    			 gpios = <&gpio0 14 GPIO_ACTIVE_LOW>;
    			 label = "Green LED 1";
    		 };
    		 led2: led_2 {
    			 gpios = <&gpio0 15 GPIO_ACTIVE_LOW>;
    			 label = "Green LED 2";
    		 };
    		 led3: led_3 {
    			 gpios = <&gpio0 16 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 11 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
    			 label = "Push button switch 0";
    			 zephyr,code = <INPUT_KEY_0>;
    		 };
    		 button1: button_1 {
    			 gpios = <&gpio0 12 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
    			 label = "Push button switch 1";
    			 zephyr,code = <INPUT_KEY_1>;
    		 };
    		 button2: button_2 {
    			 gpios = <&gpio0 24 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
    			 label = "Push button switch 2";
    			 zephyr,code = <INPUT_KEY_2>;
    		 };
    		 button3: button_3 {
    			 gpios = <&gpio0 25 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
    			 label = "Push button switch 3";
    			 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 3 0>,	/* A0 */
    				<1 0 &gpio0 4 0>,	/* A1 */
    				<2 0 &gpio0 28 0>,	/* A2 */
    				<3 0 &gpio0 29 0>,	/* A3 */
    				<4 0 &gpio0 30 0>,	/* A4 */
    				<5 0 &gpio0 31 0>,	/* A5 */
    				<6 0 &gpio1 1 0>,	/* D0 */
    				<7 0 &gpio1 2 0>,	/* D1 */
    				<8 0 &gpio1 3 0>,	/* D2 */
    				<9 0 &gpio1 4 0>,	/* D3 */
    				<10 0 &gpio1 5 0>,	/* D4 */
    				<11 0 &gpio1 6 0>,	/* D5 */
    				<12 0 &gpio1 7 0>,	/* D6 */
    				<13 0 &gpio1 8 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 &gpio0 26 0>,	/* D14 */
    				<21 0 &gpio0 27 0>;	/* D15 */
    	 };
     
    	 arduino_adc: analog-connector {
    		 compatible = "arduino,uno-adc";
    		 #io-channel-cells = <1>;
    		 io-channel-map = <0 &adc 1>,	/* A0 = P0.3 = AIN1 */
    				  <1 &adc 2>,	/* A1 = P0.4 = AIN2 */
    				  <2 &adc 4>,	/* A2 = P0.28 = AIN4 */
    				  <3 &adc 5>,	/* A3 = P0.29 = AIN5 */
    				  <4 &adc 6>,	/* A4 = P0.30 = AIN6 */
    				  <5 &adc 7>;	/* A5 = P0.31 = AIN7 */
    	 };
     
    	 /* 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";
     };
     
     &uicr {
    	 gpio-as-nreset;
     };
     
     &gpiote {
    	 status = "okay";
     };
     
     &gpio0 {
    	 status = "okay";
    	 gpio-reserved-ranges = <0 2>, <6 1>, <8 3>, <17 7>;
    	 gpio-line-names = "XL1", "XL2", "AREF", "A0", "A1", "RTS", "TXD",
    		 "CTS", "RXD", "NFC1", "NFC2", "BUTTON1", "BUTTON2", "LED1",
    		 "LED2", "LED3", "LED4", "QSPI CS", "RESET", "QSPI CLK",
    		 "QSPI DIO0", "QSPI DIO1", "QSPI DIO2", "QSPI DIO3","BUTTON3",
    		 "BUTTON4", "SDA", "SCL", "A2", "A3", "A4", "A5";
     };
     
     &gpio1 {
    	 status = "okay";
    	 gpio-line-names = "", "D0", "D1", "D2", "D3", "D4", "D5", "D6",
    		 "D7", "", "D8", "D9", "D10", "D11", "D12", "D13";
     };
     
     &uart0 {
    	 compatible = "nordic,nrf-uarte";
    	 status = "okay";
    	 current-speed = <115200>;
    	 pinctrl-0 = <&uart0_default>;
    	 pinctrl-1 = <&uart0_sleep>;
    	 pinctrl-names = "default", "sleep";
     };
     
     arduino_serial: &uart1 {
    	 current-speed = <115200>;
    	 pinctrl-0 = <&uart1_default>;
    	 pinctrl-1 = <&uart1_sleep>;
    	 pinctrl-names = "default", "sleep";
     };
     
     arduino_i2c: &i2c0 {
    	 compatible = "nordic,nrf-twi";
    	 status = "okay";
    	 pinctrl-0 = <&i2c0_default>;
    	 pinctrl-1 = <&i2c0_sleep>;
    	 pinctrl-names = "default", "sleep";
     };
     
     &i2c1 {
    	 compatible = "nordic,nrf-twi";
    	 /* Cannot be used together with spi1. */
    	 /* status = "okay"; */
    	 pinctrl-0 = <&i2c1_default>;
    	 pinctrl-1 = <&i2c1_sleep>;
    	 pinctrl-names = "default", "sleep";
     };
     
     &pwm0 {
    	 status = "okay";
    	 pinctrl-0 = <&pwm0_default>;
    	 pinctrl-1 = <&pwm0_sleep>;
    	 pinctrl-names = "default", "sleep";
     };
     
     &spi0 {
    	 compatible = "nordic,nrf-spi";
    	 /* Cannot be used together with i2c0. */
    	 /* status = "okay"; */
    	 pinctrl-0 = <&spi0_default>;
    	 pinctrl-1 = <&spi0_sleep>;
    	 pinctrl-names = "default", "sleep";
     };
     
     &spi1 {
    	 compatible = "nordic,nrf-spi";
    	 status = "okay";
    	 pinctrl-0 = <&spi1_default>;
    	 pinctrl-1 = <&spi1_sleep>;
    	 pinctrl-names = "default", "sleep";
     };
     
     &spi2 {
    	 compatible = "nordic,nrf-spi";
    	 status = "disabled";
    	 pinctrl-0 = <&spi2_default>;
    	 pinctrl-1 = <&spi2_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 = [c2 28 17];
    		 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 = <67108864>;
    		 has-dpd;
    		 t-enter-dpd = <10000>;
    		 t-exit-dpd = <35000>;
    	 };
     };
     
     arduino_spi: &spi3 {
    	 status = "okay";
    	 cs-gpios = <&arduino_header 16 GPIO_ACTIVE_LOW>; /* D10 */
    	 pinctrl-0 = <&spi3_default>;
    	 pinctrl-1 = <&spi3_sleep>;
    	 pinctrl-names = "default", "sleep";
     };
     
     &ieee802154 {
    	 status = "okay";
     };
     
     &flash0 {
     
    	 partitions {
    		 compatible = "fixed-partitions";
    		 #address-cells = <1>;
    		 #size-cells = <1>;
     
    		 boot_partition: partition@0 {
    			 label = "mcuboot";
    			 reg = <0x00000000 0x0000C000>;
    		 };
    		 slot0_partition: partition@c000 {
    			 label = "image-0";
    			 reg = <0x0000C000 0x00076000>;
    		 };
    		 slot1_partition: partition@82000 {
    			 label = "image-1";
    			 reg = <0x00082000 0x00076000>;
    		 };
     
    		 /*
    		  * The flash starting at 0x000f8000 and ending at
    		  * 0x000fffff is reserved for use by the application.
    		  */
     
    		 /*
    		  * Storage partition will be used by FCB/LittleFS/NVS
    		  * if enabled.
    		  */
    		 storage_partition: partition@f8000 {
    			 label = "storage";
    			 reg = <0x000f8000 0x00008000>;
    		 };
    	 };
     };
     
     zephyr_udc0: &usbd {
    	 compatible = "nordic,nrf-usbd";
    	 status = "okay";
     };
     

  • the above txt file is the default dts file in version qspi zephyr v 2.7.0 using MX25R64

  • Hi,

    I used your project but it does not build on my end. Can you share exactly which files or project I should use and how I shold build it? (please also check if you have any modifications in other SDK that is needed, and if so, share those as well)

  • now i can able to write and read in flash ......thank yu sir  ....

Related