Elektroda.pl
Elektroda.pl
X
Elektroda.pl
PCBway
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Programator USB dla mikrokontrolerów AVR

Errr 24 Cze 2007 15:07 203694 496
  • #91
    firefox_PL
    Poziom 17  
    oto właśnie chodzi w tym programatorze, że on się nie komunikuje przez wirtualny port COM, tylko jako zwykłe urządzenie usb, tak powinno być
  • PCBway
  • #92
    ajs$
    Poziom 11  
    Witam!
    zrobiłem sobie programator z tej strony http://www.fischl.de/usbasp/ zaprogramowałem go i zainstalowalem sterowniki wszystko jak nalezy według opisu , chcę go teraz wyprubować z jakimi programami współpracuje ten programator sciągnołem tez z tej strony AVRDUDE ale jakoś nie idzie uruchomić tego programu
    A i jeszcze jedno pytanko czy da rade tym programatorem zaprogramować 90s2313
  • #93
    Klima
    Poziom 30  
    ajs$ napisał:
    tez z tej strony AVRDUDE ale jakoś nie idzie uruchomić tego programu


    Ten program działa w trybie tekstowym. Uruchom sobie konsolę i potem avrdude. No i poczytaj dokumentację. Albo ściągnij sobie dodatkowo jakiś program-nakładkę na AVRDUDE.

    Tak, da radę zaprogramować 90s2313
  • PCBway
  • #94
    ajs$
    Poziom 11  
    ok. a jaką konsolę bo nie bardzo rozumiem z programowania to jestem troche zielony
  • #97
    janu78
    Poziom 10  
    Witam! pobrałem ten avrdude-gui z tej stronki co podales a jak tam ustawić porty bo są tam tylko lpt i com nie widze usb . Jest moze jakis inny program jakis prosty.
    pozdr.
  • #99
    ajs$
    Poziom 11  
    Witam a czy w tym avr8 burn-o-mat pujdzie zaprogramować 90s2313 bo niebył tam wypisany tylko attiny2313
  • #100
    firefox_PL
    Poziom 17  
    nie wiem nie probowałem, ponieważ 90s2313 nie są już nigdzie dostępne, seria została zastąpiona właśnie przez attiny2313
  • #101
    Klima
    Poziom 30  
    Jeśli AVRDUDE obsługuje 90s2313 (a nie widzę powodu, żeby nie obsługiwał - chyba nie wywalili jego obsługi z nowych wersji - to by było bez sensu), to nie ma problemu. A co? W tych narzędziach GUI nie da rady wybrać 90s2313?
  • #102
    piotrret
    Poziom 12  
    Czy w opisywanym przez Was programatorze ze strony http://www.fischl.de/usbasp/ piny TXD i RXD są wyprowadzone na złącze ISP w jakimś konkretnym celu ?
    Nie znalazłem żadnej informacji na ten temat, a właśnie zbudowałem to cudo i działa naprawdę super. Teraz przymierzam się do płytki i nie wiem czy warto ciągnąć ścieżki od tych pinów do złącza ISP.
    Gdyby się okazało, że nie trzeba to zawsze w jakimś stopniu uprości to układ ścieżek.
  • #103
    McRancor
    VIP Zasłużony dla elektroda
    Zostały one wyprowadzone przez autora "na przyszłość"
    Cytat:

    Planned: serial interface to target (e.g. for debugging).

    Nie warto ciągnąć tych ścieżek, wygląda na to że autor już odpuścił sobie ten projekt, a nawet jeśli to najwyżej kiedyś pociągniesz dwie dodatkowe ścieżki kablem.
  • #104
    ajs$
    Poziom 11  
    Witam ponownie !
    Dalej mecze sie z tym programatorem od fischl nie wiem czy coś źle robie ale probowałem różnych programów i żaden go nie widzi programator chyba działa bo po zaprogramowaniu atmegi Windows wykrył go jako nowe urządzenie i zainstalował sterowniki już mi ręce opadają . Jeszcze jedno gdzie mogę znaleźć jakiś opis po polsku obsługi programu avrdude.
    pzdr.
  • #105
    bobbyAIR
    Poziom 20  
    No i nawiązując do poprzednich pytań faktycznie diody zenera 3V3 na liniach danych rozwiązały problem laptopa
  • #106
    ajs$
    Poziom 11  
    Witam!
    W jakim kierunku te diody zenera wlutować ?
    pozdr.
  • #107
    BoskiDialer
    Poziom 34  
    w kierunku zaporowym - taka konfiguracja, w której zwykła dioda nigdy by nieprzewodziła (napięcie przebicia powyżej 50V), a dioda zenera tak (napięcie przebicia 3V3)

    Przy okazji jak już pisze post, to dodam coś od siebie na temat usbasp, którego też zbudowałem - właściwie budowa go zajęła mi 1 dzień (łącznie z wycieczką do sklepu, projektowaniem płyki, przeprojektowywaniem softu etc), warto było, tyle że soft ma jeden poważny błąd - we wszystkich komunikatach odczytu i zapisu pamięci flash adresy są przekazywane zawsze jako 16bitów (z wyjątkiem, kiedy sekwencje są generowane przez sterownik usbasp w avrdude) - efekt? atmega128 da się zaprogramować plikiem max 64KB (czyli połowa z całości) co jest wynikiem 2 błędów - w sterowniku po stronie komputera (ucinanie adresu do 16 bitów) i po stronie łącza (przesyłane 16 bitów). Udało mi się zaprogramować całą atmegę128, ale wymagało to pewnej modyfikacji w pliku konfiguracyjnym do avr-dude: skopiowanie definicji pamięci "flash" i zapisanie jako "flesz" - odwoływanie się do tej drugiej powoduje generowanie sekwencji odczytu po stronie sterownika, co usuwa ograniczenie, ale wydłuża czas całego zapisu/odczytu z 18s do około 400s!! (na każdy bajt pamięci flash przypadają 3 komunikaty usb, zamiast 1 na 8 bajtów).

    programator bardzo fajny. dobrze, że mój soft na atmegę128 ma aktualnie poniżej 14KB...
  • #108
    ajs$
    Poziom 11  
    Witam!
    Mógł byś mi ten kierunek diod na schemacie pokazać
    Dzięki
  • #109
    mrtip
    Poziom 13  
    Witam

    Skompilowałem w całość odpowiednie pliki służące do stworzenia kompletnego programatora AVR przez USB.


    W katalogu:
    BIN - są skompilowane biny pod atMega8 i atMega48
    są sterowniki do USB na PC pod Windows

    Firmware - są oryginały źródeł

    Graficzne - jest schemat, PCB Layer, rzut 3D

    SourceAVRStudio - dodatkowo dodałem źródła w C dostosowane do AVRStudio 4.12

    Wszystko oczywiście nie jest moim dziełem, wychodzę z założenia, że jeśli ktoś się męczył raz nie będę tego powielał
    oraz jeśli robię coś aby zarobić to męczę się sam by nie przybijać sobie czyjejś etykietki.
    Załączniki:
  • #110
    bobbyAIR
    Poziom 20  
    Boski Dialer:
    Ciekawi mnie trochę co piszesz ze względu na fakt iż programatorem tym programowałem takie same programatory a co za tym idzie wciskałem w AtMegę8 prawie 8kB programu i nie było z tym problemu. Wprawdzie korzystam z niego pod Linuxem ale to znaczenia nie ma ponieważ driver jest ten sam (libUSB). Podobnie avrdude kompilowane na Winzgrozę i Linuxa działą tak samo.
  • #111
    BoskiDialer
    Poziom 34  
    bobbyAIR: nie chodzi mi o 8KB, tylko o 128KB - połowy nieda się zaprogramować (blędy w kodzie, ograniczenie przesyłanego adresu do 16 bitów). Wiem, że błąd jest w kodzie od usbasp oraz w sterowniku w avrdude.. aktualnie u mnie (po zmianie konfiga) avrdude widzi, że atmega128 ma 64KB - i niema żadnego problemu ;]
  • #112
    KwoiteK
    Poziom 16  
    BoskiDialer. po praru dniach meczenia doszedlem do tego samego. przy zapisywanie wiecejj niz 64k pojawiaja sie bledy.
    tylko ze druga polowke tez zapisuje. niezgodnosc jest tylko powyzej 10 kb dla kazdej polowki.
    ps. nie jest konieczne wysylanie wiecej niz 2bajty adresu. hex i tak zawiera adresy 2 bajtowe. tylko po 64k "jest komenda wyboru drugiej polowki". walczylem z tym troche i sie poddalem.
    przerzucam sie na stk200 i 4 minuty programowania ;(

    pozdrawiam
  • #113
    bobbyAIR
    Poziom 20  
    Boski Dialer:
    Nie programowałem nigdy M128 bo nie miałem potrzeby. Jednak dalej nie pasuje mi błąd w "sterowniku w avrdude". Moze czepiam sie nomenklatury ale avrdude nie ma sterownika do USBasp bo ten działa na libusb.
    Swoją droga już któraś wersja softu dla tego programatora jest dostępna i średnio chce mi się wierzyć, że jeszcze nikt nie wykrył tego błędu. Muszę przyznać, że mnie zaintrygowałeś.

    Swoja drogą jesli avrdude po zmianie konfiguracji dalej widzi Ci 64KB to chyba jednak za mało :P
  • #114
    BoskiDialer
    Poziom 34  
    Cytat:
    D:\BoskiD>avrdude -c usbasp -p atmega128

    avrdude: AVR device initialized and ready to accept instructions

    Reading | ################################################## | 100% 0.02s

    avrdude: Device signature = 0x1e9702

    avrdude: safemode: Fuses OK

    avrdude done. Thank you.


    D:\BoskiD>

    libusb co prawda jest instalowany jako jeden z plików sterownika do usbasp, to jest on jednak tylko interfejsem do komunikacji z usbasp - wynika to z tąd, że libusb może być wykorzystany do łączenia się z każdym urządzeniem usb - gdyby był ściśle wykorzystywany do usbasp, to nazwał bym go sterownikiem.
    Dla tego sterownikiem nazywam kod, który łączy sam silnik avrdude z libusb - dokładnie, to są to pliki usbasp.c i usbasp.h w źródłach avrdude.
    Co do mojej konfiguracji - specjalnie zmniejszyłem w konfigu rozmiar pamięci flash do 64KB - problem ujawnia się przy odczycie - pierwsze 64KB odczytują się poprawnie, kolejne 64KB jest mapowane z dolnych 64 - odczytać można więc tylko połowę (z powodu tracenia jednego bitu adresoweg) - dla mnie oznacza to, że zapis powyżej 64KB jest niemożliwy - nie przejdzie weryfikacji - a zresztą sam zapis też nie jest możliwy z powodu tego samego błędu... jeśli mam Ci wytknąć dokładnie linijki odpowiedzialne za ten błąd, to masz:
    avrdude-5.4/usbasp.c; wewnątrz funkcji "usbasp_paged_load"; linie 319-320:
    Code:

        cmd[0] = address & 0xFF;
        cmd[1] = address >> 8;

    tutaj widać, że przy odczycie pamięci adres jest ograniczany do 16 bitów - jeden bit jest tracony, dla tego nie da się odczytać 128KB pamięci flash

    avrdude-5.4/usbasp.c; wewnątrz funkcji "usbasp_paged_write"; linie 369-370
    Code:

        cmd[0] = address & 0xFF;
        cmd[1] = address >> 8;

    przy zapisie jak widać też jest ten błąd - wysyłane jest 16 bitów z 17, przez co zapis stron dalszą połowę pamięci flash jest niemożliwy.

    te same błędy (ograniczanie do 16 bitów) widziane w firmware od usbasp:
    main.c; wewnątrz "usbFunctionSetup"
    Code:
       } else if (data[1] == USBASP_FUNC_READFLASH)
    
       {
          prog_address = (data[3] << 8) | data[2];    // <<-- ta linia składa adres tylko z 16 bitów.
          prog_nbytes = (data[7] << 8) | data[6];
          prog_state = PROG_STATE_READFLASH;
          len = 0xff; /* multiple in */

    Code:

       } else if (data[1] == USBASP_FUNC_WRITEFLASH)
       {
          prog_address = (data[3] << 8) | data[2]; // <--- ta linia
          prog_pagesize = data[4];
       (....)


    problem występuje tylko przy wykorzystaniu specjalizowanych funkcji do odczytu i zapisu pamięci flash - jeśli się zmusi avrdude, aby sam generował sekwencje zapisu, wtedy wogóle ten kod z błędami jest pomijany - instrukcje są wysyłane inną, wolniejszą metodą.

    Jak widać ogólnie problemem jest to, że Thomas Fischl nie przewidział, że adresy mogą mieć więcej niż 16 bitów. Narazie nie zastanawiam się nad napisaniem swojej łatki, ale jeśli rozmiar mojego kodu dojdzie do 60KB, to napewno coś zrobie w tym kierunku - tak czy inaczej mi ten problem doskwierać nie może...

    Dodano po 1 [godziny] 5 [minuty]:

    Jeśli znajdzie się ktoś, kto pomoże mi skompilować avrdude w środowisku windows, to zrobie łatkę w trybie natychmiastowym :) poprostu nigdy niekompilowałem programów linuxowych pod windą, a łatkę chce najpierw przetestować. Łatkę na firmware w usbasp już mam napisaną, ale wymaga ona lekko zmienionego sterownika w avrdude.
  • #115
    bobbyAIR
    Poziom 20  
    BoskiDialer napisał:
    Jeśli znajdzie się ktoś, kto pomoże mi skompilować avrdude w środowisku windows, to zrobie łatkę w trybie natychmiastowym

    Napisz, potestuje na linuxie a na windows sie przkompiluje kiedy juz sprawdzi sie wszystko.

    Swoja droga na pierwszy rzut oka poprawic to nie jest trudno
  • #117
    BoskiDialer
    Poziom 34  
    Problem okazuje się bardziej rozproszony niz mi się to wydawało... waśnie pisze większą łatkę na firmware...
    ps. udało mi się wkońcu skompilować avrdude - niema to jak upór :) gdyby każdy był tak uparty, to na forum nic by się niedziało :)

    Dodano po 13 [minuty]:

    właśnie musze wyjechać (kilka h), ale wszystko mam już gotowe - jak wróce, to wrzuce
  • #118
    bobbyAIR
    Poziom 20  
    avrdude spatchował sie i skompilował bez problemu. gorzej z softem dla usbasp:
    Code:

    [bobby@bobby firmware]$ patch < usbasp-fix-longaddress.diff
    (Stripping trailing CRs from patch.)
    patching file main.c
    Hunk #1 FAILED at 10.
    Hunk #2 FAILED at 33.
    Hunk #3 FAILED at 53.
    Hunk #4 FAILED at 66.
    Hunk #5 FAILED at 90.
    Hunk #6 FAILED at 108.
    Hunk #7 FAILED at 121.
    7 out of 7 hunks FAILED -- saving rejects to file main.c.rej
    [bobby@bobby firmware]$

    Zrobiłem to ręcznie i poprawiłem diff'a ( w załączniku )

    Drugi błąd to
    Code:

    main.c:137: warning: left shift count >= width of type
    main.c:137: warning: left shift count >= width of type

    w lini
    Code:

    prog_address = data[2] | (data[3] << 8) | (data[4] << 16) | (data[5] << 24);

    To też pozwoliłem sobie poprawić i umieścić w diff'ie
    Ciekawe tylko czy to wystarczy :P


    To ja się biorę za lutowanie w takim razie, do potem
  • #119
    BoskiDialer
    Poziom 34  
    nie.. to akurat nie wystarcza.. błąd jest bardziej rozproszony.. zaraz wszystko przygotuje i wrzuce..

    Dodano po 21 [minuty]:

    Dobra.. czyli łatka na sterownik w avrdude się niezmieniła. zmianie uległa tylko łatka na firmware. Teraz to można czytać i zapisywać całość :)

    Za wczasu o ile pamiętam: przydało by się skompilować firmware dla innych, a łatkę na avrdude postarać się, aby była zaaplikowana w repozytorium avrdude.
    Co jeszcze warto napiasć - łatka na usbasp i avrdude jest kompatybilna w obie strony - stare usbasp z nowym avrdude musi działać, tak samo nowe usbasp ze starym avrdude..
  • #120
    bobbyAIR
    Poziom 20  
    BoskiDialer napisał:

    Za wczasu o ile pamiętam: przydało by się skompilować firmware dla innych

    Oj tam, starczy udostępnić spatchowany ( bo jak znam życie używanie patcha potrafi przerosnąć ), makefile jest w środku ;)

    BoskiDialer napisał:

    a łatkę na avrdude postarać się, aby była zaaplikowana w repozytorium avrdude.

    Tu się zgadzam:)
    BoskiDialer napisał:

    Co jeszcze warto napiasć - łatka na usbasp i avrdude jest kompatybilna w obie strony - stare usbasp z nowym avrdude musi działać, tak samo nowe usbasp ze starym avrdude..

    Sprawdziłem i potwierdzam nawet screenem z minicoma. Jedno czego nie sprawdziłem to czy zaprogramuje wiecej niż 64KB bo akurat nie mam Atmegi128. Ale pewnie ty to zrobiłeś

    PS: Modyfikując nieoryginalny main.c tworzysz nieporawny plik diff ( coś się nie zgadza z liniami w stosunku do tego z paczki - nie chciało mi się szukac co ). Poprawiłem go i załączam na przyszłość
    Przy okazji załącze również pliki firmwaru dla usbasp w postaci Intel Hex i Motorola Srecord.

    Napisałem już do admina projektu avrdude w tej sprawie. Gorzej z Fischl bo do niego pisałem pare dni temu w innej sprawie i chyba ignoruje maile ;)