【已解决】硬件IIC问题

蓝牙 BLE设备、蓝牙 MESH设备、蓝牙 Beacon设备、Sub-G设备等


15179276401
Posts: 49

硬件IIC写数据没有问题,读数据在发送设备地址的时候波形明显不对,没有发数据,请问是为什么呢

15179276401
Posts: 49

Re: 硬件IIC问题

发送设备地址的波形如图

Attachments
1681697953098.png
NICE
Posts: 95

Re: 硬件IIC问题

麻烦提供所使用的芯片平台和sdk版本。

15179276401
Posts: 49

Re: 硬件IIC问题

版本是ble_3435_sdk_ext_39_0F0E 用的是BK3431Q芯片

15179276401
Posts: 49

Re: 硬件IIC问题

写错了,出问题的是要读取的地址,设备地址还能正常发送

15179276401
Posts: 49

Re: 硬件IIC问题

NICE 2023年 Apr 17日 10:25

麻烦提供所使用的芯片平台和sdk版本。

请问有结果吗

TripleJay
Posts: 49

Re: 硬件IIC问题

i2c_read((UINT8_T)dev_addr, ((UINT8_T *)data)[0], &((UINT8_T *)data)[1], size-1);
直接调用的原厂的读取没有问题啊

TripleJay
Posts: 49

Re: 硬件IIC问题

STATUS i2c_read(uint8_t devAddr, uint8_t addr, uint8_t*buf, uint8_t size)
{
I2C_MSG p_i2c_msg;

Code: Select all

p_i2c_msg.work_mode    = 0
                         | ( I2C_MSG_WORK_MODE_RW_BIT)  // read
                         & (~I2C_MSG_WORK_MODE_MS_BIT)  // master
                         & (~I2C_MSG_WORK_MODE_AL_BIT)  // 7bit address
                         | ( I2C_MSG_WORK_MODE_IA_BIT); // without inner address
p_i2c_msg.send_addr    = devAddr;                      // Destiny slave address
p_i2c_msg.inner_addr   = addr;
p_i2c_msg.all_data_cnt = size;
p_i2c_msg.addr_flg     = 0;
p_i2c_msg.trans_done   = 0;
p_i2c_msg.ack_check    = 1;
p_i2c_msg.current_data_cnt = 0;
p_i2c_msg.errno        = 0;

memset(p_i2c_msg.data, 0, I2C_DATA_BUFFER_LEN);
if (i2c_msg_init(&p_i2c_msg) != OK)
{
	return ERROR;
}
i2c_send_start();

while (is_i2c_busy() == YES);       // wait until i2c0 free

if(i2c_get_last_msg() != NULL)
{
	//PrintI2CurrentMsg(i2c_get_last_msg());
	memcpy(buf, i2c_get_last_msg()->data, i2c_get_last_msg()->all_data_cnt);
    i2c_msg_reset();

	return OK;
}

return ERROR;

}

15179276401
Posts: 49

Re: 硬件IIC问题

用的就是这个函数,写入的函数没有问题,读取的函数一到这个地址就不对

15179276401
Posts: 49

Re: 硬件IIC问题

这是使用的函数和波形,是不是进入中断发送数据太晚了,为什么呢

Attachments
1681715142299.png
1681715093206.png
Post Reply