Witam Mam pytanko odnosnie protokolu transmisji XMODEM. Na czym dokladnie polega programowa obsluga tego protokolu? Znalazlem gdzies ze wysyla sie paczki po
128 bajtow danych do ktorych dolacza sie sume kontrolna. Jaka jest zasada obliczania sumy kontrolnej? Pisze programik w asemblerze na ATMega8 mam do tego AT45DB041B- musze przeslac dane z tej pamieci (4MB) do kompa za pomoca RS-232 i chce wykorzystac wlasnie protokol XMODEM tylko nie wiem jak sie do tego zabrac. Bylbym wdzieczny gdyby ktos mogl co nieco napisac na temat tego protokolu
Dzieki za pomoc Krzysiek
Didn't find your answer? Ask the community — no account required.
B
B
Nie powiem ci jak dziala XMODEM. Nie rozbierałem go. Ale wiem co nieco na temat zupelnie rownowaznego YMODEM Na wstepie pare pytan:
1) Czy ATMega obsluzy transmisje 115200 lub 230400 bps? Nawet na 115200 bps wyrzucenie 4MB trwa bardzo dlugo (ponad 6 min).
2) Ile pamieci RAM masz do dyspozycji? Jak duzy bufor mozesz wygospodarowac?
3) Czy to koniecznie musi byc w ASM?
4) Jakim programem zamierzasz odbierac te dane?
B.
K
Krzy$
ale z tego co wiem xmodem jest latwiejszy do zrealizowania
przy moim kwarcu (4Mhz) raczej nie
zgadza sie ze dlugo ale, co zrobic
wygospodarowac? Moge wygospodarowac 100MB
no raczej tak, bo w asm mam caly program
jeszcze nie wiem, ale myslalem zeby odebrac dane dowolnym terminalem np. Tera Term i zrobic osobny programik np w BCB zeby sformatowal te dane do czytelnej postaci i zapisal do jakiegos pliku txt. To jest rejestrator wiec dane beda zawieraly czas pomiaru i watosc (17 bitow±) Pzdr Krzysiek
B
B
O tyle ze najprostsza wersja XMODEM nie liczy sumy kontrolnej CRC16 i przesyla standardowo pakiety 128 bajtow.
Pamiec z twojego postu ma 4Mbit a nie MB. Jest to zatem 512KB
ATMega8 ma 1KB pamieci. O jakie zatem 100MB chodzi? Wyglada na to ze nie da sie zrealizowac transmisji pakietami po 1KB i trzeba bedzie stosowac pakiety 128B. Dobry program terminalowy powinien byc przygotowany na odbior obu typow pakietow nawet jesli beda one przemieszane ze sobą.
Do transmitowania plikow binarnych lepiej jednak uzyc protokolu z liczeniem kodu CRC. Szanse przemkniecia sie bledu sa minimalne. Czyli albo XMODEM-CRC albo YMODEM.
J
Jurek Szczesiul
Tue, 18 May 2004 00:19:25 +0200, na pl.misc.elektronika, Krzy$ napisał(a):
Wewnętrzny ? To jest gorszy problem - jak spojrzysz w tabele, to zobaczysz, że w typowym szeregu z odpowiednio niskim błędem da się uzyskać co najwyżej 38,4 kbaud.
Problem rozwiążesz stosując konwerter usb ft8u232 - tam można dowolnie ustawić szybkość portu. A przy tym możesz wtedy wycisnąć 0,5 Mbaud
IMHO nie nadzwyczajny pomysł - ale to zależy jak stoisz z programowaniem PC. Najlepszy byłby program dedykowany, i to w dodatku pracujący jako master, a atmega jako slave ( czyli strona bierna, realizująca komendy ). Wtedy sprawy wychodzą dużo prościej :
- program żąda od atmegi wielkości bloku do przesłania ( nie musi to być przecież chyba za każdym razem cała pamięć ) i określa liczbę potrzebnych ramek ( rozmiar ramki powinien być możliwie największy - to dobrze robi na wydajność transferu usb - zależy ile nawrzucałeś zmiennych i jak mocno obciążasz stos, ale realnie pewnie z 500 B da się uzyskać ).
- wtedy żąda przesłania kolejnej ramki i czeka - jak dostanie to sprawdza sumę kontrolną; jeśli dobra to zapis do bufora, aktualizacja wskaźnika postępu i dawaj nastepną, jeśli zła to powtórz; jeśli kilka prób zawodzi lub brak odpowiedzi - to zgłaszaj błąd transmisji
- jak skończy to formatuje sobie dane z bufora i zapisuje w dowolny sposób
R
RoMan Mandziejewicz
'Oficjalne' wersje Xmodem są co najmniej dwie: zwykła i CRC. Potem zaczynają się schody, bo okazuje się, że siakoś niektórzy inaczej liczyli CRC a jeszcze inni zastosowali zamiast CRC-16 - CRC-32... Xmodem jest jednym z paskudniejszych protokołów i sprawiający najwięcej kłopotów we współpracy. Ymodem miał załatwić problem, ale okazało się, że tu również są pomysły... Ymodem, Ymodem1k, Ymodem-1kG. Stosunkowo najlepiej z popularnych protokołów zachowuje się Zmodem, ale jego implementacja nie jest tak prosta jak Xmodem. Ale zalet dużo
- tyle, że dla transmisji modemowej: zmienna długość bloku, transmisja NAK a nie ACK, wznowienie transmisji po zerwaniu itd.
[...]
J
Jacek R. Radzikowski
[...]
Nie wiem jaki jest format pakietu w Xmodemie, ale jesli suma kontrolna jest na koncu, to nie potrzeba przygotowywac calego pakietu przed wyslaniem. Dane z pamieci mozna czytac na biezaco, sume liczyc w miare pojawiania odczytywania pamieci. Do tego wystarczy miec pod reka kilka bajtow. Nawet jesli w naglowku pakiety sa informacje, ktore sa wyliczane z wysylanych danych, tez nie potrzeba przygotowywac calego pakietu przed wyslaniem. Mozna policzyc je wczesniej, kosztem dwukrotnego siegania do pamieci
pzdr. j.
B
B
Sume kontrolna mozna liczyc w locie, bo jest transmitowana na koncu bloku. Jednak jesli ma sie do dyspozycji wiecej pamieci odsobne przygotowanie danych, obliczenie sumy i wysylka dodaja procedurze przejrzystosci. Niemniej nic nie stoi na przeszkodzie zeby zastosowac Pana sugestie.
B.
B
B
Biorac pod uwage ograniczone zasoby ATMegi najoszczedniejszy bedzie XMODEM w wersji standartowej ze 128 bajtowymi pakietami i suma kontrolna liczona jako suma modulo 256 wszystkich bajtow w bloku danych pakietu. Jedyna zagadka pozostaje ktorą z licznych mutacji XMODEM obsluguje program terminalowy.
B.
Join the Discussion
Have something to add? Share your thoughts — no account required.
Didn't find your answer?
Ask the community — no account required
Report Content
You are reporting this content to the moderators. They will look at it
ASAP.