PIC i SD kartica

Rasprava o PIC mikrokontrolerima, PIC projekti i drugo vezano za PIC-eve...

Moderators: pedja089, stojke369, [eDo], trax

Post Reply
evox
Posts: 17
Joined: 25-12-2007, 11:39

PIC i SD kartica

Post by evox »

Da li ste radili sa sa ovom kombinacijom SD i PIC preko SPI protokola. Ako jeste ajd javite mi ja trebam jednu stvar takvu sad. Da li su po karakteristikama i po funkicijonalnosti osim sto drugacije fizicki izgledaju iste SM/mmc i Mikro SD/Mcc. Mislim na kartice koje koriste mobilni i aparati.
Ajd javite iskustva sa ovim a kao je neko voljan kakav kod vezano za ovo da poedeli slobodno dobro mi doso.


Hvala svima u nared!!!
User avatar
trax
Administrator sajta
Administrator sajta
Posts: 3509
Joined: 08-01-2005, 18:04
Location: 75k, BA
Contact:

Post by trax »

Ako se dobro sjecam, razlika izmedju SD i MMC kartice je samo u brzini prenosa podataka. SD su brze od MMC. Inace su 100% kompatibilne, barem kada sam ih ja testirao sa ovim svojim uredjajem.
Ja sam ih koristio sa ATmega32.
Da bi radio sa ovim karticama treba ti barem 512 bajta radne memorije da bi pisao/citao u karticu. Ove kartice rade sa sektorima i minimalna velicina sektora im je 512 bajta. Ako hoces nesto upisati ili procitati iz njih, moras upisati cijelih 512 bajta ili procitati 512 bajta. Izmjena nekih podataka (cak i jednog jedinog bajta) je znaci izmjena cijelih 512 bajta :D
evox
Posts: 17
Joined: 25-12-2007, 11:39

Post by evox »

Sto se tice razlike izmedju sd i mmc kartica razlika je u protokolu komunikacije samo koliko sam ja skonto. U SPI protokolu je dosta sporiji prenos. Skonto sam da se ictanj i upis vris pos 512 bajtova ali meni treba samo nekih 80 tako da ostale mogu iskluirati :).
Imas li kakv kod pisan u C za komunikaciju :?:
evox
Posts: 17
Joined: 25-12-2007, 11:39

Post by evox »

E sutra cu najverovatnije nabaviti 1 takvu karticu pa cu je probati sa PIC--om spojiti pa ako gde zapnem javim ti se za malu pomoc. Inace proucio sam dosta dobro SanDisk MultiMediaCard and Reduced-Size MultiMediaCard Product Manual ali samo deo koji se odnosi na SPI protokol to jest na 5 poglavlje ono prethodno sam samo 1 procito. Hoce li biti to dovoljno
User avatar
ShOkRe
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 468
Joined: 10-01-2007, 20:55
Location: Pula

Post by ShOkRe »

pa imas na mikrochipu cijeli source sa onim 18f4550 i sd-om ako me sjecanje sluzi, naime mene je to interesiralo da ubacim u onaj tcpip stack...
User avatar
trax
Administrator sajta
Administrator sajta
Posts: 3509
Joined: 08-01-2005, 18:04
Location: 75k, BA
Contact:

Post by trax »

Ja sam pisao program (za Atmel, ne PIC) originalno za MMC karticu i sve je radilo. Onda sam samo ubacio SD karticu i sve je isto tako radilo 100% ispravno. :)
Imas na netu primjera dosta za memoriske kartice, trazi projekte tipa MMC mp3 player, i slicno.

http://www.retroleum.co.uk/mmc_cards.html
http://www.teuthis.com/html/mmc_mp3.html
...i tako dalje
evox
Posts: 17
Joined: 25-12-2007, 11:39

Post by evox »

ea sta mislite da li ce ostetiti karta u sled velike temperature ako direktno na pinove zalemim zicu odnoso one muske pinove ?
evox
Posts: 17
Joined: 25-12-2007, 11:39

Post by evox »

