【已解决】硬件IIC问题
Posted: 2023年 Apr 17日 10:17
硬件IIC写数据没有问题,读数据在发送设备地址的时候波形明显不对,没有发数据,请问是为什么呢
硬件IIC写数据没有问题,读数据在发送设备地址的时候波形明显不对,没有发数据,请问是为什么呢
发送设备地址的波形如图
麻烦提供所使用的芯片平台和sdk版本。
版本是ble_3435_sdk_ext_39_0F0E 用的是BK3431Q芯片
写错了,出问题的是要读取的地址,设备地址还能正常发送
i2c_read((UINT8_T)dev_addr, ((UINT8_T *)data)[0], &((UINT8_T *)data)[1], size-1);
直接调用的原厂的读取没有问题啊
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;
}
用的就是这个函数,写入的函数没有问题,读取的函数一到这个地址就不对
这是使用的函数和波形,是不是进入中断发送数据太晚了,为什么呢