【求助】【TuyaOS OS】硬件iic读取数据异常失败

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


Post Reply
深圳致华—黄工
Posts: 3

1)开发包全称:PHY6222_TuyaOS-3.10.0
2)问题现象:用这个开发包编写一个iic主机程序去读取PHY6222原厂提供的iic从机程序,过一段时间(有时候过很久,有时候很快)会打印I2C RD TO。都是用的硬件iic,并且用逻辑分析仪和示波器测波形也会马上打印I2C RD TO。
3)复现流程:P34 -> SDA P33 -> SCL 。主机每一秒读取一次,从机使用的是原厂的release_bbb_sdk-PHY62XX_SDK_3.1.5 的sbcMultiCon工程,硬件iic,一直读取,有时候会出现,有时候不会,属于概率性问题。
4)发生时间:2025.5.14

User avatar
逻辑的院子
Posts: 341
Contact:

Re: 【求助】【TuyaOS OS】硬件iic读取数据异常失败

建议参考 PHY6222_TuyaOS-3.10.0 里面默认提供的 IIC 驱动 OLED 例程,例程里面包含有调用到 IIC 读取的逻辑,具体如下:
find_oled → tal_i2c_master_receive → tkl_i2c_master_receive → hal_i2c_read → _hal_i2c_read_s

涉及硬件如下:
IIC 功能 引脚
IIC0 SCL P24
IIC0 SDA P23

深圳致华—黄工
Posts: 3

Re: 【求助】【TuyaOS OS】硬件iic读取数据异常失败

还是不行,间隔一秒一直读取从机数据,一段时间之后 ,SCL拉低 SDA被拉高,iic总线被锁死了

Snipaste_2025-05-27_09-02-41.png

这是我用逻辑分析仪抓的波形,

深圳致华—黄工
Posts: 3

Re: 【求助】【TuyaOS OS】硬件iic读取数据异常失败

Snipaste_2025-05-27_09-07-58.png

这是正常的波形

User avatar
逻辑的院子
Posts: 341
Contact:

Re: 【求助】【TuyaOS OS】硬件iic读取数据异常失败

您好,我基于PHY6222_TuyaOS-3.11.0版本SDK(当前最新发布版本),按照您描述的逻辑,仅修改如下接口做测试:

Code: Select all


STATIC OPERATE_RET find_oled(VOID_T)
{
    OPERATE_RET ret = OPRT_OK;
    UINT8_T sample_data[2];

for (UINT16_T address = 1; address <= 1000; address++) {
    tal_watchdog_refresh();
    tal_system_delay(100);
    ret = tal_i2c_master_receive(sg_i2c_num, SLAVE_ADDRE, sample_data, 2);
    TAL_PR_INFO("Find oled ret: %d", ret);
//        if (ret == OPRT_OK && (address == SLAVE_ADDRE)) {
//            TAL_PR_INFO("Find oled");
//            return OPRT_OK;
//        }
    }

TAL_PR_INFO("Not find oled");

return OPRT_COM_ERROR;
}

并不会发生异常,测试的时候外部接OLED,引脚如前所述。
测试结果如下(100ms读取一次,比您描述的速度快10倍,共读取1000次):

PHY6222测试IIC读取功能Log.txt
(80.02 KiB) Downloaded 11 times
User avatar
逻辑的院子
Posts: 341
Contact:

Re: 【求助】【TuyaOS OS】硬件iic读取数据异常失败

下面是基于PHY6222_TuyaOS-3.10.0版本SDK(跟您一样的)使用同样的方法做的测试,结果也是正常的,设备log如下:

PHY6222测试IIC读取功能Log - 3.10.0.txt
(79.98 KiB) Downloaded 16 times

供对比参考。

User avatar
逻辑的院子
Posts: 341
Contact:

Re: 【求助】【TuyaOS OS】硬件iic读取数据异常失败

另外,需要提醒的是,如果您外接的设备本身不会回复IIC的读取,是会出现“I2C RD TO”的提示的(不过这只是提醒您需要外接OLED或其他设备),例如我还是使用刚才的例程,但是把外接的OLED断开后,log如下:

Post Reply