与BOSH BMI270 IMU的I2C接口

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
7 posts / 0 new
最后一篇
瘸子
离线
最后一次露面:5 months 3 weeks ago
加入:2018-11-18 04:54
与BOSH BMI270 IMU的I2C接口

Hello Team Dialog,

我一直在努力通过I2C接口设置BMI270。BOSH BMI 270 IMU提供了可以从中重试的API

https://github.com/boschsensortec/bmi270-sensor-api.

对于DA14585,我遵循了I2C_EEPROM项目指令。如果可以用例子说明以下功能的样本,我将非常理解。

Best Regards

* @brief函数通过i2c总线编写传感器的寄存器。
*
* @param [in] i2c_addr:传感器I2C地址。
* @param [in] reg_addr:注册地址。
* @param [in] reg_data:指向要写入值的数据缓冲区。
*@param[in] length : No of bytes to write.
*
* @return执行状态
* @retval 0 - >成功
* @retval> 0 - >失败信息
*
* /
int8_t i2c_reg_write(uint8_t i2c_addr, uint8_t reg_addr, const uint8_t *reg_data, uint16_t length)
{

/ *使用i2c写入寄存器。返回0以成功执行。* /
返回0;
}

/ *!
*@brief Function for reading the sensor's registers through I2C bus.
*
* @param [in] i2c_addr:传感器I2C地址。
* @param [in] reg_addr:注册地址。
* @param [out] reg_data:指向数据缓冲区以存储读取数据。
* @param [in]长度:读取的no字节。
*
* @return执行状态
* @retval 0 - >成功
* @retval> 0 - >失败信息
*
* /
INT8_T I2C_REG_READ(UINT8_T I2C_ADDR,UINT8_T REG_ADDR,UINT8_T * REG_DATA,UINT16_T长度)
{

/* Read from registers using I2C. Return 0 for a successful execution. */
返回0;
}

设备:
im_dialog.
离线
最后一次露面:4天8小时前
加入:2016-12-06 22:25
Hi cripsly,

Hi cripsly,

We have recently published an example that shows how to interface with the Bosch BMP388:

https://www.dialog-seminile.com/sites/default/files/da14531_ble_pre ...

此示例适用于DA14531,但DA14585共享相同的SDK,因此示例应该为您提供您正在寻找的API示例。

最好的祝福

im_dialog.

瘸子
离线
最后一次露面:5 months 3 weeks ago
加入:2018-11-18 04:54
I used the suggested API i2c

我使用了BMP388项目的建议API I2C功能。但是,我没有在I2C总线上获得任何总线交易。请告诉我我可能做错了什么。
提前致谢。

Int8_t i2c_init(void)

{

GPIO_ConfigurePin(I2C_GPIO_PORT, I2C_SCL_PIN, INPUT, PID_I2C_SCL, false);
GPIO_ConfigurePin(I2C_GPIO_PORT, I2C_SDA_PIN, INPUT, PID_I2C_SDA, false);
setBits16(CLK_16M_REG,XTAL16_BIAS_SH_ENABLE,1);


cfg - > clock_cfg。ss_hcnt = I2C_SS_SCL_HCNT_REG;
cfg-> clock_cfg.ss_lcnt = i2c_ss_scl_lcnt_reg;
cfg-> clock_cfg.fs_hcnt = i2c_fs_scl_hcnt_reg;
cfg-> clock_cfg.fs_lcnt = i2c_fs_scl_lcnt_reg;

cfg-> speed = i2c_speed_fast;
cfg-> mode = i2c_mode_master;
cfg->addr_mode = I2C_ADDRESSING_7B;
cfg->地址= 0x68;
cfg-> tx_fifo_level = cfg-> rx_fifo_level = 32;

global_int_disable();

//Enable i2c clock to R/W i2c registers
i2c_set_clock_status(i2c_clock_enable);

// Enable interrupts
global_int_restore();

i2c_set_controller_status(I2C_CONTROLLER_DISABLE);
while(i2c_get_controller_status()!= i2c_controller_disable);

i2c_set_int_mask(0x0000);

// SCL时钟设置
setword16(&i2c-> i2c_ss_scl_hcnt_regf,cfg-> clock_cfg.ss_hcnt);
setword16(&i2c-> i2c_ss_scl_lcnt_regf,cfg-> clock_cfg.ss_lcnt);

setword16(&i2c-> i2c_fs_scl_hcnt_regf,cfg-> clock_cfg.fs_hcnt);
setword16(&i2c-> i2c_fs_scl_lcnt_regf,cfg-> clock_cfg.fs_lcnt);

// Set speed mode
// setBits16(&i2c-> i2c_con_regf,i2c_speed,cfg->速度);
SetBits16(&i2c->I2C_CON_REGF, I2C_SPEED, I2C_SPEED_FAST);

//设置FIFO级别
ASSERT_WARNING(32 != 0);
ASSERT_WARNING(32 != 0);
setBits16(&i2c-> i2c_tx_tl_regf,rx_tl,32- 1);
setBits16(&i2c-> i2c_rx_tl_regf,rx_tl,32 - 1);

//设置i2c master
i2c_setup_master(i2c_restart_enable,i2c_addressing_7b,0x68);

i2c_set_controller_status(i2c_controller_enable);
//启用或禁用控制器时有两个IC_CLK延迟
while ((i2c_get_controller_status() != I2C_CONTROLLER_ENABLE));

//将I2C中断的优先级设置为级别2
NVIC_SetPriority(I2C_IRQn, 2);
//启用I2C中断
nvic_enableirq(i2c_irqn);
/ *根据目标机器实现I2C总线初始化。* /
返回0;
}

