【问题】NONOS_SDK 1.5.3 上电GPIO14和GPIO12 会出现400ms的高电平,为什么?怎么消除?

pillarpeng
Posts: 16
Joined: Sat May 14, 2016 10:31 am

【问题】NONOS_SDK 1.5.3 上电GPIO14和GPIO12 会出现400ms的高电平,为什么?怎么消除?

Postby pillarpeng » Thu Jun 30, 2016 4:43 pm

环境:
SDK:NONOS_SDK version:1.5.3,
IOT:IOT VERSION = v1.0.5t45772(a)
demo: light 还有 plug

问题:
上电时,GPIO14和GPIO12,会出现400ms的高电平,这是为什么?怎么消除它?

我做过的尝试:
将GPIO14和GPIO12的初始化,放在用户入口程序函数“user_init ()”, 的第一行,任然出现这个问题。

猜测:
应该是进入 入口函数之前做的一些操作了。。。

ESP_Rubin
Posts: 222
Joined: Wed Jun 29, 2016 11:59 am

【Feedback】Re: 【问题】NONOS_SDK 1.5.3 上电GPIO14和GPIO12 会出现400ms的高电平,为什么?怎么消除?

Postby ESP_Rubin » Thu Jun 30, 2016 7:57 pm

您是怎么初始化GPIO的?

pillarpeng
Posts: 16
Joined: Sat May 14, 2016 10:31 am

Re: 【问题】NONOS_SDK 1.5.3 上电GPIO14和GPIO12 会出现400ms的高电平,为什么?怎么消除?

Postby pillarpeng » Fri Jul 01, 2016 10:09 am

Code: Select all

user_light_init
{
   // key init: GPIO 4 add by pp 2016.5.20
    single_key[0] = key_init_single(LIGHT_KEY_0_IO_NUM, LIGHT_KEY_0_IO_MUX, LIGHT_KEY_0_IO_FUNC, user_light_long_press, user_light_short_press);

    keys.key_num = LIGHT_KEY_NUM;
   
    keys.single_key = single_key;

    key_init(&keys);

   //------------------------------------

    spi_flash_read((PRIV_PARAM_START_SEC + PRIV_PARAM_SAVE) * SPI_FLASH_SEC_SIZE,
                               (uint32 *)&light_param, sizeof(struct light_saved_param));      // 读取 PWM 的参数值
   
    if(light_param.pwm_period>10000 || light_param.pwm_period <1000)                     // 设置 PWM 的周期
   {
            light_param.pwm_period = 1000;
    }

   uint32 io_info[][3] = {   
                       {PWM_0_OUT_IO_MUX,PWM_0_OUT_IO_FUNC,PWM_0_OUT_IO_NUM},      // gpio14
                        {PWM_1_OUT_IO_MUX,PWM_1_OUT_IO_FUNC,PWM_1_OUT_IO_NUM},      // gpio12
                            {PWM_2_OUT_IO_MUX,PWM_2_OUT_IO_FUNC,PWM_2_OUT_IO_NUM},      // gpio15                           
                            {PWM_3_OUT_IO_MUX,PWM_3_OUT_IO_FUNC,PWM_3_OUT_IO_NUM},      // gpio4
                            {PWM_4_OUT_IO_MUX,PWM_4_OUT_IO_FUNC,PWM_4_OUT_IO_NUM},      // gpio13
                        };
   
    uint32 pwm_duty_init[PWM_CHANNEL] = {0};                                    // 初始化 duty 为 0
   
    /*PIN FUNCTION INIT FOR PWM OUTPUT*/
    pwm_init(light_param.pwm_period,  pwm_duty_init ,PWM_CHANNEL,io_info);
   
    os_printf("LIGHT PARAM: R: %d \r\n",light_param.pwm_duty[LIGHT_RED]);               // R: gpio14
    os_printf("LIGHT PARAM: G: %d \r\n",light_param.pwm_duty[LIGHT_GREEN]);               // G: gpio12
    os_printf("LIGHT PARAM: B: %d \r\n",light_param.pwm_duty[LIGHT_BLUE]);               // B: gpio15

   if(PWM_CHANNEL>LIGHT_COLD_WHITE)
   {
        os_printf("LIGHT PARAM: CW: %d \r\n",light_param.pwm_duty[LIGHT_COLD_WHITE]);      // C: gpio4
        os_printf("LIGHT PARAM: WW: %d \r\n",light_param.pwm_duty[LIGHT_WARM_WHITE]);      // w: gpio13
    }
   
    os_printf("LIGHT PARAM: P: %d \r\n",light_param.pwm_period);                     // pwm period

    uint32 light_init_target[8]={0};
   
    os_memcpy(light_init_target,light_param.pwm_duty,sizeof(light_param.pwm_duty));

    light_set_aim(
                  light_init_target[LIGHT_RED],
                   light_init_target[LIGHT_GREEN],
                   light_init_target[LIGHT_BLUE],
                   light_init_target[LIGHT_COLD_WHITE],
                   light_init_target[LIGHT_WARM_WHITE],
                   light_param.pwm_period
                );
   
    set_pwm_debug_en(0);//disable debug print in pwm driver
   
    os_printf("PWM version : %08x \r\n",get_pwm_version());
}



但应该不是这个问题,你可以测试一下,下载这个版本的SDK,然后去测试GP14和GP12,应该也会有的。

yangtao
Posts: 19
Joined: Tue Feb 02, 2016 3:03 pm

Re: 【问题】NONOS_SDK 1.5.3 上电GPIO14和GPIO12 会出现400ms的高电平,为什么?怎么消除?

Postby yangtao » Fri Jul 01, 2016 11:51 am

