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

Błędy zapisu/odczytu MMC na Atmega 16 - napięcie 3.11V, Rs-MMC 3.3V/1.8V

Tomek-85 19 Gru 2007 18:36 8560 9
REKLAMA
  • #1 4604800
    Tomek-85
    Poziom 14  
    Posty: 86
    Pomógł: 7
    Ocena: 1
    Czy wykonywaliście obsługę kart MMC ?

    Wykonałem projekt tak jak jest tu napisane,
    http://www.captain.at/electronic-atmega-mmc.php
    ale zamiast dzielników rezystorowych zastosowałem rezystor 300 ohm
    a za nim dałem diodę zenera w kierunku zaporowym na napięcie 3.3V
    Pomiędzy obydwoma elementami podpinałem odpowiedni pin karty.
    Mierząc napięcia na karcie otrzymywałem 3.11V
    Wystarczające by karta ruszyła! Podłączyłem kartę Rs-MMC , czyli
    ze zredukowaną wielkością. Karta może pracować na napięcia
    1.8 i 3.3V

    Niestety po wgraniu programu do Atmegi16 program zatrzymuje się
    na funkcjach:
    int writeramtommc(void)
    int sendmmc(void)

    i wywala mi błędy:
    MMC: write error 1
    MMC: read error 1


    (Mieliście coś takiego?)
    Siedzę już drugi dzień nad projektem, analizuję kod i nic
    nie mogę poradzić na te dziwne zachowania karty.
    Za wszelką pomoc i sugestie będę bardzo wdzięczny.
    Pozdrawiam Tomek.
  • REKLAMA
  • #2 4622922
    m3
    Poziom 12  
    Posty: 77
    Nie robiłem nigdy obsługi tych kart, ale kiedyś natchnąłem się na taką strone: http://kju.wemif.net/mmc/ . Może tutaj znajdziesz coś ciekawego. Powodzenia!
    m3
  • REKLAMA
  • #3 4636187
    Tomek-85
    Poziom 14  
    Posty: 86
    Pomógł: 7
    Ocena: 1
    Witam ponownie.
    Ponieważ kod ze strony captain
    nie chciał działać, po głębszych poszukiwaniach znalazłem
    stronę pana Ulricha_Radiga
    po wykonaniu kosmetycznych zmian w kodzie, wrzuciłem
    program do Atmegi. Niestety karta MMC ciągle nie daje oznak życia.
    Wgrywanie kolejnego kodu ze strony "www.roland-riegel.de"
    uważam za zbyteczne.

    Znalazłem również niejednoznaczność w połączeniach karty
    z mikrokontrolerem. Autor projektu zamieścił dwa rysunki.
    Na prawym schemacie jest nakreślone, aby nóżkę MMC_DI (pin nr 2 karty)
    podłączyć do MISO a pin MMC_DO (pin nr 7 karty) podłączamy do MOSI.
    Na wikipedii napisane jest, że mosi łączymy z mosi
    a miso z miso. (czyli tak jak na stronie "captain").
    Po zamianie pinów nie otrzymałem pozytywnych rezultatów.
    Kto ma rację przy połączeniu karty?

    Czy można zrealizować takie podłączenie karty do atmegi która jest
    zasilana napieciem 5V w celu obniżenia napięć?
    Błędy zapisu/odczytu MMC na Atmega 16 - napięcie 3.11V, Rs-MMC 3.3V/1.8V
    Powinienem zastąpić ten układ dzielnikami rezystorowymi?
    (W taki sposób mam podłączony wyświetlacz od Nokii 3310 i działa
    bez żadnych problemów).

    Napiszcie jak wy zrealizowaliście podłączenie i obsługę karty.
    Za pomoc i sugestie będę naprawdę baaardzo wdzięczny.
  • #4 4640537
    Bigfoot
    Poziom 25  
    Posty: 982
    Pomógł: 74
    Ocena: 13
    MISO z MISO, MOSI z MOSI.

    BF
  • REKLAMA
  • #5 4641738
    Januszcz22
    Poziom 15  
    Posty: 119
    Pomógł: 9
    Ocena: 22
    Pamiętałeś o tym że DataOut w karcie z MISO w uc należy łączyć bezpośrednio, bo na tej linii nadaje karta?
  • #7 4642903
    __Grzegorz__
    Poziom 30  
    Posty: 1412
    Pomógł: 196
    Ocena: 232
    Witam!

    Osobiście korzystałem z tej implementacji FAT16/32 na kartach SD/MMC.

    Podłączenia CardFlash i HDD nie testowałem.

    Przetestowałem to na AT128, 2561, TMS320F2812 i sprawowało się bez zarzutu ... :)

    Może będziesz chciał skorzystać...
  • REKLAMA
  • #8 4645475
    me_super
    Poziom 29  
    Posty: 1692
    Pomógł: 1
    Ocena: 44
    __Grzegorz__ napisał:
    Witam!

    Osobiście korzystałem z tej implementacji FAT16/32 na kartach SD/MMC.

    Podłączenia CardFlash i HDD nie testowałem.

    Przetestowałem to na AT128, 2561, TMS320F2812 i sprawowało się bez zarzutu ... :)

    Może będziesz chciał skorzystać...


    Mam pytanie: czy jesteś w stanie określić czas zapisu bloku na kartę SD przez Atmegę128 (z jakim zegarem)? Jaki jest rozmiar bloku?
    Muszę gdzieś zapisać kawałek z przetwornika, i myślę o karcie SD. Alternatywą jest pamięć na magistrali szeregowej i2c albo SRAM (ale to ostateczność)
  • #9 4646251
    __Grzegorz__
    Poziom 30  
    Posty: 1412
    Pomógł: 196
    Ocena: 232
    Domyślny rozmiar bloku w kodzie to 512 bajtów o ile dobrze pamiętam.

    Testy masz tutaj:
    http://elm-chan.org/fsw/ff/img/rwtest.png

    Z tego co pamiętam, moje wyniki były porównywalne (ale mniejsze, bo kwarc był 8MHz).
    Po szczegóły muszę zajrzeć do notatek w pracy...

    Pozdrawiam w nowym roku :)

    [edit 02-01-2008]
    Jednak pracowałem na kwarcu 11 059 200.

    
    Typ Karty	256MB / Kingston	64MB / Sandisk	2GB / Kingston Elite Pro
    
    Ilość plików	Czas dostępu (ms)		
    250	140	238	139
    500	254	352	238
    750	352	472	376
    1000	452	600	478
    			
    Atmega 128 / 11059200Hz			
    


    Transfery: od nieco ponad 171kB/s do ok 250kB/s w zależności od karty...

    Wyciąg z logów terminala (pełny log w załączniku (śmieci w logu to efekt programowania AVR przez złącze ISP)).:

    
    ...
    >fs
    
    FAT type = 2
    Bytes/Cluster = 1024
    Number of FATs = 1
    Root DIR entries = 512
    Sectors/FAT = 1024
    Number of clusters = 62160
    FAT start (lba) = 64
    DIR start (lba,clustor) = 1088
    Data start (lba) = 1120
    
    6 files, 58550208 bytes.
    0 folders.
    62160 KB total disk space.
    4981 KB available.
    >fc
    
    rc=12 FR_INVALID_OBJECT
    >fl
    
    ----A 2006/04/11 00:36   5000000  overwri1.txt
    ----A 2006/04/11 00:29  50000000  bigfile.txt
    ----A 2006/04/11 00:31   3550208  przepeln.txt
    ----A 2006/04/11 00:32         0  any.txt
    ----A 2006/04/11 00:32         0  a1
    ----A 2006/04/11 00:33         0  a2
       6 File(s),  58550208 bytes total
       0 Dir(s),       4981K bytes free
    >fo 6 overwri2.txt
    
    rc=0 FR_OK
    >fw 5000000 45
    
    5000000 bytes written with 236518 bytes/sec.
    >fc
    
    rc=0 FR_OK
    >fl
    
    ----A 2006/04/11 00:36   5000000  overwri1.txt
    ----A 2006/04/11 00:29  50000000  bigfile.txt
    ----A 2006/04/11 00:31   3550208  przepeln.txt
    ----A 2006/04/11 00:32         0  any.txt
    ----A 2006/04/11 00:32         0  a1
    ----A 2006/04/11 00:33         0  a2
    ----A 2006/04/11 00:38   5000000  overwri2.txt
       7 File(s),  63550208 bytes total
       0 Dir(s),         98K bytes free
    >fc
    
    rc=12 FR_INVALID_OBJECT
    >fc
    
    rc=12 FR_INVALID_OBJECT
    >fl
    
    ----A 2006/04/11 00:36   5000000  overwri1.txt
    ----A 2006/04/11 00:29  50000000  bigfile.txt
    ----A 2006/04/11 00:31   3550208  przepeln.txt
    ----A 2006/04/11 00:32         0  any.txt
    ----A 2006/04/11 00:32         0  a1
    ----A 2006/04/11 00:33         0  a2
    ----A 2006/04/11 00:38   5000000  overwri2.txt
       7 File(s),  63550208 bytes total
       0 Dir(s),         98K bytes free
    >fo 6 overwri3.txt
    
    rc=0 FR_OK
    >fw 100000 47
    
    100000 bytes written with 243902 bytes/sec.
    >fc
    
    rc=0 FR_OK
    ...
    


    [edit 05-01-2007]
    Załącznik usunąłem.

    Pozdrawiam.
  • #10 4847406
    Tomek-85
    Poziom 14  
    Posty: 86
    Pomógł: 7
    Ocena: 1
    Niestety kompletnie zapomniałem o tym temacie.
    Problem okazał się natury technicznej. Trzeba było
    dać stabilizator na napięcie 3.3V i dorzucić kilka
    kondensatorków. (Karta przy zapisie pobiera prąd 200mA)
    Spotkałem się również z innym połączeniem (schematem).

    Błędy zapisu/odczytu MMC na Atmega 16 - napięcie 3.11V, Rs-MMC 3.3V/1.8V

    Wszystko pięknie śmiga.
    Może kiedyś pokuszę się na
    implementację Fat16
    temat zamykam.

