This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

[Solved] SPI: Not getting SCK signal

Solved: Well, turns out delay and SCK doesnt work well together haha. I imagined the sck signal to be a background thread of some sort. I was wrong.

Hi guys,

at the moment im trying to setup a SPI connection between an ADC and my nrf52832. Sadly i have some problems so i started from the beginning again and used the SPI master configuration code coming with the examples:

(sorry for the formating)

/* Copyright (c) 2015 Nordic Semiconductor. All Rights Reserved. *

  • The information contained herein is property of Nordic Semiconductor ASA.
  • Terms and conditions of usage are described in detail in NORDIC * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT. * * Licensees are granted free, non-transferable use of the information. NO * WARRANTY of ANY KIND is provided. This heading must NOT be removed from * the file. * */

#include "nrf_drv_spi.h" #include "app_util_platform.h" #include "nrf_gpio.h" #include "nrf_delay.h" #include "boards.h" #include "app_error.h" #include <string.h> #define NRF_LOG_MODULE_NAME "APP" #include "nrf_log.h" #include "nrf_log_ctrl.h"

#define SPI_INSTANCE 0 /< SPI instance index. */ static const nrf_drv_spi_t spi = NRF_DRV_SPI_INSTANCE(SPI_INSTANCE); /< SPI instance. */ static volatile bool spi_xfer_done; /**< Flag used to indicate that SPI instance completed the transfer. */

#define TEST_STRING "Nordic" static uint8_t m_tx_buf[] = TEST_STRING; /< TX buffer. */ static uint8_t m_rx_buf[sizeof(TEST_STRING) + 1];
/
< RX buffer. */ static const uint8_t m_length = sizeof(m_tx_buf);
/**< Transfer length. */

/** * @brief SPI user event handler.

  • @param event */ void spi_event_handler(nrf_drv_spi_evt_t const * p_event) { spi_xfer_done = true; NRF_LOG_INFO("Transfer completed.\r\n"); if (m_rx_buf[0] != 0) { NRF_LOG_INFO(" Received: \r\n"); NRF_LOG_HEXDUMP_INFO(m_rx_buf, strlen((const char *)m_rx_buf)); } }

int main(void) { bsp_board_leds_init();

APP_ERROR_CHECK(NRF_LOG_INIT(NULL));

NRF_LOG_INFO("SPI example\r\n");

nrf_drv_spi_config_t spi_config = NRF_DRV_SPI_DEFAULT_CONFIG;
spi_config.ss_pin   = SPI_SS_PIN; //29
spi_config.miso_pin = SPI_MISO_PIN; // 28
spi_config.mosi_pin = SPI_MOSI_PIN;// 4
spi_config.sck_pin  = SPI_SCK_PIN; // 3 		spi_config.frequency =

NRF_SPI_FREQ_125K; APP_ERROR_CHECK(nrf_drv_spi_init(&spi, &spi_config, spi_event_handler));

while (1)
{
    // Reset rx buffer and transfer done flag
    memset(m_rx_buf, 0, m_length);
    spi_xfer_done = false;

    APP_ERROR_CHECK(nrf_drv_spi_transfer(&spi,

m_tx_buf, m_length, m_rx_buf, m_length));

    while (!spi_xfer_done)
    {
        __WFE();
    }

    NRF_LOG_FLUSH();

    bsp_board_led_invert(BSP_BOARD_LED_0);
    nrf_delay_ms(200);
  		SEGGER_RTT_printf(0, "Read: %s\n", m_rx_buf);
} }

Sadly when i measure the SCK signal i do not get any signal (no matter which resolution i chose), see attachment for my measurement.spi_osci.jpg

Despite that the transmission works and when i use the RTT Viewer it shows the "Nordic" message just fine.

What is wrong with my code? Why am I not getting a proper SCK signal?

Thank you :)

Related