De mi reci ovde na prvom linku sto si dao kaze sledece:
kada ukljucim napajanje na karticu da nakon 1ms CS signal stavim na 1 i posaljme 80 klokova gde da ih posaljem i na koji nacin to mi nije jasno??
A onda treba CS oborit na 0 i dalje ide lsanje komandi ???
User avatar
trax
Administrator sajta
Administrator sajta
Posts: 3509
Joined: 08-01-2005, 18:04
Location: 75k, BA
Contact:

Post by trax »

Pa saljes ih na SPI port. Karticu spajas na SPI port od mikrokontrolera. Taj CS (chip select) pin moras rucno podesavati (nula/jedan) dok prenos podataka ide preko registara mikrokontrolera (SPI registri).
Na linku ti je protokol kako koristiti karticu, kako je na pocetku inicijalizovati (resetovati) i onda ide pisanje i/ili citanje.
Slanje jedinica ti je onda slanje 0xFF bajta (decimalno 255) a to su ti sve jedinice.
evox
Posts: 17
Joined: 25-12-2007, 11:39

Post by evox »

Evo kod sto sam radio ali nikako da mi vrati 1 posle CMD0 a inace povezivanje sa SD karticom sam radio po semi sa
linka http://www.captain.at/electronics/pic-mmc/

a pomalo sam gledao i kod sa linka http://www.captain.at/electronics/pic-mmc/mmc.c.txt

evo kod pa ako neko moze da pogleda ima li gde greska

napomena gde ima posle linije koda pod komentarom zvezdica -> //* taj deo koda je uradjen kao na linku koji sam gore ostavio gore za kod u koji sam gledo kao ispomoc, pokusao sam i sa tim i bez tog ali ni vak ni nak nece

znaci imam lcd gde pogaze sta vrati

kada stavim u MMC_init return SPI(crc) brati -107 a kad stavim jos ono dole SPI(0xFF); return SPI(0xFF); vrati mi -1 ne kontam

Code: Select all


#include <16F874.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#include "lcd.c"
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)


#bit SMP=0x94.7
#bit CKE=0x94.6
#bit CKP=0x14.4
#bit SSPM1=0x14.1
#bit SSPEN=0x14.5
#bit CS=0x7.2
#bit BF=0x94.0
#bit TRS3=0x87.3
#bit TRS5=0x87.5


#byte TRISC=0x87
#byte SSBUF=0x13

char SPI(int d)        // send character over SPI
{
    SPI_write(d);            // send character
//    while (!BF);        // wait until sent
    return SPI_READ();        // and return the received character
}

int command(int cmd,int arg3,int arg2,int arg1,int arg0,int crc)
{

   // sends a command to the MMC
    char a;
    //SPI(0xFF);    //*
    SPI(cmd);

    SPI(arg3);
    SPI(arg2);
    SPI(arg1);
    SPI(arg0);

    return SPI(crc);

    //SPI(0xFF);//*
    //return SPI(0xFF);    // return the last received character     //*


}

int MMC_init()
{
   int i=0,rez=-3,rez1=-4;
   TRISC = 0b11010011;

   SMP = 0;        // input is valid in the middle of clock
    CKE = 0;        // rising edge is data capture
    CKP = 1;        // high value is passive state
    SSPM1 = 1;    // speed f/64(312kHz), Master
    SSPEN = 1;    // enable SPI
    CS = 1;         // disable MMC

   // start MMC in SPI mode
    for(i=0; i < 10; i++)SPI(0xFF);        // send 10*8=80 clock pulses
    CS=0;
   
   
   rez=command(0x40,0,0,0,0,0x95);

   
   
 /*  do 
   {
     rez1=Command(0x41,0,0,0,0,0xFF);
     //lcd_gotoxy(5,1);
    // printf(lcd_putc,"%d",rez1);
   
   }   
   while (rez1!=0);
*/

   lcd_gotoxy(1,1);
   printf(lcd_putc,"%d",rez);

  /* lcd_gotoxy(4,1);
   printf(lcd_putc,"%d",rez1);
*/
}



void main()
{
   lcd_init();

   lcd_gotoxy(1,0);
   printf(lcd_putc,"%s","SPI");
   //SSBUF=4;
  // lcd_gotoxy(12,1);
  // printf(lcd_putc,"%d",SSBUF);
   MMC_init();

  petlja: goto petlja;

}

[/code]
Post Reply