This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

nRF52840 Zephyr dual QSPI MX25R64 flash example

I am trying to modify the nRF52840dk_nrf52840 spi_flash sample, ncs/zephyr/samples/drivers/spi_flash, to use dual QSPI. 

Following is my device tree configuration:

&spi1 {
	compatible = "nordic,nrf-spi";
	status = "okay";
	sck-pin = <31>;
	mosi-pin = <30>;
	miso-pin = <45>;
};

&qspi {
	status = "okay";
	sck-pin = <31>;
	io-pins = <30 45>;
	csn-pins = <29>;
	mx25r64: mx25r6435f@0 {
		compatible = "nordic,qspi-nor";
		reg = <0>;
		quad-enable-requirements = "NONE";
		/* MX24R64 supports only pp and pp4io */
		writeoc = "pp";
		/* MX24R64 supports all readoc options */
		readoc = "fastread";
		sck-frequency = <8000000>;
		label = "MX25R64";
		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>;
	};
};

I am using the main.c from the ncs/zephyr/samples/drivers/spi_flash example code.

JEDEC QSPI-NOR SPI flash testing
==========================
SPI flash driver MX25R64 was not found!

If I debug it and step into "device_get_binding()" and go down to '*z_impl_device_get_binding()" it will find the device with the following details.

dev->name = "MX25R64"
dev->config = 0x15884 <flash_id>
dev->api = 0x158d4 <qspi_nor_api>
dev->data = 0x200000e4 <qspi_nor_memory_data>

However, "sys_bitfield_test_bit()", in "z_device_ready()", indicates that the device failed initialization.

I am running this code on a custom board that is known good. I have existing code using the nRF_SDK v15.3.0 that successfully uses the MX25R64 with SPI.

What am I missing to get the MX25R64 to work with dual QSPI in Zephyr?

Parents Reply Children
No Data
Related