Wifi przerywa zapis do flash na ESP8266

wisipior
Posts: 2
Joined: Mon Jul 04, 2022 10:16 pm

Post

Czołem mam problem nieznajomości natury ESP8266. Używam bibliotek 3.0.2 ESP8266 w Arduino IDE

Ogólnie komponuję sterowanie zaworem CO przez centralę zbierającą dane z czujnika. Jest zatem para czujnik ESP8266 klient WiFI i centrala ESP8266 access point.

W jakimś momencie muszę pobrać plik z centrali do pamięci flash czujnika.
Problem w tym, że sekwencyjny zapis do flash przechodzi bez czkawki tylko jeśli WiFi nie nawiązało połączenia.

Odizolowałem kod na tyle, że zwykły zapis sekwencyjny bufora pełnego zer ukończy się poprawnie tylko jeśli zakomentuję WiFi.begin (czego nie zakładam robić).

Jak to możliwe że samo połączenie WiFi powoduje exception w pętli zapisu do flash ??
Dlaczego aktywne połączenie Wifi zakłóca zapis do flash ??
Odnotowałem że nie dzieje się tak podczas odczytu zaś exception pojawia się dokładnie po zapisaniu 32-go bloku 1024 bajtów.

Code: Select all


/*
  WiFi.persistent(false);
  WiFi.mode(WIFI_STA);
  WiFi.begin("ssid", "passwd");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(100);
  }
  Serial.println("Connected.");
*/ - if commented out it would complete fine

char fnam[] = "/server.bin";
uint8_t buf[1024] = {0};

  yield();
  Serial.flush();
  LittleFS.remove(fnam);
  Serial.flush();      
  File f = LittleFS.open(fnam, "w");
  int len = 0;
  if (!f)
    Serial.println("error file not opened");
  else {
    Serial.println("opened");
    while (len < 200) {
      yield();
      Serial.flush();      
      f.write(buf, 1024);
      delay(100);
      len++;
    }
    f.flush();              
  }
  f.close();
User avatar
klew
Posts: 13907
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

Jaki powód resetu? Może jakiś watchdog? Jeśli tak, to spróbuj dać gdzieś delay(0), aby inne zadania miały chwilę dla siebie
Najlepsze suple dla Twojego domu :mrgreen:
wisipior
Posts: 2
Joined: Mon Jul 04, 2022 10:16 pm

Post

sęk w tym że jest delay(100)
User avatar
pzygmunt
Posts: 20302
Joined: Tue Jan 19, 2016 9:26 am
Location: Paczków
Been thanked: 59 times

Post

ESP nie potrafi zapisywać małych fragmentów danych. ESP zapisuje całe sektory po 1024 bajty. Nie możesz sobie zapisać dowolnego adresu.
Jeśli przekroczyłeś ilośc cykli zapisu to czas zapisu radykalnie rośnie co powoduje, że zapis do flash walczy o czas magistrali z komunikacją WiFi.
SUPLA.... Nareszcie w domu.

Return to “Pomoc”