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