PIC i SD kartica
Moderators: pedja089, stojke369, [eDo], trax
PIC i SD kartica
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!!!
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!!!
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
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
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
Imas li kakv kod pisan u C za komunikaciju
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
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
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
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.
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.
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]
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;
}