Hello,
my first Post here, so i hope i do it correctly.
I have the following Problem with the Configuration and Communication over TWI/I2C.

The Voltage of the TWI/I2C Bus is not 3.3V.
Reference Mesurment with a RPI and ESP32 for the same Sensor Hardware. I can say it's not a hardware fault.

I use as Hardwarebase the nRF52833-DK.
As Development runtime Zephyr with the nRF connect SDK V2.0.0 in Visual Studio Code.
As Test-Project to find the Problem, i use the follwing Code and Settings:
The used Overlay for I2C
&i2c0 {
compatible = "nordic,nrf-twim";
status = "okay";
pinctrl-0 = <&i2c0_default>;
pinctrl-1 = <&i2c0_sleep>;
pinctrl-names = "default", "sleep";
clock-frequency = <100000>;
/*adxl372@53 {
compatible = "adi,adxl372";
reg = <0x53>;
int1-gpios = <&gpio0 54 GPIO_ACTIVE_HIGH>;
label = "ADXL372";
};*/
/*pca9536@41 {
compatible = "ti,pca9536";
reg = <0x41>;
label = "PCA9536";
};
gyro_adc@40 {
compatible = "i2c-device";
reg = < 0x40 >;
label = "gyro";
};
bq35100@55 {
compatible = "i2c-device";
reg = < 0x55 >;
label = "bms";
};*/
};
and run it with this Project Configuration
CONFIG_STDOUT_CONSOLE=y CONFIG_PRINTK=y CONFIG_NEWLIB_LIBC=y CONFIG_CPLUSPLUS=y CONFIG_STD_CPP17=y CONFIG_LIB_CPLUSPLUS=y #CONFIG_RTTI=y CONFIG_THREAD_ANALYZER=y CONFIG_DEBUG=y CONFIG_NEWLIB_LIBC_MIN_REQUIRED_HEAP_SIZE=2048 CONFIG_I2C=y CONFIG_I2C_NRFX=y CONFIG_I2C_GPIO=y CONFIG_NRFX_TWI0=y
Source-Code (main.cpp):
/*
* Copyright (c) 2015 Intel Corporation
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr.h>
#include <sys/printk.h>
#include <device.h>
#include <devicetree.h>
#include <drivers/gpio.h>
#include <drivers/i2c.h>
#define FRAM_I2C_ADDR 41
#define MY_TWIM DT_NODELABEL(i2c0)
void main(void)
{
const struct device *i2c_dev = DEVICE_DT_GET(DT_NODELABEL(i2c0));
uint8_t cmp_data[16];
uint8_t data[16];
uint8_t w_data[16];
uint8_t r_data[16];
int i, ret;
int rc1, rc2, rc3, rc4;
rc1 = rc2 = rc3 = rc4 = -999;
//Initalisierung Speicehr Bereiche
for (i = 0; i < 16; ++i)
{ data[i] = w_data[i] = r_data[i] = 0; }
while (1)
{
if (!device_is_ready(i2c_dev))
{ printk("I2C: Device is not ready.\n"); return; }
else
{ printk("I2C: is ready.\n"); break; }
}
uint32_t dev_config = I2C_SPEED_SET(I2C_SPEED_STANDARD) | I2C_MODE_MASTER;
if (i2c_configure(i2c_dev, dev_config))
{ printk("Configure Fault\n"); }
else
{
printk("Configure Done\n");
/*printk("I2C Master: Slave ADDR: 0x%x SCL: %d, SDA: %d, CLK(Hz): %u\n\n",
DT_REG_ADDR(DT_NODELABEL(i2c_dev)),
DT_PROP(MY_TWIM, pinctrl-0),
DT_PROP(MY_TWIM, pinctrl-1),
DT_PROP(MY_TWIM, clock_frequency));*/
}
k_sleep(K_MSEC(1));
//Auslesen Config ist nicht Implementiert Fehler -88 ENOSYS
//uint32_t dev_config_tmp;
//rc1 = i2c_get_config(i2c_dev, &dev_config_tmp);
//if (rc1 != 0) {
// printk("I2C get_config failed\n");
//}
//if (dev_config != dev_config_tmp) {
// printk("I2C get_config returned invalid config\n");
//}
uint8_t reg_to_read = 3;
w_data[0] = reg_to_read;
uint8_t wr_addr[2];
/* FRAM address */
wr_addr[0] = reg_to_read;
wr_addr[1] = 0x00;
struct i2c_msg msgs[2];
/* Send the address to read from */
msgs[0].buf = wr_addr;
msgs[0].len = 2U;
msgs[0].flags = I2C_MSG_WRITE;
/* Read from device. STOP after this. */
msgs[1].buf = data;
msgs[1].len = 1;
msgs[1].flags = I2C_MSG_READ | I2C_MSG_STOP;
rc1 = i2c_write(i2c_dev, &wr_addr[0], 1, (uint16_t)FRAM_I2C_ADDR);
rc2 = i2c_read(i2c_dev, &data[0], 1, (uint16_t)FRAM_I2C_ADDR);
rc3 = i2c_write_read(i2c_dev, (uint16_t)FRAM_I2C_ADDR, &w_data[0], 1, &r_data[0], 1);
rc4 = i2c_transfer(i2c_dev, &msgs[0], 2, (uint16_t)FRAM_I2C_ADDR);
//read_byte(i2c_dev, 0x00, &data[0], FRAM_I2C_ADDR);
if (rc1 == 0 || rc2 == 0 || rc3 == 0 || rc4 == 0)
{
printk("all read. \n");
printk("Value write data: %d \n", w_data);
printk("Value read data: %d \n", r_data);
}
else
{ printk("read fault \n"); }
return;
}
NRF-Terminal Output:
Connected via Serial Port with settings COM3 115200 8n1 rtscts:off *** Booting Zephyr OS build v3.0.99-ncs1 *** I2C: is ready. Configure Done read fault *** Booting Zephyr OS build v3.0.99-ncs1 *** I2C: is ready. Configure Done read fault [00:00:09.736,724] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0 [00:00:09.736,938] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0 [00:00:09.737,121] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0 [00:00:09.737,304] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
The Project-Copy:
Thanks for Help




