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

How to implement I2C on nRF9160?

I have tried to use I2C but it does't work out. nRF9160 doesn't start booting after executing "build and run" and pushing the reset button.

I open secure_boot project first and build and run. Then I open this project.

build and run is successful.

 Any help?

OS: macOS Mojave

<prf.conf>
CONFIG_TRUSTED_EXECUTION_NONSECURE=y

CONFIG_SERIAL=y
CONFIG_UART_INTERRUPT_DRIVEN=y
CONFIG_UART_1_NRF_UARTE=y

CONFIG_I2C=y
CONFIG_I2C_NRFX=y
CONFIG_I2C_0=y
CONFIG_I2C_0_NRF_TWI=y
CONFIG_I2C_INIT_PRIORITY=60

<nrf9160_pca10090.dts>
...
	chosen {
		zephyr,console = &uart0;
        zephyr,debug = &uart1;
        zephyr,i2c-accel = &i2c0;
		zephyr,sram = &sram0;
		zephyr,flash = &flash0;
	};
...

&i2c0 {
	status = "ok";
	sda-pin = <10>;
	scl-pin = <11>;
	clock-frequency = <100000>; 
};

<main.c>
#include <nrf9160.h>
#include <zephyr.h>
#include <misc/printk.h>
#include <i2c.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>

#define I2C_ACCEL_WRITE_ADDR 0x32
#define I2C_ACCEL_READ_ADDR 0x33

struct device * i2c_accel;
uint8_t WhoAmI = 0u;

uint8_t init_accelerometer(){
        i2c_accel = device_get_binding("I2C_0");
        if (!i2c_accel) {
		printk("error\r\n");
                return -1;
	} else  {
                i2c_configure(i2c_accel, I2C_SPEED_SET(I2C_SPEED_STANDARD));
                return 0;
        }
}

void main(void)
{
        printk("Hello, World!\r\n");
        init_accelerometer();

	while (1) {
                printk("loop head\r\n");

                if (i2c_reg_read_byte(i2c_accel, I2C_ACCEL_READ_ADDR, 0x0F, WhoAmI) != 0) {
                        printk("Error on i2c_read()\n");
                }
                printk("WhoAmI = %u\r\n", WhoAmI);
                printk("enter sleep\r\n");
                k_sleep(1000);
	}
}

<when pushing the reset button SW2>
...
Secure Boot: SPU: set SRAM region 12 as Non-Secure
Secure Boot: SPU: set SRAM region 13 as Non-Secure
Secure Boot: SPU: set SRAM region 14 as Non-Secure
Secure Boot: SPU: set SRAM region 15 as Non-Secure
Secure Boot: SPU: set SRAM region 16 as Non-Secure
Secure Boot: SPU: set SRAM region 17 as Non-Secure
Secure Boot: SPU: set SRAM region 18 as Non-Secure
Secure Boot: SPU: set SRAM region 19 as Non-Secure
Secure Boot: SPU: set SRAM region 20 as Non-Secure
Secure Boot: SPU: set SRAM region 21 as Non-Secure
Secure Boot: SPU: set SRAM region 22 as Non-Secure
Secure Boot: SPU: set SRAM region 23 as Non-Secure
Secure Boot: SPU: set SRAM region 24 as Non-Secure
Secure Boot: SPU: set SRAM region 25 as Non-Secure
Secure Boot: SPU: set SRAM region 26 as Non-Secure
Secure Boot: SPU: set SRAM region 27 as Non-Secure
Secure Boot: SPU: set SRAM region 28 as Non-Secure
Secure Boot: SPU: set SRAM region 29 as Non-Secure
Secure Boot: SPU: set SRAM region 30 as Non-Secure
Secure Boot: SPU: set SRAM region 31 as Non-Secure
Secure Boot: configure peripherals
Secure Boot: MSP_NS 200205d0
Secure Boot: prepare to jump to Non-Secure image
// the device doesn't start booting

Parents Reply Children
Related