w25q16jv interfacing with nRF 52833 board

I am trying to interface winbond flash with the 33 board using ncs and VS code , I am able to get the code to compile and not receiving any errors , it is working and no matter what i send i am getting FF as a response

I have referred to Case ID: 261312

But As mentioned in the first link provided to change the .dts file . I cannot put in any pin configurations , if i do it is showing me a assert error for not having pin control in it , even when i try changing the pin numbers in the .overlay file I am getting the same issues . 

/*
* Copyright (c) 2012-2014 Wind River Systems, Inc.
*
* SPDX-License-Identifier: Apache-2.0
*/

#include <zephyr.h>
#include <sys/printk.h>
#include <device.h>
#include <drivers/spi.h>
#include <hal/nrf_gpio.h>
#define MY_SPI DT_NODELABEL(spi3)
#define CS_PIN 16
#define SPI_MODE_CPOL 0
#define SPI_MODE_CPHA 0

static const struct spi_config spi_cfg = {
	.operation = SPI_WORD_SET(8) | SPI_TRANSFER_MSB |
		     SPI_MODE_CPOL | SPI_MODE_CPHA,
	.frequency = 50000000,
	.slave = 1,
	
};

static const struct spi_cs_control cs_pin = {
	.gpio_pin=16,

};

const struct spi_dt_spec *spi_dev = DEVICE_DT_GET(MY_SPI);

static void spi_init(void)
{

if (!device_is_ready(spi_dev)) {
       	printk("Could not get device\n");
}
}

void spi_test_send(void)
{
	int err;
	static uint8_t tx_buffer[1];
	static uint8_t rx_buffer[1];

	const struct spi_buf tx_buf = {
		.buf = tx_buffer,
		.len = sizeof(tx_buffer)
	};
	const struct spi_buf_set tx = {
		.buffers = &tx_buf,
		.count = 1
	};

	struct spi_buf rx_buf = {
		.buf = rx_buffer,
		.len = sizeof(rx_buffer),
	};
	const struct spi_buf_set rx = {
		.buffers = &rx_buf,
		.count = 1
	};
		nrf_gpio_cfg_output(&cs_pin);
		// GPIO_SetBits(SPI_CS_MS_DEMO_PIN);
		nrf_gpio_pin_set(&cs_pin);
		k_busy_wait(100000);
		// GPIO_ResetBits(SPI_CS_MS_DEMO_PIN);
		nrf_gpio_pin_clear(&cs_pin);
		tx_buffer[0]=0x9F;
		// SPI_Send_Receive_Data(&a, &a1);
		err = spi_transceive(spi_dev, &spi_cfg, &tx, &rx);
			//k_busy_wait(1000);
	if (err) {
		printk("SPI error: %d\n", err);
	}else{
		printk("TX sent: %x\n", tx_buffer[0]);
		printk("RX recv: %x\n", rx_buffer[0]);
	}
		rx_buffer[0]=0x00;
		tx_buffer[0]=0x00;
		// b1=SPI_Send_Receive_Data(&a, &a1);
		err = spi_transceive(spi_dev, &spi_cfg, &tx, &rx);
	if (err) {
		printk("SPI error: %d\n", err);
	}else{
		printk("TX sent: %x\n", tx_buffer[0]);
		printk("RX recv: %x\n", rx_buffer[0]);
	}
		rx_buffer[0]=0x00;
		tx_buffer[0]=0x00;
		// b2=SPI_Send_Receive_Data(&a, &a1);
		err = spi_transceive(spi_dev, &spi_cfg, &tx, &rx);
	if (err) {
		printk("SPI error: %d\n", err);
	}else{
		printk("TX sent: %x\n", tx_buffer[0]);
		printk("RX recv: %x\n", rx_buffer[0]);
	}
		rx_buffer[0]=0x00;
		tx_buffer[0]=0x00;
		// b3=SPI_Send_Receive_Data(&a, &a1);
		err = spi_transceive(spi_dev, &spi_cfg, &tx, &rx);
	if (err) {
		printk("SPI error: %d\n", err);
	}else{
		printk("TX sent: %x\n", tx_buffer[0]);
		printk("RX recv: %x\n", rx_buffer[0]);
	}
		// GPIO_SetBits(SPI_CS_MS_DEMO_PIN);
		nrf_gpio_pin_set(CS_PIN);
	
}

void main(void)
{
	printk("SPIM Example\n");
	spi_init();

	while (1) {
		spi_test_send();
		k_sleep(K_SECONDS(1));
	}
}
 

&spi3 {
    compatible = "nordic,nrf-spim";
    status = "okay";
    //sck-pin = <11>;
   // mosi-pin = <10>;
    //miso-pin = <12>;
};
this works and only gives me read values as FF

Parents
  • Hi

    Me and a colleague looked at your code, but it's very hard to spot something wrong by just looking at raw code, so we have not seen anything obviously wrong in your application. Can you upload a picture of the activity on your logic analyzer with a label of what line is what pin, right after a read JEDEC ID operation, from the Arduino and from an nRF52833. That way we can compare and find out where exactly things are going wrong.

    Best regards,

    Simon

  • Hi Simon,

    Sorry for the late response , I was trying to figure it out , have now received some values from the flash but its not correct ,

    I want to try using CPOL=0 CPHA=1 because I tried it on another board and it was working fine , but when I try to implement it , I get -22 error which means that my previous write has not finished , but I am using only one transceive function to send all 4 bytes . I am attaching both captures of my Logic analyzer

    nrf board  

      

Reply
  • Hi Simon,

    Sorry for the late response , I was trying to figure it out , have now received some values from the flash but its not correct ,

    I want to try using CPOL=0 CPHA=1 because I tried it on another board and it was working fine , but when I try to implement it , I get -22 error which means that my previous write has not finished , but I am using only one transceive function to send all 4 bytes . I am attaching both captures of my Logic analyzer

    nrf board  

      

Children
Related