Podsumowanie tematu

✨ Dyskusja dotyczy problemów z obsługą kart MMC (w tym Rs-MMC) na mikrokontrolerze Atmega16 zasilanym napięciem około 3.11V, uzyskanym przez rezystor 300 Ω i diodę zenera 3.3V. Autor napotyka błędy zapisu i odczytu (MMC: write error 1, read error 1) podczas komunikacji z kartą. Wątpliwości pojawiły się także co do poprawnego podłączenia linii MMC_DI i MMC_DO względem MOSI i MISO – potwierdzono, że MISO należy łączyć z MISO, a MOSI z MOSI, gdyż linia DataOut karty MMC (MISO) powinna być bezpośrednio połączona z MISO mikrokontrolera. Wskazano na konieczność stabilnego zasilania 3.3V z odpowiednimi kondensatorami, gdyż karta podczas zapisu pobiera prąd rzędu 200mA. Po zastosowaniu stabilizatora 3.3V i filtracji zasilania problem został rozwiązany. W dyskusji pojawiły się także odnośniki do implementacji FAT16/32 na kartach SD/MMC oraz przykładowe schematy połączeń. Prędkości transferu przy pracy z Atmegą128 i kwarcem 11 MHz wynoszą około 171-250 kB/s, a domyślny rozmiar bloku to 512 bajtów.
Wygenerowane przez model językowy.
REKLAMA