INT8_T REG_WRITE(UINT8_T REG_ADDR,CONSS UINT8_T * REG_DATA,UINT32_T长度,VOID * INTF_PTR)
{

/ *使用i2c写入寄存器。返回0以成功执行。* /

int ret = 0;
uint16_t bytes_written;
i2c_abort_t abrt_code;

UINT32_T标志= I2C_F_NONE;

/ *总线上的每个I2C设备都有一个唯一的地址,在我们沟通之前设置为* /

set_dev_addr(reg_addr);

/* Perform blocking write */
yytes_written = i2c_master_transmit_buffer_sync(reg_data,length,hight_code,flags);

if((i2c_abort_none!= = abrt_code)||(bytes_written!= length)){
ret = -1;
}
返回Ret;
}

int8_t i2c_reg_read(uint8_t reg_addr, uint8_t *reg_data, uint32_t length, void *intf_ptr)
{
int ret = 0;
uint16_t bytes_read;
i2c_abort_t abrt_code;
UINT32_T标志= I2C_F_NONE;

set_dev_addr(reg_addr);

bytes_read = i2c_master_receive_buffer_sync(reg_data,length,&abrt_code,flags);

if((abrt_code!= i2c_abort_none)||(bytes_read!= length)){
ret = -1;
}

返回Ret;
}

瘸子
离线
最后一次露面:5 months 3 weeks ago
加入:2018-11-18 04:54
I used the suggested API i2c

我使用了BMP388项目的建议API I2C功能。但是,我没有在I2C总线上获得任何总线交易。请告诉我我可能做错了什么。
提前致谢。

Int8_t i2c_init(void)

{

GPIO_ConfigurePin(I2C_GPIO_PORT, I2C_SCL_PIN, INPUT, PID_I2C_SCL, false);
GPIO_ConfigurePin(I2C_GPIO_PORT, I2C_SDA_PIN, INPUT, PID_I2C_SDA, false);
setBits16(CLK_16M_REG,XTAL16_BIAS_SH_ENABLE,1);


cfg - > clock_cfg。ss_hcnt = I2C_SS_SCL_HCNT_REG;
cfg-> clock_cfg.ss_lcnt = i2c_ss_scl_lcnt_reg;
cfg-> clock_cfg.fs_hcnt = i2c_fs_scl_hcnt_reg;
cfg-> clock_cfg.fs_lcnt = i2c_fs_scl_lcnt_reg;

cfg-> speed = i2c_speed_fast;
cfg-> mode = i2c_mode_master;
cfg->addr_mode = I2C_ADDRESSING_7B;
cfg->地址= 0x68;
cfg-> tx_fifo_level = cfg-> rx_fifo_level = 32;

global_int_disable();

//Enable i2c clock to R/W i2c registers
i2c_set_clock_status(i2c_clock_enable);

// Enable interrupts
global_int_restore();

i2c_set_controller_status(I2C_CONTROLLER_DISABLE);
while(i2c_get_controller_status()!= i2c_controller_disable);

i2c_set_int_mask(0x0000);

// SCL时钟设置
setword16(&i2c-> i2c_ss_scl_hcnt_regf,cfg-> clock_cfg.ss_hcnt);
setword16(&i2c-> i2c_ss_scl_lcnt_regf,cfg-> clock_cfg.ss_lcnt);

setword16(&i2c-> i2c_fs_scl_hcnt_regf,cfg-> clock_cfg.fs_hcnt);
setword16(&i2c-> i2c_fs_scl_lcnt_regf,cfg-> clock_cfg.fs_lcnt);

// Set speed mode
// setBits16(&i2c-> i2c_con_regf,i2c_speed,cfg->速度);
SetBits16(&i2c->I2C_CON_REGF, I2C_SPEED, I2C_SPEED_FAST);

//设置FIFO级别
ASSERT_WARNING(32 != 0);
ASSERT_WARNING(32 != 0);
setBits16(&i2c-> i2c_tx_tl_regf,rx_tl,32- 1);
setBits16(&i2c-> i2c_rx_tl_regf,rx_tl,32 - 1);

//设置i2c master
i2c_setup_master(i2c_restart_enable,i2c_addressing_7b,0x68);

i2c_set_controller_status(i2c_controller_enable);
//启用或禁用控制器时有两个IC_CLK延迟
while ((i2c_get_controller_status() != I2C_CONTROLLER_ENABLE));

//将I2C中断的优先级设置为级别2
NVIC_SetPriority(I2C_IRQn, 2);
//启用I2C中断
nvic_enableirq(i2c_irqn);
/ *根据目标机器实现I2C总线初始化。* /
返回0;
}

