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

Basic SPI reads and writes

Hi,

I have a SPI peripheral connected to the nRF960 DK. In order to access this correctly, I need to be able to write a byte to a specific address first and then read back from specific addresses. 

I can run the basic SPI example

https://github.com/Rallare/fw-nrfconnect-nrf/tree/nrf9160_samples/samples/nrf9160/spi

which carries out a basic loop back. This all works fine but I can't see how to write a specific byte to a specific address or read a specific address.

So, ideally I would like to write 0xD2 to address 0x80, wait 1 second and then read data from address 0x00.

Can you point me to a simple example please?

Ta,
Rod

Parents
  • Hello Rod, 

    The SPI example you are using is the only one we have at the moment. The example is using the built-in SPI functions of the Zephyr project, perhaps you are able to find what you are looking for in the Zephyr samples? Also, have a look at the Zephyr SPI API and the SPI header file.

    Ref. similar answer given by my colleague Jan Tore here

    Kind regards,
    Øyvind

  • Hi Øyvind,

    I went back to the reply from Jan Tore on the ticket here. I realised that the BME280 has both an I2C and an SPI interface. So, I thought if I can get this sensor working over SPI and I can then try and migrate it to my own SPI sensor.

    I have successfully connected and ran the BME280 sensor over I2C. I am now trying to access this over SPI. 

    Im using the sample given here, 

    https://github.com/zephyrproject-rtos/zephyr/blob/master/samples/sensor/bme280/src/main.c

    I have set up SPI in my overlay file as suggested by Jan in the other ticket.

    /*
     *
     * Copyright (c) 2018 Linaro Limited
     *
     * SPDX-License-Identifier: Apache-2.0
     */
    
    
    &i2c2 {
            status = "ok";
            sda-pin = <1>;
            scl-pin = <0>;
            clock-frequency = <I2C_BITRATE_FAST>;
            };
    
    &spi3 {
            status = "ok";
    	sck-pin = <10>;
    	mosi-pin = <11>;
    	miso-pin = <12>;
    	ss-pin = <13>;
    	spi-max-frequency = <8000000>;
    	bme280@0 {
    		compatible = "bosch,bme280";
    		reg = <0>;
    		spi-max-frequency = <8000000>;
    		label = "BME280";
    	};
    
    };
    

    and also I have enabled SPI in my conf file

    CONFIG_CONSOLE_SUBSYS=y
    CONFIG_CONSOLE_GETCHAR=y
    CONFIG_GPIO=y
    CONFIG_STDOUT_CONSOLE=y
    
    CONFIG_SERIAL=y
    CONFIG_STDOUT_CONSOLE=y
    CONFIG_UART_INTERRUPT_DRIVEN=y
    CONFIG_TEST_RANDOM_GENERATOR=y
    
    CONFIG_I2C=y
    CONFIG_SENSOR=y
    
    CONFIG_NET_BUF_USER_DATA_SIZE=1
    
    CONFIG_LOG=n
    CONFIG_LOG_DEFAULT_LEVEL=4
    CONFIG_HEAP_MEM_POOL_SIZE=1024
    CONFIG_MAIN_STACK_SIZE=4096
    CONFIG_NEWLIB_LIBC=y
    
    # SPI
    CONFIG_SPI=y
    CONFIG_SPI_3=y
    CONFIG_SPI_3_NRF_SPIM=y
    CONFIG_BME280=y
    CONFIG_SPI_NRFX=y

    However, I get an error

    Secure Boot: MSP_NS 200216b0

    Secure Boot: prepare to jump to Non-Secure image

    ***** Booting Zephyr OS v1.13.99-ncs1-5561-gde69d2df908f *****

    Exception occurred in Secure State

    ***** HARD FAULT *****

      Fault escalation (see below)

    ***** BUS FAULT *****

      Precise data bus error

      BFAR Address: 0x50008120

    ***** Hardware exception *****

    Current thread ID = 0x20020154

    Faulting instruction address = 0x41f98

    Fatal fault in ISR! Spinning...

    Any thoughts?

  • The code doesn't build when I remove the SPI references, so her his may conf and overlay just now

    &spi3 {
            status = "ok";
    	sck-pin = <10>;
    	mosi-pin = <11>;
    	miso-pin = <12>;
    	ss-pin = <13>;
    	spi-max-frequency = <8000000>;
    	bme280@76 {
    		compatible = "bosch,bme280";
    		reg = <0x76>;
    		spi-max-frequency = <8000000>;
    		label = "BME280";
    	};
    
    };

    CONFIG_CONSOLE_SUBSYS=y
    CONFIG_CONSOLE_GETCHAR=y
    CONFIG_GPIO=y
    CONFIG_STDOUT_CONSOLE=y
    
    CONFIG_SERIAL=y
    CONFIG_STDOUT_CONSOLE=y
    CONFIG_UART_INTERRUPT_DRIVEN=y
    CONFIG_TEST_RANDOM_GENERATOR=y
    
    CONFIG_SENSOR=y
    
    CONFIG_NET_BUF_USER_DATA_SIZE=1
    
    CONFIG_LOG=n
    CONFIG_LOG_DEFAULT_LEVEL=4
    CONFIG_HEAP_MEM_POOL_SIZE=1024
    CONFIG_MAIN_STACK_SIZE=4096
    CONFIG_NEWLIB_LIBC=y
    
    # SPI
    CONFIG_SPI=y
    CONFIG_SPI_3=y
    CONFIG_SPI_3_NRF_SPIM=y
    CONFIG_BME280=y
    CONFIG_SPI_NRFX=y
    

    The current error

    Secure Boot: MSP_NS 20021680
    Secure Boot: prepare to jump to Non-Secure image
    ***** Booting Zephyr OS v1.13.99-ncs1-5561-gde69d2df908f *****
    Exception occurred in Secure State
    ***** HARD FAULT *****
      Fault escalation (see below)
    ***** BUS FAULT *****
      Precise data bus error
      BFAR Address: 0x50008120
    ***** Hardware exception *****
    Current thread ID = 0x20020120
    Faulting instruction address = 0x41f98
    Fatal fault in ISR! Spinning...
    

  • From the log, you are running master branch from March 27. Can you please do the following:

    cd ncs/nrf
    git checkout c1939d963fe2c18013ffb8de0bd8f6fc1d91724d
    git checkout -b <choose_branch_name>
    west update 

    There is continuous work ongoing on the master branch and is better to ensure have the latest stable version. 

    See this thread as well.

    Then try to load the latest Secure Boot, now called SPM, and your application.

  • Hi Øyvind,

    Ok, I have tried this but with no luck. I have updated my code as detailed above.

    I then tried to build the SPM code but am getting errors

    Watts-MacBook-Pro:build Watt$ pwd
    /Users/Watt/zephyrproject/ncs/nrf/samples/nrf9160/spm/build
    Watts-MacBook-Pro:build Watt$ cmake -GNinja -DBOARD=nrf9160_pca10090 ..
    Zephyr version: 1.14.0
    -- Selected BOARD nrf9160_pca10090
    -- Found west: /usr/local/bin/west (found suitable version "0.5.7", minimum required is "0.5.4")
    -- Loading /Users/Watt/zephyrproject/ncs/zephyr/boards/arm/nrf9160_pca10090/nrf9160_pca10090.dts as base
    -- Overlaying /Users/Watt/zephyrproject/ncs/zephyr/dts/common/common.dts
    -- Overlaying /Users/Watt/zephyrproject/ncs/nrf/samples/nrf9160/spm/nrf9160_pca10090.overlay
    nrf9160_pca10090.dts.pre.tmp:114.18-120.3: Warning (unique_unit_address_if_enabled): /soc/peripheral@50000000/uart@a000: duplicate unit-address (also used in node /soc/peripheral@50000000/i2c@a000)
      also defined at nrf9160_pca10090.dts.pre.tmp:504.8-511.3
    nrf9160_pca10090.dts.pre.tmp:254.19-260.3: Warning (unique_unit_address_if_enabled): /soc/peripheral@50000000/clock@5000: duplicate unit-address (also used in node /soc/peripheral@50000000/power@5000)
    Parsing Kconfig tree in /Users/Watt/zephyrproject/ncs/zephyr/Kconfig
    Loading /Users/Watt/zephyrproject/ncs/zephyr/boards/arm/nrf9160_pca10090/nrf9160_pca10090_defconfig as base
    Merging /Users/Watt/zephyrproject/ncs/nrf/samples/nrf9160/spm/prj.conf
    
    /Users/Watt/zephyrproject/ncs/nrf/samples/nrf9160/spm/prj.conf:2: warning: attempt to assign the value 'y' to the undefined symbol SPM
    
    Error: Aborting due to non-whitelisted Kconfig warning
    '/Users/Watt/zephyrproject/ncs/nrf/samples/nrf9160/spm/prj.conf:2: warning: attempt to assign the
    value 'y' to the undefined symbol SPM'. Note: If this warning doesn't point to an actual problem,
    you can add it to the whitelist at the top of
    /Users/Watt/zephyrproject/ncs/zephyr/scripts/kconfig/kconfig.py.
    
    CMake Error at /Users/Watt/zephyrproject/ncs/zephyr/cmake/kconfig.cmake:191 (message):
      command failed with return code: 1
    Call Stack (most recent call first):
      /Users/Watt/zephyrproject/ncs/zephyr/cmake/app/boilerplate.cmake:397 (include)
      CMakeLists.txt:3 (include)
    
    
    -- Configuring incomplete, errors occurred!
    Watts-MacBook-Pro:build Watt$ 
    

  • Next week, week 15 will have less staffing due to Easter Holiday. You may expect a delayed answer from the support team.


    Hi Rod,

    When you followed my instructions regarding git checkout and west update, did you get any errors or warnings there?


  • Hiya,

    This is what I am seeing.

    Watts-MacBook-Pro:nrf Watt$ pwd
    /Users/Watt/zephyrproject/ncs/nrf
    Watts-MacBook-Pro:nrf Watt$ git checkout c1939d963fe2c18013ffb8de0bd8f6fc1d91724d
    warning: refname 'c1939d963fe2c18013ffb8de0bd8f6fc1d91724d' is ambiguous.
    Git normally never creates a ref that ends with 40 hex characters
    because it will be ignored when you just specify 40-hex. These refs
    may be created by mistake. For example,
    
      git checkout -b $br $(git rev-parse ...)
    
    where "$br" is somehow empty and a 40-hex ref is created. Please
    examine these refs and maybe delete them. Turn this message off by
    running "git config advice.objectNameWarning false"
    Switched to branch 'c1939d963fe2c18013ffb8de0bd8f6fc1d91724d'

    Watts-MacBook-Pro:nrf Watt$ git checkout -b test_branch
    Switched to a new branch 'test_branch'
    Watts-MacBook-Pro:nrf Watt$ west update
    === self-updating west:
    --- west: fetching changes
    From https://github.com/zephyrproject-rtos/west
     * tag               v0.5.7     -> FETCH_HEAD
    --- west: checked out 5113fecc09399226010beb508f1b66d9f60856af as detached HEAD
    === updating net-tools (net-tools):
    --- net-tools: fetching changes
    --- net-tools: checked out 30b7efa827b04d2e47840716b0372737fe7d6c92 as detached HEAD
    === updating tinycbor (modules/lib/tinycbor):
    --- tinycbor: fetching changes
    --- tinycbor: checked out 111f7a215cc4efa49fd03a7835719adca83b4388 as detached HEAD
    Watts-MacBook-Pro:nrf Watt$ 
    

    finally try to build spm

    Watts-MacBook-Pro:build Watt$ pwd
    /Users/Watt/zephyrproject/ncs/nrf/samples/nrf9160/spm/build
    Watts-MacBook-Pro:build Watt$ cmake -GNinja -DBOARD=nrf9160_pca10090 ..
    Zephyr version: 1.14.0
    -- Selected BOARD nrf9160_pca10090
    -- Found west: /usr/local/bin/west (found suitable version "0.5.7", minimum required is "0.5.4")
    -- Loading /Users/Watt/zephyrproject/ncs/zephyr/boards/arm/nrf9160_pca10090/nrf9160_pca10090.dts as base
    -- Overlaying /Users/Watt/zephyrproject/ncs/zephyr/dts/common/common.dts
    -- Overlaying /Users/Watt/zephyrproject/ncs/nrf/samples/nrf9160/spm/nrf9160_pca10090.overlay
    nrf9160_pca10090.dts.pre.tmp:114.18-120.3: Warning (unique_unit_address_if_enabled): /soc/peripheral@50000000/uart@a000: duplicate unit-address (also used in node /soc/peripheral@50000000/i2c@a000)
      also defined at nrf9160_pca10090.dts.pre.tmp:504.8-511.3
    nrf9160_pca10090.dts.pre.tmp:254.19-260.3: Warning (unique_unit_address_if_enabled): /soc/peripheral@50000000/clock@5000: duplicate unit-address (also used in node /soc/peripheral@50000000/power@5000)
    Parsing Kconfig tree in /Users/Watt/zephyrproject/ncs/zephyr/Kconfig
    Loading /Users/Watt/zephyrproject/ncs/zephyr/boards/arm/nrf9160_pca10090/nrf9160_pca10090_defconfig as base
    Merging /Users/Watt/zephyrproject/ncs/nrf/samples/nrf9160/spm/prj.conf
    
    /Users/Watt/zephyrproject/ncs/nrf/samples/nrf9160/spm/prj.conf:2: warning: attempt to assign the value 'y' to the undefined symbol SPM
    
    Error: Aborting due to non-whitelisted Kconfig warning
    '/Users/Watt/zephyrproject/ncs/nrf/samples/nrf9160/spm/prj.conf:2: warning: attempt to assign the
    value 'y' to the undefined symbol SPM'. Note: If this warning doesn't point to an actual problem,
    you can add it to the whitelist at the top of
    /Users/Watt/zephyrproject/ncs/zephyr/scripts/kconfig/kconfig.py.
    
    CMake Error at /Users/Watt/zephyrproject/ncs/zephyr/cmake/kconfig.cmake:191 (message):
      command failed with return code: 1
    Call Stack (most recent call first):
      /Users/Watt/zephyrproject/ncs/zephyr/cmake/app/boilerplate.cmake:397 (include)
      CMakeLists.txt:3 (include)
    
    
    -- Configuring incomplete, errors occurred!
    Watts-MacBook-Pro:build Watt$ 
    

