Page 1 of 2
低功耗设备io引脚工作不正常
Posted: 2023年 Nov 26日 11:34
by hzb
基于参看demo的tuyaos_demo_zg_pir_tl例程低功耗设备,用TUYA_GPIO_NUM_12(PB4)和TUYA_GPIO_NUM_13(PB5) 引脚io模拟i2c驱动传感器(放在tuya_init_first或tuya_init_last,2个函数中都试初始化都不行),2个引脚都没有输出(见附件“非正常波形”),开发环境:
模组: ZT5
SDK:TLSR8258_TuyaOS-3.8.0
相同的代码,基于tuyaos_demo_zg_light2例程是正常工作,但是在tuyaos_demo_zg_pir_tl工程中就没不正常(无输出),尝试将
"dev_role":"sleep_end_dev", 修改为"router" , 编译会报错(详见附件):
Code: Select all
../../../libs/tuya_lib/router\lib_router_tkl_telink_zigbee_release.a(tkl_zll_commissioning.o): In function `tkl_zll_initiator_scan_start':
tkl_zll_commissioning.c:(.text.tkl_zll_initiator_scan_start+0x20): undefined reference to `tal_zg_inner_end_device_rejoin_clear'
tkl_zll_commissioning.c:(.text.tkl_zll_initiator_scan_start+0x3e): undefined reference to `tal_zg_inner_end_device_rejoin_clear'
看编译报错信息,将工程中zll相关功能屏蔽后,发现PB4和PB5工作也正常了(见附件"正常波形"),间接证明了好像是低功耗模式也哪里影响这2个引脚配置输出
Re: 低功耗设备io引脚工作不正常
Posted: 2023年 Nov 26日 11:42
by hzb
另外说明下,设备是还未进入休眠模式(在tuya_init_first 和 tuya_init_last中调用传感器初始化),并且也未打印进入低功耗的回调函数__tuya_pre_sleep_cb
详见附件。
Re: 低功耗设备io引脚工作不正常
Posted: 2023年 Nov 26日 11:45
by hzb
关于传感器引脚配置:
Code: Select all
#define I2C_SDA_PIN TUYA_GPIO_NUM_12//PB4
#define I2C_SCL_PIN TUYA_GPIO_NUM_13//PB5
#define SENSOR_INT_PIN TUYA_GPIO_NUM_19 //PC3
#define I2C_SCL_H() tal_gpio_write(I2C_SCL_PIN, TUYA_GPIO_LEVEL_HIGH)
#define I2C_SCL_L() tal_gpio_write(I2C_SCL_PIN, TUYA_GPIO_LEVEL_LOW)
#define I2C_SDA_H() tal_gpio_write(I2C_SDA_PIN, TUYA_GPIO_LEVEL_HIGH)
#define I2C_SDA_L() tal_gpio_write(I2C_SDA_PIN, TUYA_GPIO_LEVEL_LOW)
#define I2C_SCL(x) (x ? tal_gpio_write(I2C_SCL_PIN, TUYA_GPIO_LEVEL_HIGH):tal_gpio_write(I2C_SCL_PIN, TUYA_GPIO_LEVEL_LOW) )
#define I2C_SDA(x) (x ? tal_gpio_write(I2C_SDA_PIN, TUYA_GPIO_LEVEL_HIGH):tal_gpio_write(I2C_SDA_PIN, TUYA_GPIO_LEVEL_LOW) )
#define RD_I2C_SDA() gpio_read(GPIO_PB4) // tal_gpio_read(I2C_SDA_PIN,&level);
void I2C_Init(void)
{
TUYA_GPIO_BASE_CFG_T io_cfg;
io_cfg.mode = TUYA_GPIO_OPENDRAIN;
io_cfg.direct = TUYA_GPIO_OUTPUT;
io_cfg.level = TUYA_GPIO_LEVEL_HIGH;
tal_gpio_init(I2C_SCL_PIN, &io_cfg);
tal_gpio_init(I2C_SDA_PIN, &io_cfg);
//I2C_SCL(1);
//I2C_SDA(1);
I2C_SCL_H();
I2C_SDA_H();
}
static void platform_init(void)
{
I2C_Init();
TUYA_GPIO_IRQ_T irq_cfg = {
.mode = TUYA_GPIO_IRQ_RISE,
.cb = __sensor_pin_irq_handle,
.arg = NULL,
};
tal_gpio_irq_init(SENSOR_INT_PIN, &irq_cfg);//PD2
}
Re: 低功耗设备io引脚工作不正常
Posted: 2023年 Nov 26日 16:30
by huanghuan
1.tlsr8258 平台由于芯片设计的原因,进入休眠时输出是不保持的,为了保证输出,低功耗固件默认输出是使用上下拉方式进行输出,这会使得输出能力比较弱。
2.你反馈的问题可能是上述问题导致的,请检查 BOOL_T tkl_gpio_output_use_wakeup_mode(TUYA_GPIO_NUM_E pin_id) 这个函数是如何配置的,如果你想要自己控制唤醒及休眠时机使用推挽输出的话,可以返回TRUE;或者区分不同管脚进行不同的返回值,实现不同管脚不同的输出方式,可以参考pir demo。
Re: 低功耗设备io引脚工作不正常
Posted: 2023年 Nov 26日 17:53
by hzb
在tkl_gpio_output_use_wakeup_mode中TUYA_GPIO_NUM_12 ,TUYA_GPIO_NUM_13 引脚返回TRUE,好像可以了,具体如下:
Code: Select all
BOOL_T tkl_gpio_output_use_wakeup_mode(TUYA_GPIO_NUM_E pin_id)
{
if((TUYA_GPIO_NUM_12 == pin_id) || (TUYA_GPIO_NUM_13 == pin_id) ||(GPIO_APP_NET_LED == pin_id)){
return TRUE;
}
else
{
return FALSE;
}
}
但是改成如上之后,模组无限重启了,根据打印的日志,定位到运行tal_gpio_irq_init(SENSOR_INT_PIN, &irq_cfg);//TUYA_GPIO_NUM_19---PC3 就复位重启了
Re: 低功耗设备io引脚工作不正常
Posted: 2023年 Nov 26日 17:58
by hzb
以上图片看不清楚的话,可看以下代码:
Code: Select all
static void platform_init(void)
{
TAL_PR_DEBUG("[%s] ===1===", __FUNCTION__);
I2C_Init();
TAL_PR_DEBUG("[%s] ===2===", __FUNCTION__);
TUYA_GPIO_IRQ_T irq_cfg = {
.mode = TUYA_GPIO_IRQ_RISE,
.cb = __sensor_pin_irq_handle,
.arg = NULL,
};
TAL_PR_DEBUG("[%s] ===3===", __FUNCTION__);
tal_gpio_irq_init(SENSOR_INT_PIN, &irq_cfg);//TUYA_GPIO_NUM_19---PC3
TAL_PR_DEBUG("[%s] ===4===", __FUNCTION__);
}
运行打印了 TAL_PR_DEBUG("[%s] ===3===", FUNCTION); 但是没有打印TAL_PR_DEBUG("[%s] ===4===", FUNCTION); 就无限重启了, 请问这个配置有冲突嘛
Re: 低功耗设备io引脚工作不正常
Posted: 2023年 Nov 26日 18:38
by hzb
将tal_gpio_irq_init(TUYA_GPIO_NUM_19, &irq_cfg);//TUYA_GPIO_NUM_19---PC3 屏蔽了,传感器初始化正常了,也不会重启, 但是这个引脚是传感器中断脚(lis2dw12三轴传感器INT1引脚),用来检测当有外部移动传感器时,来唤醒模组,并读取三轴加速度值,并上报。 请问这个引脚TUYA_GPIO_NUM_19,有什么其他配置嘛? 为什么一使能中断,就会不断重启。
Re: 低功耗设备io引脚工作不正常
Posted: 2023年 Nov 26日 23:31
by hzb
是否与tkl_reallocate_gpio_interrupt_source 这个函数有关?目前这个函数是:
Code: Select all
BOOL_T tkl_reallocate_gpio_interrupt_source(TUYA_GPIO_NUM_E pin,UINT8_T before_mode,UINT8_T* after_mode)
{
/* if(pin == GPIO_APP_ZLL_SCAN_PIN){
*after_mode = 1;
return TRUE;
}
else*/
{
*after_mode = 2;
return TRUE;
}
return FALSE;
}
Re: 低功耗设备io引脚工作不正常
Posted: 2023年 Nov 27日 10:15
by huanghuan
你好,我在3.8.0 pir demo基础上修改成你相同配置后,无法复现你会重启的问题,请将你的app路径下参与编译的工程文件以附件的方式给到我们,我们将进行确认
Re: 低功耗设备io引脚工作不正常
Posted: 2023年 Nov 27日 19:04
by hzb
好的,详见附件。 特别说明下细微修改了sdk中tkl_gpio_initio函数(用模拟i2c配置成开漏输出并使能了输入,不知道有没影响):
if(cfg->mode == TUYA_GPIO_OPENDRAIN || cfg->mode == TUYA_GPIO_OPENDRAIN_PULLUP)
gpio_set_input_en(gpio_tlsr, 1);//0
else
gpio_set_input_en(gpio_tlsr, 0);//0