【已解决】PHY6222中的IIC地址怎么设置8位?
在配置IIC的时候addr_width只有7BIT跟10BIT可选。选择了7BIT之后,发送8BIT的地址,用逻辑分析仪读出波形最后一位永远是0,而且将整个地址左移了一位,这种情况怎么解决?
在配置IIC的时候addr_width只有7BIT跟10BIT可选。选择了7BIT之后,发送8BIT的地址,用逻辑分析仪读出波形最后一位永远是0,而且将整个地址左移了一位,这种情况怎么解决?
TUYA_IIC_BASE_CFG_T iic1_cfg = {
.role = TUYA_IIC_MODE_MASTER,
.speed = TUYA_IIC_BUS_SPEED_100K,
.addr_width = TUYA_IIC_ADDRESS_7BIT,
};
ret=tal_i2c_init(TUYA_I2C_NUM_0, &iic1_cfg);
UINT8_T IIC_send_buf[4]={0x81,0xa4,0xba,0x83};
tal_i2c_master_send(TUYA_I2C_NUM_0,0xe7,&IIC_send_buf,4);
附上IIC配置,评论发不了图片去了,这个0xe7的地址发出去用逻辑分析仪读到的是0xce;
发送地址设置为1111 0111的时候,实际读到的是1110 1110;
发送地址设置为1111 0100的时候,实际读到的是1110 1000;
发送地址设置为1111 0011的时候,实际读到的是1110 0110;
最后一位怎么都没办法设置为1,请教一下有没有方法?
如上图所示,IIC地址类型的7位模式,有时候也称作8位模式,实际上是7位地址,左移1位,而最低位是读写控制位,最低位如果是0则表示写,最低位如果是1则表示读,是IIC的标准模式,更多详细信息请参考网上的IIC相关资料。
我尝试使用接收IIC函数(图一)
也无法将地址最后一位致为1;
我手上有一块IIC通讯的屏幕,他的地址只有在0xE7的情况下才能正确的驱动,这是我用IO模拟IIC驱动的成功案例
从您提供的截图中可以看到您的屏幕的地址是0x73,所以您还是按照一开始的方式,只是把地址替换为0x73应该就可以了
Code: Select all
TUYA_IIC_BASE_CFG_T iic1_cfg = {
.role = TUYA_IIC_MODE_MASTER,
.speed = TUYA_IIC_BUS_SPEED_100K,
.addr_width = TUYA_IIC_ADDRESS_7BIT,
};
ret=tal_i2c_init(TUYA_I2C_NUM_0, &iic1_cfg);
UINT8_T IIC_send_buf[4]={0x81,0xa4,0xba,0x83};
tal_i2c_master_send(TUYA_I2C_NUM_0,0x73,&IIC_send_buf,4);
Code: Select all
TUYA_IIC_BASE_CFG_T iic1_cfg = {
.role = TUYA_IIC_MODE_MASTER,
.speed = TUYA_IIC_BUS_SPEED_100K,
.addr_width = TUYA_IIC_ADDRESS_7BIT,
};
ret=tal_i2c_init(TUYA_I2C_NUM_0, &iic1_cfg);
UINT8_T IIC_send_buf[4]={0x81,0xa4,0xba,0x83};
tal_i2c_master_receive(TUYA_I2C_NUM_0,0x73,&IIC_send_buf,4);
这个是按照地址0x73去写,用逻辑分析仪读到的!
仔细看一下波峰
Code: Select all
TUYA_IIC_BASE_CFG_T iic1_cfg = {
.role = TUYA_IIC_MODE_MASTER,
.speed = TUYA_IIC_BUS_SPEED_100K,
.addr_width = TUYA_IIC_ADDRESS_7BIT,
};
ret=tal_i2c_init(TUYA_I2C_NUM_0, &iic1_cfg);
UINT8_T IIC_send_buf[4]={0x81,0xa4,0xba,0x83};
tal_i2c_master_send(TUYA_I2C_NUM_0,0x73,&IIC_send_buf,4);
一样的
IIC地址类型的7位模式,有时候也称作8位模式,实际上是7位地址,左移1位,而最低位是读写控制位,最低位如果是0则表示写,最低位如果是1则表示读,是IIC的标准模式,更多详细信息请参考网上的IIC相关资料。