Reply
  • Hiya,

    This is what I am seeing.

    Watts-MacBook-Pro:nrf Watt$ pwd
    /Users/Watt/zephyrproject/ncs/nrf
    Watts-MacBook-Pro:nrf Watt$ git checkout c1939d963fe2c18013ffb8de0bd8f6fc1d91724d
    warning: refname 'c1939d963fe2c18013ffb8de0bd8f6fc1d91724d' is ambiguous.
    Git normally never creates a ref that ends with 40 hex characters
    because it will be ignored when you just specify 40-hex. These refs
    may be created by mistake. For example,
    
      git checkout -b $br $(git rev-parse ...)
    
    where "$br" is somehow empty and a 40-hex ref is created. Please
    examine these refs and maybe delete them. Turn this message off by
    running "git config advice.objectNameWarning false"
    Switched to branch 'c1939d963fe2c18013ffb8de0bd8f6fc1d91724d'

    Watts-MacBook-Pro:nrf Watt$ git checkout -b test_branch
    Switched to a new branch 'test_branch'
    Watts-MacBook-Pro:nrf Watt$ west update
    === self-updating west:
    --- west: fetching changes
    From https://github.com/zephyrproject-rtos/west
     * tag               v0.5.7     -> FETCH_HEAD
    --- west: checked out 5113fecc09399226010beb508f1b66d9f60856af as detached HEAD
    === updating net-tools (net-tools):
    --- net-tools: fetching changes
    --- net-tools: checked out 30b7efa827b04d2e47840716b0372737fe7d6c92 as detached HEAD
    === updating tinycbor (modules/lib/tinycbor):
    --- tinycbor: fetching changes
    --- tinycbor: checked out 111f7a215cc4efa49fd03a7835719adca83b4388 as detached HEAD
    Watts-MacBook-Pro:nrf Watt$ 
    

    finally try to build spm

    Watts-MacBook-Pro:build Watt$ pwd
    /Users/Watt/zephyrproject/ncs/nrf/samples/nrf9160/spm/build
    Watts-MacBook-Pro:build Watt$ cmake -GNinja -DBOARD=nrf9160_pca10090 ..
    Zephyr version: 1.14.0
    -- Selected BOARD nrf9160_pca10090
    -- Found west: /usr/local/bin/west (found suitable version "0.5.7", minimum required is "0.5.4")
    -- Loading /Users/Watt/zephyrproject/ncs/zephyr/boards/arm/nrf9160_pca10090/nrf9160_pca10090.dts as base
    -- Overlaying /Users/Watt/zephyrproject/ncs/zephyr/dts/common/common.dts
    -- Overlaying /Users/Watt/zephyrproject/ncs/nrf/samples/nrf9160/spm/nrf9160_pca10090.overlay
    nrf9160_pca10090.dts.pre.tmp:114.18-120.3: Warning (unique_unit_address_if_enabled): /soc/peripheral@50000000/uart@a000: duplicate unit-address (also used in node /soc/peripheral@50000000/i2c@a000)
      also defined at nrf9160_pca10090.dts.pre.tmp:504.8-511.3
    nrf9160_pca10090.dts.pre.tmp:254.19-260.3: Warning (unique_unit_address_if_enabled): /soc/peripheral@50000000/clock@5000: duplicate unit-address (also used in node /soc/peripheral@50000000/power@5000)
    Parsing Kconfig tree in /Users/Watt/zephyrproject/ncs/zephyr/Kconfig
    Loading /Users/Watt/zephyrproject/ncs/zephyr/boards/arm/nrf9160_pca10090/nrf9160_pca10090_defconfig as base
    Merging /Users/Watt/zephyrproject/ncs/nrf/samples/nrf9160/spm/prj.conf
    
    /Users/Watt/zephyrproject/ncs/nrf/samples/nrf9160/spm/prj.conf:2: warning: attempt to assign the value 'y' to the undefined symbol SPM
    
    Error: Aborting due to non-whitelisted Kconfig warning
    '/Users/Watt/zephyrproject/ncs/nrf/samples/nrf9160/spm/prj.conf:2: warning: attempt to assign the
    value 'y' to the undefined symbol SPM'. Note: If this warning doesn't point to an actual problem,
    you can add it to the whitelist at the top of
    /Users/Watt/zephyrproject/ncs/zephyr/scripts/kconfig/kconfig.py.
    
    CMake Error at /Users/Watt/zephyrproject/ncs/zephyr/cmake/kconfig.cmake:191 (message):
      command failed with return code: 1
    Call Stack (most recent call first):
      /Users/Watt/zephyrproject/ncs/zephyr/cmake/app/boilerplate.cmake:397 (include)
      CMakeLists.txt:3 (include)
    
    
    -- Configuring incomplete, errors occurred!
    Watts-MacBook-Pro:build Watt$ 
    

Children
No Data
Related