可惜啊,消不掉的。
我把所有的IO都测了一遍,
GPIO12, GPIO13都是高电平。
GPIO14在RESET下面是HIGH,RESET之后是HIGH (0.145s) -> LOW。
GPIO2: UART 输出信号
GPIO4: 166Hz信号

ESP_Rubin
Posts: 222
Joined: Wed Jun 29, 2016 11:59 am

Re: 【问题】NONOS_SDK 1.5.3 上电GPIO14和GPIO12 会出现400ms的高电平,为什么?怎么消除?

Postby ESP_Rubin » Fri Jul 01, 2016 3:44 pm

恩,我们GPIO内部默认有上拉电阻

pillarpeng
Posts: 16
Joined: Sat May 14, 2016 10:31 am

Re: 【问题】NONOS_SDK 1.5.3 上电GPIO14和GPIO12 会出现400ms的高电平,为什么?怎么消除?

Postby pillarpeng » Thu Aug 04, 2016 4:34 pm

先说一下解决的方式:
就是在相应的引脚上加下拉电阻即可。我这里使用的是330欧姆的电阻。可以正常使用,之后置高置低都可以。


ESP8266EX 上电时引脚的初始化状态
问题:
ESP8266EX 使用SDK:NONOS_SDK_1.5.3_16_04_18,IOT_demo中的light。
上电后的350ms内,GPIO12,GPIO13,GPIO14引脚的电平始终为高电平。

在使用ESP8266EX作为MCU做了一个wifi 七彩灯。4路PWM引脚分别为:R(GPIO 14), B(GPIO12), G(GPIO 13), W(GPIO4), 全部引脚设置为PWM引脚,初始占空比为零。
但过程中发现,每次上电后,总会RGB先亮一下,熄灭(然后进入我写的程序)。

解决:
用是逻辑分析仪采样发现RGB三个引脚上有350ms左右的高电平出现,(W引脚没有这个现象),起初以为是软件设置有误,于是将所有的代码全部注释,user_init()中只写RGB初始化为零的语句。再一次上电,发现RGB三个引脚居然还是一样的现象,首先出现350ms的高电平,然后拉低。
由此猜测:
1) ESP8266一上电,会有350ms左右的时间是不受用户控制的(至少是使用官方SDK的用户)。
2) 在上电后的350ms左右,RGB的引脚电平是被拉高的。但是引脚拉高有两种可能性:
 第一是:输出功能,并且输出高
 第二是:输入功能,并且上拉

为了搞清楚,其上电时,它引脚的状态,设置简单的测试环境。把可能干扰的电路以及其他全部弄掉,仅仅剩下一个ESP8266最小系统模块。这里使用的是ESP8266EX(AI的模块)。
1) 使用官方SDK:NONOS_SDK_1.5.3_16_04_18
2) 使用例程App:IOT_DEMO的light
3) 修改light源码:将user_light中全部注释,然后初始化以下引脚
GPIO(0,2,4,5,12,13,14,15,16),将其设置为输出,然后置低电平。
4) 由于要进入Flash启动模式,所以先让GPIO15 = 0,GPIO2 = 1,GPIO0 = 1; 先判断其他引脚
5) 最后判断GPIO15,GPIO2,GPIO0的初始状态。

实验方法:
使用逻辑分析仪,采样各个引脚的波形,然后分析。
分析分为两个步骤,首先判断上电后,引脚的电平;然后判断是输入还是输出。
1. 首先判定上电后引脚的电平
由于用户程序写的是,上电置低,所以只要观察,上电后,特别是350ms以内,相应引脚的波形是否有高电平出现。
1) 如果有高电平,说明引脚初始电平为高,
2) 如果无高电平,说明引脚初始电平为低。
2. 然后判断是输出还是输入
1) 对于初始状态为高电平,那么其状态就可能有两种,一种是输出置高,另一种是输入上拉两种状态了。判断方法如下:
各引脚使用下拉电阻,然后在上电测量,使用逻辑分析仪采样,观察波形。
 如果上电后的350ms内是高电平,则该引脚是初始状态为:输出置高
 如果上电后的350ms内是低电平,则该引脚是初始状态为:输入上拉
2) 对于初始状态为低电平,那么其状态就可能有两种,一种是输出置低,另一种是输入下拉两种状态了。判断方法如下:
各引脚使用使用上拉电阻,然后在上电测量,使用逻辑分析仪采样,观察波形。
 如果上电后的350ms内是高电平,则该引脚是初始状态为:输入下拉
 如果上电后的350ms内是低电平,则该引脚是初始状态为:输出置低

测量后的结果如下:
|----------------------------------------------------------------------------------------|
|----GPIO NO.---|----PIN NO.---|----初始状态----|----初始电平--|
|-----GPIO0------|-----Pin15-----|----输入上拉----|-------H--------|
|-----GPIO2------|-----Pin14-----|----输入上拉----|-------H--------|
|-----GPIO4------|-----Pin16-----|----输入下拉----|-------L--------|
|-----GPIO5------|-----Pin24-----|----输入下拉----|-------L--------|
|-----GPIO12-----|-----Pin10-----|----输入上拉----|-------H--------|
|-----GPIO13-----|-----Pin12-----|----输入上拉----|-------H--------|
|-----GPIO14-----|-----Pin9------|----输入上拉----|-------H--------|
|-----GPIO15-----|-----Pin13-----|----输入上拉----|-------H--------|
|-----GPIO16-----|-----Pin8------|----输出置高----|-------H--------|
|---------------------------------------------------------------------------------------|




Pillarpeng
2016.8.4

Who is online

Users browsing this forum: No registered users and 14 guests