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

Atmega 32 ,Bascom, Karta pamięci SD lub MMC

adambehnke 12 Maj 2009 21:34 11415 22
  • #1 12 Maj 2009 21:34
    adambehnke
    Poziom 24  

    Witam


    Posiadam moduł uruchomieniowy AVR dla mikrokontrolerów serii ATMEGA..
    Na tym module posiadam slot kart pamięci SD i przy tym slocie 4 goldpiny (MSO,SCK,MOSI,SS) , proszę jeśli to możliwe o poradę jak odczytywać i zapisywać dane na takiej karcie (ta którą mam w zestawie ma 256MB).
    Chodzi mi głównie o możliwość adresowania i umieszczania na niej danych a potem o możliwość ponownego ustawienia takiego adresu i zczytania danych.Mogą być np. w formie 8 bitowej lub podobnie.

    Kolejnym wykorzystaniem karty ale już na innej Atmedze32 będzie ładowanie wcześniej zapisanych obrazków na wyświetlacz graficzny od nokii 6100.

    Proszę o jakieś przykłady kodów i o jakieś schematy podłączeń bo jeśli chodzi o karty SD jestem jeszcze całkowicie zielony i musiałbym na początek bazować na jakimś przykładzie. Oczywiście najpierw zacznę od prostych zapisów bitów.

    Dołączam zdjęcie mojego modułu i zaznaczyłem na nim goldpiny do karty SD. Zasilanie jak widzę jest już podłączone w gnieździe na stałe.

    Atmega 32 ,Bascom, Karta pamięci SD lub MMC

    0 22
  • Pomocny post
    #4 12 Maj 2009 23:24
    psooya
    Poziom 37  

    W którymś EDW jest opis karty SD (trzeba pogooglować w sieci i znajdziesz - nie zawiera błędów jak inne opisy) i wcale nie jest to takie trudne i nikt nie każe od razu stawiać na karcie FAT16 można ją czytać jako RAW i wszyscy będą zadowoleni.
    Pozdrawiam

    0
  • Pomocny post
    #6 13 Maj 2009 15:04
    psooya
    Poziom 37  

    Mój błąd to było w EP 12.2007, 1.2008 2.2008 i 3.2008. Zobacz tu:
    http://Link...
    i tu:
    http://elm-chan.org/docs/mmc/mmc_e.html
    W opisie jest błąd, przy zapisie do kraty nie można wysłać dowolnego bajtu tylko chyba FE (ja nie pisałem obsługi więc nie wiem dokładnie ale jakiś bug był właśnie przy zapisie)

    Link usunąłem.
    [zumek]

    0
  • #7 13 Maj 2009 22:58
    adambehnke
    Poziom 24  

    No i rzeczywiście w EP jest ale przykłady są w C.
    A na tej drugiej stronce programik nie chce się do końca skompilować i generuje błędy.

    <załamka>

    Dodano po 1 [godziny] 36 [minuty]:

    No i mam to:

    Code:

    '-------------------------------------------------------------------------------
    '                         Config_MMC.BAS
    '               Config File for MMC Flash Cards Driver
    '        (c) 2003-2005 , MCS Electronics / Vögel Franz Josef
    '-------------------------------------------------------------------------------
    ' Place MMC.LIB in the LIB-Path of BASCOM-AVR installation
    '
    'Connection as following
    'MMC    M128/M103
    '1      MMC_CS PORTB.0
    '2      MOSI PORTB.2
    '3      GND
    '4      +3.3V
    '5      CLOCK PORTB.1
    '6      GND
    '7      MISO, PORTB.3

    ' you can vary MMC_CS on HW-SPI and all pins on SOFT-SPI, check settings
    ' ========== Start of user definable range =====================================

    ' you can use HW-SPI of the AVR (recommended) or a driver build in Soft-SPI, if
    ' the HW-SPI of the AVR is occupied by an other SPI-Device with different settings

    ' Declare here you SPI-Mode
    ' using HW-SPI:     cMMC_Soft = 0
    ' not using HW_SPI: cMMC_Soft = 1
    $regfile = "m32def.dat"
    $lib "mmc.lib"



    Const cMMC_Soft = 0

    #IF cMMC_Soft = 0

    ' --------- Start of Section for HW-SPI ----------------------------------------

       ' define Chip-Select Pin
       Config PinB.0 = Output                                   ' define here Pin for CS of MMC/SD Card
       Mmc_cs Alias PortB.0
       Set Mmc_cs

       ' Define here SS Pin of HW-SPI of the CPU (f.e. Pinb.0 on M128)
       ' If an other Pin than SS is used for MMC_SS, SS must be set to OUTPUT and high for proper work of SPI
       ' otherwise AVR starts SPI-SLAVE if SS-Pin is INPUT and goes to LOW
       Config Pinb.0 = Output                                   ' define here Pin of SPI SS
       Spi_ss Alias PortB.0
       Set Spi_ss                                               ' Set SPI-SS to Output and High por Proper work of
                                                                ' SPI as Master

       ' HW-SPI is configured to highest Speed
       Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 4 , Noss = 1
    '   Spsr = 1                                       ' Double speed on ATMega128
       Spiinit                                                  ' Init SPI

    ' --------- End of Section for HW-SPI ------------------------------------------

     #else                                                      ' Config here SPI pins, if not using HW SPI

    ' --------- Start of Section for Soft-SPI --------------------------------------

       ' Chip Select Pin  => Pin 1 of MMC/SD
       Config PinB.0 = Output
       MMC_CS Alias PortB.0
       Set MMC_CS

       ' MOSI - Pin  => Pin 2 of MMC/SD
       Config PinB.2 = Output
       Set PinB.2
       MMC_PortMOSI Alias PortB
       bMMC_MOSI Alias 2

       ' MISO - Pin  => Pin 7 of MMC/SD
       Config PinB.3 = Input
       MMC_PortMISO Alias PinB
       bMMC_MISO Alias 3

       ' SCK - Pin  => Pin 1 of MMC/SD
       Config PinB.1 = Output
       Set PinB.1
       MMC_PortSCK Alias PortB
       bMMC_SCK Alias 1

    ' --------- End of Section for Soft-SPI ----------------------------------------

    #endif

    ' ========== End of user definable range =======================================


    Kompilator napisał:

    ' Error
    Const Cperrdrivereset = 225 ' Error response Byte at Reset command
    Const Cperrdriveinit = 226 ' Error response Byte at Init Command
    Const Cperrdrivereadcommand = 227 ' Error response Byte at Read Command
    Const Cperrdrivewritecommand = 228 ' Error response Byte at Write Command
    Const Cperrdrivereadresponse = 229 ' No Data response Byte from MMC at Read
    Const Cperrdrivewriteresponse = 230 ' No Data response Byte from MMC at Write
    Const Cperrdrive = 231
    Const Cperrdrivenotsupported = 232 ' return code for DriveGetIdentity, not supported yet

    Code:

    Waitms 1                                                    ' Wait some time before initialising MMC/SD
    Dim Gbdriveerror As Byte                                    ' General Driver Error register
    Dim Gbdriveerrorreg As Byte                                 ' Driver load Error-Register of HD in case of error
    Dim Gbdrivestatusreg As Byte                                ' Driver load Status-Register of HD on case of error
    Dim Gbdrivedebug As Byte
    $lib "MMC.LIB"                                              ' link driver library
    $EXTERNAL _mmc

    Gbdriveerror = Driveinit()                                  ' Init MMC/SD Card





    Działa bez błędu. Ale jak teraz odczytać i zapisać cokolwiek??

    Dodano po 1 [godziny] 1 [minuty]:

    Chyba sobie daruję! Sam nic nie wskóram.


    Potrzebny mi kod dla atmegi 32 pod kartę sd. Mogę się dogadać z kimś kto dla mnie napisze przykładowy kod do zapisu i odczytu na takiej karcie.
    Potrzebny mi będzie także kod który pozwoli mi ładować obrazki z karty na wyświetlacz od nokii6100. Proszę o propozycje.


    Proszę używać odpowiednich tagów i formatować tekst - poprawiłem.
    [zumek]

    0
  • Pomocny post
    #10 17 Maj 2009 11:22
    rpal
    Poziom 27  

    Przerabiałem ten temat kilka miesięcy temu i musze powiedzieć że na temat kart MMC i SD jest i dużo i mało informacji. Osobiście wiele mi pomogła ta strona http://www.roland-riegel.de/sd-reader/
    Z góry jednak uprzedzam że jesli będziesz myślał o czymś w rodzaju dos-u czyli zapis/odczyt plików w postaci FAT16 lub co gorsze FAT32 to ATMega32 jest za mały, chodzi mi o dostępność pamięci. Udało mi się na tyle zmodyfikować tamtejsze źródła że wyrobiłem się w tym co on ma do dyspozycji jednak pamięci miałem dosłownie na styk. Zatem pomyśl np. o ATMEGA64/128 aby sobie z tymi kartami poeksperymentować.

    0
  • #11 17 Maj 2009 11:31
    adambehnke
    Poziom 24  

    Tak naprawdę to dla mnie format jest bez znaczenia.Chciałbym móc odczytywać i zapisywać jakieś ciągi bitów. Po prostu zapodać jakoś adres i wpisać pod nim powiedzmy z 8 bitów a potem znowu zapodać ten sam lub inny adres i odczytać z pod niego zapisany ciąg bitów. Do niczego innego na dzień dzisiejszy karta mi nie jest potrzebna.
    Mam w tej chwili ATmegę 32 bo po prostu mam do niej moduł uruchomieniowy i na tej bazie buduję swoje układy. I niestety na razie będę musiał przy niej zostać.

    0
  • Pomocny post
    #12 17 Maj 2009 12:10
    rpal
    Poziom 27  

    Jak tylko takie masz potrzeby (choć apetyt rośnie w miarę jedzenia) to w zupełności to ci starczy. Popatrz sobie na tę stronę. pamietaj tylko że do tych kart wpisuje się i odczytuje dane w formie pakietów po 512 bajtów zatem pojedyńczy zapis bajtów jest niemożliwy. O ile tylko takie masz potrzeby do zdecydowanie prostsze jest użycie pamięci SPI (maksymalnie możesz uzyskac 1024x8 bo takie sa produkowane)

    0
  • Pomocny post
    #14 17 Maj 2009 13:37
    rpal
    Poziom 27  

    Masz linka dwa pietra wyżej wiec tam sięgnij.

    0
  • #15 17 Maj 2009 14:35
    adambehnke
    Poziom 24  

    Na tej stronie zapewne jest wszystko ale zajmie mi to wieki zanim to rozgryzę. Aż tak "obcykany" w mikrokontrolerach nie jestem. A na dodatek potrafię coś napisać tylko w Bascomie.
    Mi chodzi bardziej o jakiś schemat i najprostszy jaki jest kod ale taki który działa na atmedze 32 w 100%. Tak żeby był tam zapis i odczyt. Wiem że dużo potrzebuję ale bez jakiegoś choćby częściowego gotowca nic nie sklecę.

    0
  • #16 17 Maj 2009 14:54
    rpal
    Poziom 27  

    adambehnke napisał:
    Na tej stronie zapewne jest wszystko ale zajmie mi to wieki zanim to rozgryzę. Aż tak "obcykany" w mikrokontrolerach nie jestem. A na dodatek potrafię coś napisać tylko w Bascomie.
    Mi chodzi bardziej o jakiś schemat i najprostszy jaki jest kod ale taki który działa na atmedze 32 w 100%. Tak żeby był tam zapis i odczyt. Wiem że dużo potrzebuję ale bez jakiegoś choćby częściowego gotowca nic nie sklecę.

    U tego niemca znajdziesz i schemat interface bez którego nie da się obsługiwać tych kart jak równierz gotowe procedury. Jeśli to będzie za mało wyślę schemat interface i ew. PCB. Konieczne jest dopasowanie poziomów napięć do logiki 3,3 - 3,6 V na której chodzą te karty.

    0
  • #17 17 Maj 2009 15:08
    adambehnke
    Poziom 24  

    Z napięciem 3,3v nie będzie problemu. Atmega chodzi także i na 3,3v więc problem praktycznie z głowy. A czy Masz może jekieś dotowe procedury i ew. schemat i(lub) pcb skoro już to przerabiałeś to pewnie masz już to opanowane w pewnym stopniu jak może nawet całkowicie.

    Dodano po 7 [minuty]:

    Mam schemacik Atmega 32 ,Bascom, Karta pamięci SD lub MMC
    ale jest on dla Atmega8. Czy jeśli zastosuję Atmegę 32 to rozumiem że mogę pominąć Kwarc.Oczywiście rozmieszczenie pinów też się zmieni. Ale pytanie czy z takim schematem Atmega32 ruszy?

    0
  • Pomocny post
    #18 17 Maj 2009 15:58
    rpal
    Poziom 27  

    W załączniku masz kolego schemat i płytkę w Eaglu a także w PDF-ie. Zwróć uwagę że PCB jest sklonowane do 4 szt na raz. Wyprowadzenia w zasadzie są oczywiste ale tytułem wyłumaczenia LED do sygnalizacja operacji, WP, CD do sygnały o stanie karty. Te trzy sygnały nie są niezbędne do działania, VCC to +5V, GND to rzecz oczywista. CS podłączasz do PB4,DI do PB5,DO do PB6, SCK do PB7. Jest taka strona
    http://www.captain.at/electronic-atmega-mmc.php
    gdzie masz wręcz ordynarnie proste zastosowanie karty czyli zapis i odczyt bloku 512 bajtów czyli to o co tobie chodzi. Interface zrobiłem na buforze bo chciałem mieć pewność dopasowania poziomów (nie chciało mi się babrać z rezystorami) złącze z pewnością uda się tobie kupić np. w f-mie TME choć nie wiem czy to nie jest przypadkiem reklama. To z płytki jest pod symbolem MCC-SD/2 . W zasadzie nic więcej dodać się nie da tylko eksperymentować.

    0
  • #20 17 Maj 2009 16:21
    rpal
    Poziom 27  

    No to trzeba go poznać, tak mi się przynajmniej zdaje. Nie chcę tutaj rozpoczynać kolejnej niepotrzebnej dyskusji ale moim zdaniem ten cały BASCOM jest po prostu niepoważny, piszę to świadomy tego że znajdzie się zaraz mnóstwo dyskutantów którzy będą udowadniać że jest inaczej i znajdować na to przykłady.

    0
  • Pomocny post
    #22 17 Maj 2009 16:54
    rpal
    Poziom 27  

    NIe chciałbym się tutaj wymądrzać z różnych powodów, głownie z tego aby nie wzbudzać niepotrzebnej polemiki nad tym co dobre a co złe. Dlatego to co napiszę jest tym akurat co mi odpowiada, niekoniecznie komuś innemu.
    Bardzo wygony jest CodeVisionAVR, kiedyś kupiłem jego pełną wersję więc można powiedzieć że zainwestowałem :)
    Cenię go z tego powodu że cały przebieg kompilacji i linkowania oraz programowania procka można zrobić w tym środowisku od początku do końca i to dla programatora STK200 czyli tego który kosztuje grosze, poza tym ma swoisty kreato który na początku bardzo pomaga.
    To samo można zrobić darmowym AVRStudio ale niestety ten program nie integruje się z tym programatorem. Jest natomiast połaczony z innymi jak np. JTAG-iem który umożliwia debugowanie całego procka natomiast inne zintegrowane z tym środowiskiem programatory są niestety zbyt drogie np. STK500.
    Można wprawdzie tę niedogodność ominąć używają powiedzmy "zewnętrznych" programów do programowania procka na podstawie plików hex które AVRStudio generuje, ale nie jest to już takie wygodne.
    CodeVisionAVR w pełnej wersji jest niestety płatne a jego darmowa wersja jest ograniczona tylko do 2kB kodu, ponadto ta wersja C może po kompilacji być obsługiwana i debugowana przez AVRStudio.
    Jeśli byś zainwestował JTAG-a ok 100-130 PLN możesz spokojnie używać bezpłatnego AVRStudio, ale i tak bez SKT200 się nie obędzie choćby po to aby wygodnie ustawić fusebity albo zaprogramować procka pod obsługę JTAG-a :) Wybór nie jest prosty i należy do ciebie :) Piszę wg. własnego widzimisie i wygody więc mam nadzieję że dyskusja nie zejdzie na niewłaściwe tory bo przyznam szczerze nie chce mi się uczestniczyć w jałowych sporach na temat tego co lepsze a co gorsze jak to się często dzieje w innych postach.

    0