INT8_T REG_WRITE(UINT8_T REG_ADDR,CONSS UINT8_T * REG_DATA,UINT32_T长度,VOID * INTF_PTR)
{

/ *使用i2c写入寄存器。返回0以成功执行。* /

int ret = 0;
uint16_t bytes_written;
i2c_abort_t abrt_code;

UINT32_T标志= I2C_F_NONE;

/ *总线上的每个I2C设备都有一个唯一的地址,在我们沟通之前设置为* /

set_dev_addr(reg_addr);

/* Perform blocking write */
yytes_written = i2c_master_transmit_buffer_sync(reg_data,length,hight_code,flags);

if((i2c_abort_none!= = abrt_code)||(bytes_written!= length)){
ret = -1;
}
返回Ret;
}

int8_t i2c_reg_read(uint8_t reg_addr, uint8_t *reg_data, uint32_t length, void *intf_ptr)
{
int ret = 0;
uint16_t bytes_read;
i2c_abort_t abrt_code;
UINT32_T标志= I2C_F_NONE;

set_dev_addr(reg_addr);

bytes_read = i2c_master_receive_buffer_sync(reg_data,length,&abrt_code,flags);

if((abrt_code!= i2c_abort_none)||(bytes_read!= length)){
ret = -1;
}

返回Ret;
}

im_dialog.
离线
最后一次露面:4天8小时前
加入:2016-12-06 22:25
Hi cripsly,

Hi cripsly,

检查您使用的GPIO在US2C Intereface中是否正确配置了user_periph_setup.c文件中的set_pad_functions函数中。

最好的祝福

im_dialog.

瘸子
离线
最后一次露面:5 months 3 weeks ago
加入:2018-11-18 04:54
你好对话框,

你好对话框,

任何不便敬请谅解。我已经检查过这个设置。我仍然无法努力工作....

我只需要使用这3个功能

* @brief函数通过i2c总线编写传感器的寄存器。
*
* @param [in] i2c_addr:传感器I2C地址。
* @param [in] reg_addr:注册地址。
* @param [in] reg_data:指向要写入值的数据缓冲区。
*@param[in] length : No of bytes to write.
*
* @return执行状态
* @retval 0 - >成功
* @retval> 0 - >失败信息
*
* /
int8_t i2c_reg_write(uint8_t i2c_addr, uint8_t reg_addr, const uint8_t *reg_data, uint16_t length)
{

/ *使用i2c写入寄存器。返回0以成功执行。* /
返回0;
}

/ *!
*@brief Function for reading the sensor's registers through I2C bus.
*
* @param [in] i2c_addr:传感器I2C地址。
* @param [in] reg_addr:注册地址。
* @param [out] reg_data:指向数据缓冲区以存储读取数据。
* @param [in]长度:读取的no字节。
*
* @return执行状态
* @retval 0 - >成功
* @retval> 0 - >失败信息
*
* /
INT8_T I2C_REG_READ(UINT8_T I2C_ADDR,UINT8_T REG_ADDR,UINT8_T * REG_DATA,UINT16_T长度)
{

/* Read from registers using I2C. Return 0 for a successful execution. */
返回0;
}

PM_DIALOG.
离线
最后一次露面:1 day 13 hours ago
职员
加入:2018-02-08 11:03
Hi cripsly,

Hi cripsly,

Could you please use a logic analyzer, probe the I2C signals and share a snapshot?

您是否遵循IM_DIALOG已经建议的示例?

谢谢,PM_DIALOG.