Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Programator pamięci flash SPI z interfejsem USB

oloam 19 Sep 2013 23:59 17223 13
  • Programator pamięci flash SPI z interfejsem USB

    Programator powstał dzięki prośbie znajomego, który potrzebuje zaprogramować pamięci flash od czasu do czasu, jak i również dla własnej potrzeby podnoszenia swoich umiejętności programistycznych :D.
    Założenia były dwa:
    -ma czytać, kasować, programować pamięci flash
    -komunikacja musi odbywać się za pośrednictwem interfejsu USB

    Na poczatku programator miał być oparty na mikrokontrolerze z rodziny LPC arm7. Niestety implementacja klasy hid, którą jako jedyną udało mi się napisać, mimo poprawnej komunikacji z programem na PC, nie była dla mnie zadowalająca ze względu na prędkość transferu.
    Drugie podejście to chip ftdi - tu tak samo mimo dobrych chęci nie udało mi się "wyciągnąć" maksymalnej prędkości 3mbit.
    W końcu z szuflady została wyciągnięta płytka Stellaris Launchpad. Implementacja klasy bulk (dość mocno przerobiony program przykładowy) okazała się strzałem w 10.



    Programator wykorzystuje sprzętowy SPI:
    PD2 - MISO --> flash(soic8) SO pin2
    PD3 - MOSI --> flash(soic8) SI pin5
    PD0 - CLK --> flash(soic8) SCK pin6
    PA3 - CS --> flash(soic8) CS pin1

    Flash Pin3(WP) i pin7(HOLD) podłączone są do vcc (3,3v) .

    Sama płytka Stellaris Launchpad jest dostępna do zakupienia na stronach Texas Instrumensts za $7.99 (aktualnie promocja), więc wydaje się, że sam programator stał się chyba najtańszym urządzeniem z interfejsem USB na rynku :)

    Po stronie PC napisałem program, który jak to się mówi w żargonie programistów "nie jest odporny na idiotów", czyli wykonywanie czynności, które zgodnie z logiką nie powinny być wykonywane, może spowodował błąd programu (np. wgrywanie do flash mniejszego wsadu niż pojemność flash) lub nawet zawieszenie (odłączenie USB w trakcie odczytu czy programowania).
    Oprócz pliku wykonywalnego w folderze musi znajdować się plik settings.ini gdzie znajdują się informacje o wykorzystanych pamięciach. Plik ustawień ma specyficzną budowę i umożliwia użytkownikowi dopisanie własnej pamięci. Do programu dołączam przykładowy plik konfiguracyjny. Tak więc plik konfiguracyjny jest podzielony na sekcje, gdzie dana linijka w jednej sekcji opisuje ten sam flash co linijka na tej samej pozycji w innej sekcji.
    Sekcja [flash] zawiera nazwę flash, która pojawi się w rozwijalnej liście w programie oraz identyfikator pamięci, który należy wyszukać w datasheet pamięci. Dla ułatwienia po naciśnięciu w programie przycisku "Wykryj flash" zostanie wyświetlony nam identyfikator, dzięki czemu możemy dopisać z łatwością nasz flash jeżeli znamy jego pojemność a nie mamy datasheet, żeby sprawdzić ID.
    Sekcja [opis] jest czysto opisowa i linijka zostanie pokazana w programie na pasku statusu.
    Sekcja [iloscop] zawiera ilość stron do zaprogramowania podzielone przez 4 (do programatora wysyłane są paczki po 1024 bajty) i minus 1 (strony liczone są od zera).
    Jeżeli nasz programowany flash jest kompatybilny z innym znajdującym się w settings.ini możemy wybrać z listy rozwijalnej już wpisany flash.
    Zamieszczone pliki:
    wsad.zip - program dla Launchpad
    sterowniki.zip - jak sama nazwa wskazuje, sterowniki USB programatora
    programatorspi.zip - program wykonywalny dla pc z systemem Windows (testowane na XP i 7) i plik konfiguracyjny

    Póki co - projekt uważam za skończony, jednak jeżeli zajdzie potrzeba to dodam programowanie wg sektorów i tryb OTP.
    Na zdjęciu Launchpad z adapterem do adaptera z test socket.

    Cool? Ranking DIY
    Can you write similar article? Send message to me and you will get SD card 64GB.
    About Author
    oloam
    Level 22  
    Offline 
    oloam wrote 682 posts with rating 190, helped 50 times. Live in city PozagranicamiPolski. Been with us since 2013 year.
  • #2
    Romo324
    Level 11  
    Projekt fajny i bardzo praktyczny tylko wydaje mi się, że ta płytka do niego jest trochę na wyrost ;-) Od dłuższego czasu szukam jakiegoś programatora pamięci SPI na USB który sam mógł bym sobie poskładać. Projekt na przykład na wzór programatora SPI AVR STK500v2
  • #3
    maly_elektronik
    Level 23  
    To po prostu przerób programator usbasp :) Pliki konfiguracji po stronie PC wyciągniesz ze źródeł avrdude i zostanie tylko napisanie własnego programu na PC albo nawet dopisanie skryptu do avrdude, który pozwoli na programowanie zadanych pamięci.
  • #4
    oloam
    Level 22  
    @Romo324 co rozumiesz przez pojecie, ze plytka jest na wyrost? To ,ze siedzi tam cortex-m4? Po co sie ograniczac skoro za male pieniadze dostajemy dobra plytke developerska (chyba nie znajdzie sie tansza oferujaca podobne mozliwosci)? Analogicznie moge spytac czy widzac wypasionego pc w tej samej cenie co pc z dolnej polki powiesz ,ze ten super pc jest nie dla ciebie, poniewaz ty uzywasz tylko pc przegladania internetu ?

    Zapomnielem dodac czasy jakie wychodza mi przy programowaniu flash 32mbit (4mbyte) :
    -odczyt 20sek
    -zapis wraz z kasowaniem 50sek
    -zapis czystego flash 33sek

    W zaleznosci od konfiguracji kompa czasy moga byc nieco inne. Moj pc to 6 rdzeni 3,3ghz + 8gb ram. U kolegi (chyba pentium 1.7 + 1gb ram) czas odczytu wynosil 25sek
  • #5
    Romo324
    Level 11  
    Po prostu wydaje mi się, iż ściąganie modułu z za granicy żeby zaprogramować pamięć w czasie 30s, a nie np 5min jest trochę bez celowe. Chyba, że mówimy tu o seryjnym programowaniu :-)
    Można by to wykonać wiele taniej na podzespołach dostępnych w Polsce za połowę ceny. (AVR + konwerter napięć)
    Niestety w tej chwili nie jestem w stanie sam takiego urządzenia zaprojektować ponieważ nie zajmuję się programowaniem.

    Każde rozwiązanie jest dobre jeśli prowadzi do celu. Jeden do muchy będzie strzelał z armaty, kto inny użyje klepki :)
    Pozdrawiam i gratuluję projektu, Roman
  • #6
    oloam
    Level 22  
    Nie chce, zeby to wygladalo jako polemika o zabarwieniu negatywnym ale mam do Twojego zdania pewne ale...
    W dobie sklepow internetowych i kwoty wolnej od cla ,to chyba nie ma takiego czegos jak sprowadzanie z zagranicy. Wchoodzisz do sklepu gdzie jest najtaniej i kupujesz (w ti jest najtaniej i o ile dobrze pamietam przesylka jest darmowa). Rownie dobrze mozesz zakupic ta plytke w farnell pl tyle,ze przeplacisz. Jak pisalem wczesniej za $7.99 (aktualnie) kupujesz plytke, do ktorej nic wiecej nie potrzebujesz (nawet dostajesz kabel usb)(!). Jezeli w Polsce z AVR zlozysz to taniej (oczywiscie trzeba doliczyc programator) to gratuluje dostawcy komponentow.
    Wlasnie w moim przypadku moge powiedziec, ze wybor byl jak najbardziej trafny, mimo ze posiadam kilkanascie avr i ponad 100szt lpc2146 "kurzacych sie" w szufladzie.
    Ostatnia kwestia - wlasnie (nie obraz sie) sprowadzilem z zagranicy (czytaj z chin) adapter z test socket tsop48 i mam zamiar zrobic rowniez programator pamieci rownoleglych. Moge to spokojnie zrobic na Launchpad a nawet pokusic sie zeby polaczyc oba typy pamieci w jednym programatorze. Na "malych" avr to raczej juz bardzo utrudnione (chociazby ze wzgledu na ilosc pinow).
    Pozdrawiam
  • #9
    elektryku5
    Level 39  
    Do autora:

    Może już miałeś tą płytkę, ale uwierz, że zrobić to chociażby na M8 byłoby o wiele taniej przy produkcji kilku sztuk, albo nawet nieposiadaniu płytki testowej.
    M8 to jakieś 6zł, kabelek USB pozyskać dość łatwo i na upartego można mieć całość za około 10zł, w tej chwili jadę na programatorze LPT, ale chętnie zrobiłbym coś lepszego.

    maly_elektronik wrote:
    To po prostu przerób programator usbasp :) Pliki konfiguracji po stronie PC wyciągniesz ze źródeł avrdude i zostanie tylko napisanie własnego programu na PC albo nawet dopisanie skryptu do avrdude, który pozwoli na programowanie zadanych pamięci.


    To byłby bardzo ciekawy i przede wszystkim tani pomysł, bo te programatory nawet gotowe kosztują grosze.
  • #10
    oloam
    Level 22  
    elektryku5 wrote:


    To byłby bardzo ciekawy i przede wszystkim tani pomysł, bo te programatory nawet gotowe kosztują grosze.


    Programator nie jest urzadzeniem komercyjnym i nie mysle,zeby ktorys z uzytkownikow chcial sprzedawac go hurtowo zwlaszcza, ze na porogramy napisane przeze mnie nie wyraze raczej zgody do uzytku komercyjnego. Wiec pisanie o cenach dla kilkuset szt nie powinno byc tu argumentem. Fakt, mialem ta plytke i jak zaznaczylem w pierwszym poscie jej wybor wiazal sie tez z mozliwoscia poszerzania swojej wiedzy w programowaniu (akurat programator to byl pierwszy projekt na ta plytke).

    Co do ceny jednostkowej to plytka ti przy srednim kursie dolara z dnia dzisiejszego z przesylaka wyniesie 25zl.
    Usbasp na polskim portalu aukcyjnym najtaniej, z przesylka wyjdzie 18,50zl

    Biorac pod uwage, ze ti daje nam jeszcze inne mozliwosci a usbasp tylko mozliwosc programowania, to nie wiem czy rozsadnym wyborem bylby usbasp (moze tylko jak musimy zaprogramowac jedna kosc i zapomniec o niej).
    Na koniec to co zaznaczylem w poscie wczesniejszym - mam zamiar popelnic jeszcze programowanie pamieci rownoleglych. Na m8 bez expanderow I/O jest to niemozliwe.

    Dzilajacy projekt mialem rowniez na LPC2146, ktorych mam pod dostatkiem i cena ich nie gra dla mnie roli, mam rowniez plytki-adaptery pod te uc. Zbudowanie programatora nie stanowiloby problemu (projekt zrobilem na plytce developerskiej)- mimo to nie bylem zadowolony z predkosci (usb w klasie hid), wiec przesiadlem sie na ti.
  • #11
    elektryku5
    Level 39  
    Tylko po co od razu cała płytka ewaluacyjna gdy mam zamiar programować tylko jeden typ pamięci?


    Na tej płytce siedzi ponoć uC o symbolu LX4F120, da się to gdzieś osobno kupić?


    Wiadomo, że płytka nie jest jakoś specjalnie droga, ale puki co grzebię w innej rodzinie uC, przejście może kiedy indziej.
  • #12
    oloam
    Level 22  
    elektryku5 wrote:
    Tylko po co od razu cała płytka ewaluacyjna gdy mam zamiar programować tylko jeden typ pamięci?


    Dlaczego nie, nie widze przeciwwskazan. Nawet wymiary plytki wydaja sie byc optymalne (5cm x 6,5cm)

    elektryku5 wrote:

    Na tej płytce siedzi ponoć uC o symbolu LX4F120, da się to gdzieś osobno kupić?

    Na upartego, na plytce znajduja sie dwa takie uklady. Jest to chip przedprodukcyjny jego oznaczenie bedzie LM4F120. Nie ma go jeszcze w sprzedazy ale wydaje sie ,ze TIVA TM4C123 ma taki sam pinout (trzeba by porownac datasheet) i wystarczy tylko przekompilowac program zeby dzialal na TIVA (o ile trzeba).
  • #13
    Janekxx
    Level 11  
    oloam wrote:
    (...) wydaje sie ,ze TIVA TM4C123 ma taki sam pinout (trzeba by porownac datasheet) i wystarczy tylko przekompilowac program zeby dzialal na TIVA (o ile trzeba).


    Nie trzeba, działa bez problemu na Tiva C :)
  • #14
    oloam
    Level 22  
    Janekxx wrote:


    Nie trzeba, działa bez problemu na Tiva C :)


    Tak, tak. Wyczytalem pozniej, ze Tiva TM4C123 jest ukladem produkcyjnym (poprawione bugi) ukladu LX4F120 i programy powinny chodzic na obu uc.

    Tak nawiasem mowiac to kupilem launchpada na XM4C1294 (wersja produkcyjna = TIVA TM4C1294NCPDT) z obsluga ULPI i QUAD SPI oraz EPI, az prosi sie zeby to wykorzystac i napisac program wykorzystujacy te funkcje, wyciagnac maksimum z predkosci USB i SPI Flash oraz dodac obsluge nor i nand (to juz mam przecwiczone na innym uc)