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

nrf9160 spi error - 5.

Dear Sir.

I am using Master SPI to drive 2 slaves.

Both spi are referenced within Interrupt routine ,

When both spi;s slave are referenced I get an error 

err = spi_transceive(spi_dev3, &spi_cfg_afe4900, &tx, &rx);

if (err) {
printk("SPI error: %d\n", err);
}

Errro = -5 .

The spi is configured as follows.

&spi3 {
status = "okay";
compatible = "nordic,nrf-spim";
sck-pin = <31>;
mosi-pin = <9>;
miso-pin = <30>;
cs-gpios = <&gpio0 26 1>,<&gpio0 15 1>;
};

// Main.

struct spi_cs_control afe4900_spi_cs = {
.gpio_pin = 26 , /*CS_PIN_NUM(CONFIG_ST25R3911B_SPI_PORT), */
.delay = 1, /* 8T_NCS_SCLK */
};

struct spi_config spi_cfg_afe4900 = {
.operation = SPI_OP_MODE_MASTER | SPI_WORD_SET(8) | SPI_TRANSFER_MSB |
SPI_MODE_CPOL | SPI_MODE_CPHA ,
.frequency = 7000000,
.slave = 0,
.cs = &afe4900_spi_cs,
};


struct spi_cs_control flash_spi_cs = {
.gpio_pin = 15 , /*CS_PIN_NUM(CONFIG_ST25R3911B_SPI_PORT), */
.delay = 1, /* 8T_NCS_SCLK */
};

struct spi_config spi_cfg_flash = { // ****** NOTICE ME! ********
.operation = SPI_OP_MODE_MASTER | SPI_WORD_SET(8) | SPI_TRANSFER_MSB |
SPI_MODE_CPOL | SPI_MODE_CPHA ,
.frequency = 7000000,
.slave = 0,
.cs = &flash_spi_cs,
};

// Init.

afe4900_spi_cs.gpio_dev = device_get_binding("GPIO_0");
afe4900_spi_cs.gpio_pin = 26;
afe4900_spi_cs.delay = 0;

flash_spi_cs.gpio_dev = device_get_binding("GPIO_0");
flash_spi_cs.gpio_pin = 15;
flash_spi_cs.delay = 0;

// Interrupt

         SPI_read_continuous(0x2a,2);   ( cs == 26 )
         flash_page_counter += afe4900_mem_chunk;


        if(afe4900_int_counter == 30)
        {
            MT25qlxx_WriteEnable();   ( cs == 15 )
            Wait4EraeWrite();               ( cs == 15 )
        }



       if(++afe4900_int_counter >= 40)
       {

             MT25qlxx_WriteFullPage(&flash_buffer[flash_bank][flash_section_counter * 0x100],0);    ( cs == 15 )

      }

Onle when  one slave is enabled   cs == 26 or cs == 15 , I do not get the error -5.

What  is the meaning of it ?.

Thanks

  • Hi

    Just rename prj.txt to prj.conf

    #
    # Copyright (c) 2019 Nordic Semiconductor ASA
    #
    # SPDX-License-Identifier: LicenseRef-BSD-5-Clause-Nordic
    #
    # General config
    CONFIG_TEST_RANDOM_GENERATOR=y
     
    CONFIG_UART_CONSOLE=n
    CONFIG_RTT_CONSOLE=y
    CONFIG_USE_SEGGER_RTT=y
    
    
    # Networking
    CONFIG_NETWORKING=y
    CONFIG_NET_NATIVE=n
    CONFIG_NET_SOCKETS_OFFLOAD=y
    CONFIG_NET_SOCKETS=y
    CONFIG_NET_SOCKETS_POSIX_NAMES=y
    
    # LTE link control
    CONFIG_LTE_LINK_CONTROL=y
    CONFIG_LTE_AUTO_INIT_AND_CONNECT=n
    
    # BSD library
    CONFIG_BSD_LIBRARY=y
    
    # AT Host
    CONFIG_UART_INTERRUPT_DRIVEN=y
    CONFIG_AT_HOST_LIBRARY=y
    
    # MQTT
    CONFIG_MQTT_LIB=y
    CONFIG_MQTT_LIB_TLS=n
    
    # Appliaction
    CONFIG_MQTT_PUB_TOPIC="algo2"
    CONFIG_MQTT_SUB_TOPIC="algo1"
    CONFIG_MQTT_CLIENT_ID="my-client-id"
    CONFIG_MQTT_BROKER_HOSTNAME="test.mosquitto.org"
    CONFIG_MQTT_BROKER_PORT=1883
    
    
    # ADC
    #CONFIG_ADC = y
    #CONFIG_ADC_0 = y
    #CONFIG_ADC_NRFX_SAADC = y
    
    # UART
    #CONFIG_UART_1_NRF_UARTE = y
    
    #CONFIG_UART_1 = y
    #CONFIG_AT_HOST_UART = 1
    
    
    # SPI
    CONFIG_SPI=y
    CONFIG_SPI_3=y
    CONFIG_SPI_3_NRF_SPIM=y
    CONFIG_SPI_1=y
    CONFIG_SPI_1_NRF_SPIM=y
    CONFIG_SPI_NRFX=y
    
    #CONFIG_SPI_ASYNC = n
    
    # IO
    CONFIG_GPIO=y
    
    # I2C
    CONFIG_I2C=y
    CONFIG_I2C_NRFX=y
    CONFIG_I2C_2=y
    CONFIG_I2C_2_NRF_TWIM=y
    CONFIG_I2C_INIT_PRIORITY=60
    
    
    
    CONFIG_MAIN_STACK_SIZE=4096
    
    	
    # Main thread
    CONFIG_MAIN_THREAD_PRIORITY=7
    CONFIG_MAIN_STACK_SIZE=4096
    
    CONFIG_HEAP_MEM_POOL_SIZE=2048
    
    
    
    #CONFIG_TRUSTED_EXECUTION_NONSECURE=y
    #CONFIG_PRINTK=y
    #CONFIG_CONSOLE=y
    #CONFIG_SERIAL=y
    #CONFIG_STDOUT_CONSOLE=y
    ##docs.zephyrproject.org/.../nordic_segger.html
    #CONFIG_UART_CONSOLE=n
    #CONFIG_RTT_CONSOLE=y
    #CONFIG_HAS_SEGGER_RTT=y
    #CONFIG_USE_SEGGER_RTT=y
    
    
    2018.main.c

  • When both spi;s slave are referenced I get an error 

     What do you mean by this? Are you trying to read/write to two slaves at the same time?

  • Hi.

    Both Spi slaves are referenced within an interrupt.

    One after another . There is no time collision.  See the afe49p00_inetrrupt

  • So when do you get the error? After the second interrupt?

Related