problem with spi_transceive between 1.4.9 version to 1.9.0 version

Hello,

We use pin 4 to set our CHIP SELECT in order to perform spi_transceive.

We use the SPI protocol to "talk" between a microcontroller and the LSM6DSL component.

It is important to note that on software version 1.4.9 it works fine and when we put it on version 1.9.0 it does not work properly.

I tried to take from a link that I saw in this forum and put it in our code but it does not help.

https://github.com/sigurdnev/ncs-playground/tree/master/samples

The only difference that exists is between the two DTS files of the versions.

Attached DTS file of version 1.9.0 :

  • /*
     * Copyright (c) 2018-2020 Nordic Semiconductor ASA
     *
     * SPDX-License-Identifier: Apache-2.0
     */
    
    / {
    	model = "Nordic nRF9160 DK NRF9160";
    	compatible = "nordic,nrf9160-dk-nrf9160";
    
    	chosen {
    		zephyr,console = &uart0;
    		zephyr,shell-uart = &uart0;
    		zephyr,uart-mcumgr = &uart0;
    	};
    	
    	leds {
    		compatible = "gpio-leds";
    		led0: led_0 {
    			gpios = <&gpio0 2 0>;
    			label = "Green LED 1";
    		};
    		led1: led_1 {
    			gpios = <&gpio0 3 0>;
    			label = "Green LED 2";
    		};
    		led2: led_2 {
    			gpios = <&gpio0 2 0>;
    			label = "Green LED 3";
    		};
    		led3: led_3 {
    			gpios = <&gpio0 5 0>;
    			label = "Green LED 4";
    		};
    	};
    
    	pwmleds {
    		compatible = "pwm-leds";
    		pwm_led0: pwm_led_0 {
    			pwms = <&pwm0 12>;
    		};
    	};
    
    	buttons {
    		/*
    		 * Unlike most DK boards, we do not actually have 4 buttons
    		 * on nRF9160 DK. Instead, we have 2 buttons and 2 switches.
    		 * Treat the switches as buttons anyway, for convenience.
    		 * This makes life easier for software that wants to deal with
    		 * the usual "4 buttons per DK board" convention.
    		 */
    		compatible = "gpio-keys";
    		button0: button_0 {
    			gpios = <&gpio0 6 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
    			label = "Push button 1";
    		};
    		button1: button_1 {
    			gpios = <&gpio0 7 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
    			label = "Push button 2";
    		};
    		button2: button_2 {
    			gpios = <&gpio0 8 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
    			label = "Switch 1";
    		};
    		button3: button_3 {
    			gpios = <&gpio0 9 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
    			label = "Switch 2";
    		};
    	};
    
    	interface_to_nrf52840: gpio-interface {
    		compatible = "nordic,nrf9160dk-nrf52840-interface";
    		#gpio-cells = <2>;
    		gpio-map-mask = <0xf 0>;
    		gpio-map-pass-thru = <0 0xffffffff>;
    		gpio-map = <0 0 &gpio0 17 0>,
    			   <1 0 &gpio0 18 0>,
    			   <2 0 &gpio0 19 0>,
    			   <3 0 &gpio0 21 0>,
    			   <4 0 &gpio0 22 0>,
    			   <5 0 &gpio0 23 0>;
    			   /* 6: COEX0 */
    			   /* 7: COEX1 */
    			   /* 8: COEX2 */
    	};
    
    	nrf52840_reset: gpio-reset {
    		compatible = "nordic,nrf9160dk-nrf52840-reset";
    		status = "disabled";
    		/*
    		 * This line is specified as active high for compatibility
    		 * with the previously used Kconfig-based configuration.
    		 */
    		gpios = <&interface_to_nrf52840 5 GPIO_ACTIVE_HIGH>;
    	};
    
    	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 14 0>,	/* A0 */
    			   <1 0 &gpio0 15 0>,	/* A1 */
    			   <2 0 &gpio0 16 0>,	/* A2 */
    			   <3 0 &gpio0 17 0>,	/* A3 */
    			   <4 0 &gpio0 18 0>,	/* A4 */
    			   <5 0 &gpio0 19 0>,	/* A5 */
    			   <6 0 &gpio0 0 0>,	/* D0 */
    			   <7 0 &gpio0 1 0>,	/* D1 */
    			   <8 0 &gpio0 2 0>,	/* D2 */
    			   <9 0 &gpio0 3 0>,	/* D3 */
    			   /*<10 0 &gpio0 4 0>,*/   /* D4 */
    			   <11 0 &gpio0 5 0>,	/* D5 */
    			   <12 0 &gpio0 6 0>,	/* D6 */
    			   <13 0 &gpio0 7 0>,	/* D7 */
    			   <14 0 &gpio0 8 0>,	/* D8 */
    			   <15 0 &gpio0 9 0>,	/* D9 */
    			   <16 0 &gpio0 10 0>,	/* D10 */
    			   <17 0 &gpio0 11 0>,	/* D11 */
    			   <18 0 &gpio0 12 0>,	/* D12 */
    			   <19 0 &gpio0 13 0>,	/* D13 */
    			   <20 0 &gpio0 30 0>,	/* D14 */
    			   <21 0 &gpio0 31 0>;	/* D15 */
    	};
    /* Non-Secure image memory */
    	arduino_adc: analog-connector {
    		compatible = "arduino,uno-adc";
    		#io-channel-cells = <1>;
    		io-channel-map = <0 &adc 1>,	/* A0 = P0.14 = AIN1 */
    				 <1 &adc 2>,	/* A1 = P0.15 = AIN2 */
    				 <2 &adc 3>,	/* A2 = P0.16 = AIN3 */
    			   /*<3 &adc 4>,*/	/* A3 = P0.17 = AIN4 */
    				 <4 &adc 5>,	/* A4 = P0.18 = AIN5 */
    				 <5 &adc 6>;	/* A5 = P0.19 = AIN6 */
    	};
    
    	/* 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;
    	};
    };
    
    &adc {
    	status = "okay";
    };
    
    &gpiote {
    	status = "okay";
    };
    
    &gpio0 {
    	status = "okay";
    };
    
    &uart0 {
    	status = "okay";
    	current-speed = <115200>;
    	tx-pin = <29>;
    	rx-pin = <28>;
    	rx-pull-up;
    	rts-pin = <27>;
    	cts-pull-up;
    };
    
    arduino_serial: &uart1 {
    	status = "okay";
    	current-speed = <115200>;
    	tx-pin = <24>;
    	rx-pin = <23>;
    	rx-pull-up;
    	rts-pin = <14>;
    	cts-pin = <15>;
    	cts-pull-up;
    };
    
    &uart2 {
    	tx-pin = <24>;
    	rx-pin = <23>;
    };
    
    arduino_i2c: &i2c2 {
    	compatible = "nordic,nrf-twim";
    	status = "okay";
    	sda-pin = <30>;
    	scl-pin = <31>;
    };
    
    &pwm0 {
    	status = "okay";
    	ch0-pin = <12>;
    };
    
    &spi3 {
        status = "okay";
        compatible = "nordic,nrf-spim";
        sck-pin = <31>;
        mosi-pin = <9>;
        miso-pin = <30>;
    /* 	cs-gpios = <&gpio0 26 0>,<&gpio0 15 1>;
       cs-gpios = <&gpio0 26 GPIO_ACTIVE_LOW>,
    	           <&gpio0 15 GPIO_ACTIVE_LOW>;  */
    };
    
    &spi1 {
    	compatible = "nordic,nrf-spim";
    	clock-frequency = <0x80000000>;
    	status = "okay";
        sck-pin = <3>;
        mosi-pin = <8>;
        miso-pin = <5>;
        cs-gpios = <&gpio0 4 0>;  
    /*    cs-gpios = <&gpio0 4 1>;  */
    };
    
    &gpiote {   
    status = "okay";
       interrupts = <49 0>;
       interrupts = <49 0>;
    };
    
    &i2c2 {
    	compatible = "nordic,nrf-twim";
    	status = "okay";
    	sda-pin = <11>;
    	scl-pin = <10>;
    };
    
    &gpiote {   
    status = "okay";
       interrupts = <49 0>;
    };
    
    &timer0 {
    	status = "okay";
    };
    
    &timer1 {
    	status = "okay";
    };
    
    &timer2 {
    	status = "okay";
    };
    
    &flash0 {
    
    	partitions {
    		compatible = "fixed-partitions";
    		#address-cells = <1>;
    		#size-cells = <1>;
    
    		boot_partition: partition@0 {
    			label = "mcuboot";
    			reg = <0x00000000 0x10000>;
    		};
    		slot0_partition: partition@10000 {
    			label = "image-0";
    		};
    		slot0_ns_partition: partition@50000 {
    			label = "image-0-nonsecure";
    		};
    		slot1_partition: partition@80000 {
    			label = "image-1";
    		};
    		slot1_ns_partition: partition@c0000 {
    			label = "image-1-nonsecure";
    		};
    		scratch_partition: partition@f0000 {
    			label = "image-scratch";
    			reg = <0x000f0000 0xa000>;
    		};
    		storage_partition: partition@fa000 {
    			label = "storage";
    			reg = <0x000fa000 0x00006000>;
    		};
    	};
    };
    
    / {
    
    	reserved-memory {
    		#address-cells = <1>;
    		#size-cells = <1>;
    		ranges;
    
    		sram0_s: image_s@20000000 {
    			/* Secure image memory */
    		};
    
    		sram0_modem: image_modem@20016000 {
    			/* Modem (shared) memory */
    		};
    
    		sram0_ns: image_ns@20020000 {
    			/* Non-Secure image memory */
    		};
    	};
    };
    
    /* Include partition configuration file */
    #include "etrog_nrf9160_partition_conf.dts"
    

  • What is the log output you're seeing?

    Which SPI instance are you using?

    SPI1 and UART1 are both enabled in your dts, and these two are shared resources meaning that only one of them can be enabled simultaneously.

     

    Kind regards,

    Håkon

  • Thank you very much - the problem was solved.
    It is important for me to ask - why was there a conflict between the UART1 and the SPI1?
    Why can both not run together if they are defined on different pins?

  • Glad to hear that it worked out.

    Gal_S said:
    It is important for me to ask - why was there a conflict between the UART1 and the SPI1?

    Peripherals with shared instance (ie. same base address) cannot be used simultaneously, as described here:

    https://infocenter.nordicsemi.com/topic/ps_nrf9160/peripheral_interface.html?cp=2_0_0_2_1_1#concept_shared_id

    Here's the instantiation list:

    https://infocenter.nordicsemi.com/topic/ps_nrf9160/memory.html?cp=2_0_0_3_1_1#topic

     

    Kind regards,

    Håkon

Related