logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

ESP8266 - specyfikacja zakończenia odpowiedzi AT (CR, LF, CR CR LF?)

robiw 12 Lut 2017 15:44 3234 13
  • #1 16272988
    robiw
    Poziom 26  
    Posty: 2032
    Pomógł: 25
    Ocena: 133
    Witam Kolegów,
    Moje pytanie dotyczy specyfikacji odpowiedzi modemu ESP8266 wysyłanych do mikrokontrolera (USART, 115200bps). Czy każda odpowiedź modemu kończy się parą znaków CR i LF, a może być to CR CR i LF czy jeszcze inaczej? Napisałem prostą funkcję opartą o ISR odbiornika USART, która każdy bajt przychodzący zapamiętuje w C-stringu, aż do napotkania znaku LF. Po jego napotkaniu zwraca C-string, jako odpowiedź modułu (przepisuje C-string funkcji ISR do innego C-stringa dla funkcji main - takie buforowanie)...no i właśnie, nie zawsze działa to dobrze. Np. odpowiedź modułu "CONNECT" zwraca tylko jako "CO"..., nie zwraca dla przykładu znaku ">", który modem wysyła w oczekiwaniu na dane TCP...itd. Ma ktoś jakieś doświadczenia w tej materii? Z góry serdeczne dzięki... robiw

    PS.
    Nie umieszczam kodu, który jest banalnie prosty, bo jestem poza domem bez dostępu do komputera, w którym go mam.
  • #2 16273387
    Konto nie istnieje
    Konto nie istnieje  
  • #5 16275038
    grko
    Poziom 33  
    Posty: 1386
    Pomógł: 247
    Ocena: 141
    @robiw Może po prostu kolejne dane od ESP8266 nadpisują Ci dane w modemReply zanim je zdążysz wyświetlić na porcie szeregowym.
  • #6 16275057
    robiw
    Poziom 26  
    Posty: 2032
    Pomógł: 25
    Ocena: 133
    Nie, bo one przychodzą rzadko. Zmniejszyłem prędkość ze standardowych 115200 na 9600 i działa jakby lepiej, tzn. przychodzi już cała odpowiedź "CONNECT" a nie tylko "CO". Pytanie, czy każda linia odpowiedzi modemu zakończona jest sekwencją bajtów CR+LF? robiw
  • #7 16275081
    Konto nie istnieje
    Konto nie istnieje  
  • #8 16275135
    Konto nie istnieje
    Konto nie istnieje  
  • #9 16275224
    grko
    Poziom 33  
    Posty: 1386
    Pomógł: 247
    Ocena: 141
    @Piotrus_999 Używanie pętli for zamiast standardowych funkcji memcpy/strcpy. Świetny pomysł na zastępowanie specjalnie zoptymalizowanej dla AVR funkcji na rzecz tępej pętli for.

    @robiw Możesz uniknąć tego kopiowania robiąc sobie 2 bufory. Jeden wypełniasz w przerwaniu a z drugiego korzystasz w wątku głównym. Po otrzymaniu znaku końca linii zmieniasz po prostu po prostu wskaźnik na aktywny bufor.
  • #10 16275328
    Konto nie istnieje
    Konto nie istnieje  
  • #11 16275348
    Konto nie istnieje
    Konto nie istnieje  
  • #12 16275361
    Konto nie istnieje
    Konto nie istnieje  
  • #13 16275455
    robiw
    Poziom 26  
    Posty: 2032
    Pomógł: 25
    Ocena: 133
    Jutro sprawdzę dokładnie, ale wydaje się, że po zmniejszeniu prędkości do 9600 bps wszystko "śmiga" lepiej. Procesor taktowany jest 11.059MHz, więc te 115200 bps to nie było dla niego mało, zwłaszcza, że docelowo w przerwaniu mają być parsowane dane do wielu zmiennych zebranych w strukturę. W Realterm'ie podglądałem i linie kończone są albo sekwencją CR+LF lub znacznie częściej samym LF. Wyjątkiem jest OK, który występuje, jako sekwencja CR+LF OK CR+LF. Czasami w odpowiedziach pojawia się też sam LF... robiw
  • #14 16282252
    dondu
    VIP Zasłużony dla elektroda
    Posty: 13906
    Pomógł: 1292
    Ocena: 809
    robiw napisał:
    W Realterm'ie podglądałem i linie kończone są albo sekwencją CR+LF lub znacznie częściej samym LF. Wyjątkiem jest OK, który występuje, jako sekwencja CR+LF OK CR+LF. Czasami w odpowiedziach pojawia się też sam LF... robiw

    A jaki tryb wyświetlania wybrałeś Ansi? Ascii? ... oba są złe, bo Realterm nie wyświetla wszystkich odebranych bajtów.

    Zawsze podglądaj w trybie Hex, najlepiej Hex+Ascii.

Podsumowanie tematu

LABEL_AI_GENERATED
Dyskusja dotyczy specyfikacji odpowiedzi modemu ESP8266, szczególnie zakończenia odpowiedzi w formacie CR, LF oraz ich kombinacji. Użytkownik zauważa problemy z odbiorem danych przez USART, gdzie niektóre odpowiedzi są niekompletne. Inni uczestnicy sugerują, że problem może wynikać z nadpisywania danych w buforze lub niewłaściwego użycia funkcji kopiujących w przerwaniach. Zmniejszenie prędkości transmisji z 115200 bps do 9600 bps poprawiło sytuację, a odpowiedzi modemu często kończą się sekwencją LF lub CR+LF. Użytkownicy zalecają użycie narzędzi do monitorowania, takich jak Realterm, aby lepiej analizować odbierane dane.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA