• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Решено Не подключается к WiFi ESP-201 - Fatal exception 28

tonal

New member
Прошивка не подключается к WiFi.
Пишет Fatal exception 28(LoadProhibitedCause)

Код:
WiFi connecting...
Fatal exception 28(LoadProhibitedCause):
epc1=0x40248447, epc2=0x00000000, epc3=0x00000000, excvaddr=0x0000000c, depc=0x00000000

ets Jan  8 2013,rst cause:1, boot mode:(3,6)

load 0x40100000, len 26716, room 16
tail 12
chksum 0x03
ho 0 tail 12 room 4
load 0x3ffe8000, len 884, room 12
tail 8
chksum 0xef
load 0x3ffe8378, len 520, room 0
tail 8
chksum 0x0e
csum 0x0e
{l{l_*Wсinit
mode : sta(5c:cf:7f:01:e8:56)
add if0
f r-1,
После весит с секунду, и по новой.
Иногда, включение на 10-е, таки подключается, но через небольшое время опять так же отваливается.
Подскажите, куда копать.
Прошивка собирается esp-open-sdk
Код:
extern "C"
static void ICACHE_FLASH_ATTR wifi_check_ip(void *arg) {
  os_timer_disarm(&WiFiLinker);
  switch(wifi_station_get_connect_status()) {
    case STATION_GOT_IP: {
      ip_info ipConfig;
      wifi_get_ip_info(STATION_IF, &ipConfig);
      if(ipConfig.ip.addr != 0) {
        connState = WIFI_CONNECTED;
        os_printf("WiFi connected\n");
        os_printf("Start TCP connecting...\n");
        connState = TCP_CONNECTING;
        senddata();
        return;
      }
      break;
    } case STATION_WRONG_PASSWORD: {
      connState = WIFI_CONNECTING_ERROR;
      station_config stationConf;
      wifi_station_get_config(&stationConf);
      os_printf(
        "WiFi connecting error, wrong password: |%s=>%s|\n",
        stationConf.ssid, stationConf.password);
      break;
    } case STATION_NO_AP_FOUND:
      connState = WIFI_CONNECTING_ERROR;
      os_printf("WiFi connecting error, ap not found\n");
      break;
    case STATION_CONNECT_FAIL:
      connState = WIFI_CONNECTING_ERROR;
      os_printf("WiFi connecting fail\n");
      break;
    default:
      connState = WIFI_CONNECTING;
      os_printf("WiFi connecting...\n");
  }
  os_timer_setfn(&WiFiLinker, wifi_check_ip, NULL);
  os_timer_arm(&WiFiLinker, 1000, 0);
}

void ICACHE_FLASH_ATTR
user_init() {
  uart_div_modify(0, UART_CLK_FREQ / BIT_RATE_115200);
  uart_div_modify(1, UART_CLK_FREQ / BIT_RATE_115200);
  os_printf("Start init\n");

  // Проверяем если платы была не в режиме клиента AP, то переводим её в этот режим
  // В версии SDK ниже 0.9.2 после wifi_set_opmode нужно было делать system_restart
  if(wifi_get_opmode() != STATION_MODE)
    wifi_set_opmode(STATION_MODE);

  // Плата в режиме STA, устанавливаем конфигурацию, имя AP, пароль, см. user_config.h
  if (wifi_get_opmode() == STATION_MODE) {
    station_config stationConf; // = {"dlink", "CrjhjGkfythrf!Lf!"};
    //wifi_station_get_config(&stationConf);
    os_memset(&stationConf, 0, sizeof(stationConf));
    os_memcpy(&stationConf.ssid, ssid, os_strlen(ssid) + 1);
    os_memcpy(&stationConf.password, password, os_strlen(password) + 1);
    wifi_station_set_config(&stationConf);
//     wifi_station_connect();
//     wifi_station_dhcpc_start();
    wifi_station_set_auto_connect(1);
  }
  btn_init();
  //Disarm timer
  os_timer_disarm(&WiFiLinker);
  os_timer_setfn(&WiFiLinker, wifi_check_ip, NULL);
  os_timer_arm(&WiFiLinker, 1000, 0);
}
ОС Kubuntu 14.04
 

tonal

New member
Развернул виртуалку от Espressif, пересобрал прошивку под разными SDK 1.5.0, 1.4.1_pre5 и 1.4.0
Есть некоторые отличия, но по сути получаю примерно тоже - серию разных Fatal exception.
Т. е. проблема не в моей корявой сборке тулчейна...
Может кто подскажет, куда копать?
 

Victor

Administrator
Команда форума
Может кто подскажет, куда копать?
А что-то я у вас вообще не увидел [inline]void ICACHE_FLASH_ATTR user_rf_pre_init(void)[/inline]
Без нее вроде вообще не должно работать
Еще может имеет смысл сделать [inline]void ICACHE_FLASH_ATTR wifi_handle_event_cb(System_Event_t *evt)[/inline] (в документации есть пример)
что бы видеть, что там происходит
 

tonal

New member
Дело было в железе. Поставили на вход питания кондёр электролитический - стало устойчиво работать. :)

Про user_rf_pre_init - вроде в стандартных примерах её нет, например здесь: http://bbs.espressif.com/viewtopic.php?f=31&t=228
Так что если кто-нибудь объяснит зачем она нужна и когда вызывается - буду признателен.

Про wifi_handle_event_cb - спасибо. Буду иметь в виду.
Можно попробовать использовать вместо таймера проверки состояния. :)
 
Сверху Снизу