Fórum témák

» Több friss téma
Fórum » SD kártya kezelése PIC-kel
 
Témaindító: brejti, idő: Szept 18, 2006
Témakörök:
Lapozás: OK   6 / 14
(#) zombee válasza gabi20 hozzászólására (») Jan 8, 2014 /
 
Tipp: megformázod, majd rámásolod a kérdéses WAV fájlt. Utána megnézed hányadik
szektorban kezdődik a fájl(pl. sectedit segítségével). Onnantól kezdve már csak azt kell
beégetni a programba, és persze a fájl méretét. Utóbbi lehet hogy ott lesz a WAV fejlécben is.
(#) watt válasza zombee hozzászólására (») Jan 8, 2014 /
 
Ha csak egy fájlt akar mindig lejátszani, akkor tényleg ez is egy megoldás, bár kicsit fapados, de működik!
(#) gabi20 válasza watt hozzászólására (») Jan 9, 2014 /
 
Sziasztok köszönöm szépen a válaszokat. Igen én is így gondoltam hogy először keményen beégetem a fájl kezdőcímét a processzorba, és aztán onnan olvasom. Találtam is egy programot (kép), itt meg tudom nézni hogy honnan kezdődik a fájl. Majd később ha lesz időm akkor megpróbálkozom fájlkezelésekkel is

deditor.JPG
    
(#) gabi20 válasza watt hozzászólására (») Jan 9, 2014 /
 
Közben elkészült és működik is most aztán örülök
Egyébként meg minden *.wav fájl úgy kezdődik hogy "RIFF" szóval ez alapján az AVR meg tudná taláni az SD kártyán a fájl elejét, bár kicsit sokáig tartana.
(#) zenetom válasza gabi20 hozzászólására (») Jan 9, 2014 /
 
(#) watt hozzászólása Jan 11, 2014 /
 
Találtam egy jó anyagot. Igaz Arduinora íródott, de egy kis szenvedés után egyre átláthatóbbá válik a kód. C++-ban jártasak előnyben, de sima C előélettel is emészthető szerintem.
Remélem segítségetekre lesz!
Arduino FAT_12_16_32 lib
(#) kurucz_peter hozzászólása Jan 16, 2014 /
 
Szevasztok!

az lenne a kérdésem, hogy valakinek sikerült-e valaha a CCS examples\ex_fat.c nevű memóriakártya kezelést bemutató példáját használnia. Nekem nem működik. Korábban írtam egy saját drivert sd kártyához, de az meg csak bizonyos kártyákkal működik. Ezért gondoltam megnézem, hogy milyen a gyári, de az nálam még rosszabb. Üdv
A hozzászólás módosítva: Jan 16, 2014
(#) balogpepe hozzászólása Ápr 27, 2014 /
 
Sziasztok!

MicroSD kártyára szeretnék írni. Jelenleg egy 1GB és egy 2 GB méretűvel próbálkozok. Mindkettő FAT16-ban formázva. A single block read és write utasítás is működik már, de csak akkor kerül abba a blokkba az adat, ahova én szeretném, ha a kiszámolt blokk number-hez (nálam az első fájl kezdőblokkja az 512) hozzá adok egy elég nagy számot mintha egy offset lenne (kb. 67000). Ráadásul mindkét kártyán különböző ez az érték. Valakinek van ötlete mi az oka ennek?

Üdv.: Péter
(#) zombee válasza balogpepe hozzászólására (») Ápr 27, 2014 /
 
Hogy sikerült megtalálni a "0. szektor"-t, amiben vagy MBR vagy DBR(dos boot record) található?
(#) balogpepe válasza zombee hozzászólására (») Ápr 29, 2014 /
 
Szia!

Némi próbálkozás kellett mire ki tudtam olvasni egy olyan szektort aminek a tartalmát PC-n vizsgálva is megtaláltam. Ebből már megvolt az eltolás mértéke.
(#) zombee válasza balogpepe hozzászólására (») Máj 3, 2014 /
 
Szerintem rosszul számolod a blokkokat. Át kéne tanulmányozni azt a fránya fájlrendszert.
Azt javaslom, használd a "sectedit" programot a PC-n, akkor AVR nélkül is meg fogod találni.
1: a 0. szektorban DBR(DOS Boot Record) vagy MBR(Master Boot Record) van.
2: ha MBR akkor ki kell olvasni a partíció (LBA) kezdőszektorát, és innentől kezdve ez lesz
a 0. szektor. Ha itt DBR van akkor nem kell ezt eljátszani, alapból 0. szektor lesz.
3: A DBR-ből (nevezhetjük kötetleírónak) kiolvasod:
- FAT-ek száma
- FAT táblák szektormérete
- "fenntartott" szektorok száma
- Gyökérkönyvtár mérete
Ezeket összeadva megkapod a legelső adattároló ("2.") klaszter helyét. A DBR-ben a
klaszterméret is szerepel. FAT16 és 1GB kártya esetén ez legalább 32 kell hogy legyen.
Azaz minden apró fájl elfoglalhat nálad min. 16KB-ot. Ja igen a gyökérkönyvtárból
keresed ki a kezdő klasztert ha a fájl ott található.
A hozzászólás módosítva: Máj 3, 2014
(#) balogpepe válasza zombee hozzászólására (») Máj 4, 2014 /
 
Szia!

A HxD nevezetű programot használom, csatoltam a 0. szektort. Könnyen elképzelhető, hogy valamit rosszul számolok ezért inkább leírom:
Number of bytes per block: 512
Number of blocks per all. unit: 32
Number of reserved blocks: 2
Number of file allocation tables: 2
Number of root directory entries 512
Number of blocks per FAT: 239

Ezek alapján számoltam ki a root dir kezdőcímét: Nr. of FATs x Nr. of blocks per FAT + Nr. of reserved block = 2x239+2=480

Ez szerintem meg is felel a valóságnak, mert ott megtaláltam az első fájlbejegyzést, illetve 32 blokkal arrébb, az 512 blokktól kezdődően megtaláltam a fájl tartalmát is.
A hozzászólás módosítva: Máj 4, 2014

HxD.png
    
(#) zombee válasza balogpepe hozzászólására (») Máj 5, 2014 /
 
Nekem is 480-ra jött ki a gyökérkönyvtár legelső szektora. Ezután: 512/32=16 szektorból áll
a gyökérkönyvtár, azaz a 496. szektortól kezdődik a 2.-es számú klaszter(szektorcsoport)
ahol már adat is lehet. Egy klaszter nálad 32 szektorból áll, azaz a 3. klaszter kezdőcíme 428.

Most azt nézd meg, hogy a PC-n futó programod logikai vagy fizikai szektorcímekkel számol.
Pl. a SectEdit mindkettőre képes és ez egy nagyon hasznos funkció(lásd:kép).
A kettő között az a különbség, hogy fizikai címet csak eszközönként adhatsz meg,
míg logikai címet meghajtóbetűjel alapján. A RAID-es kötetekkel most ne foglalkozzunk!

Az AVR-ed csak fizikai címeket tud használni. Előfordulhat hogy a kártyádon MBR van a
0. FIZIKAI címen. Ez azt jelenti hogy a kötetleíró nem ott lesz, hanem az MBR 454. bájtjától
kezdődő 32 bites értéken. Egy MBR kb. úgy néz ki mint a 2. képen...
(#) balogpepe válasza zombee hozzászólására (») Máj 6, 2014 /
 
Így mostmár érthető miért nem találtam a helyén semmit, a Hexeditor kicsit félrevezetett. Köszönöm a segítséget!
(#) don_peter válasza Gyimate hozzászólására (») Júl 7, 2014 /
 
Szia,

Megkérdezhetem, hogy milyen nyelven írtad a PIC18F4550-re az SD kezelést?
Érdekelne engem is egy projektem kivitelezéséhez.
Előre is köszi..
(#) Gyimate válasza don_peter hozzászólására (») Júl 7, 2014 /
 
Szia,

CCS-C-ben írtam meg a kezelését. Nekem csak az olvasásra volt szükségem így csak azt a részt írtam meg.
(#) don_peter válasza Gyimate hozzászólására (») Júl 7, 2014 /
 
Ohh akkor az pont nem jó nekem, bár lehet át lehetne alakítani, sima C-re (MPLAB C18).
Nekem olyan rutinra lenne szükségem amely C-ben íródott, SD kártya 2GB-os mérete tökéletesen elég lenne. (legalább is azt hiszem, az adatmennyiséget majd még ki kell számolnom, de elsőre elég lenne tutira)
Első sorban csak írás kellene, de úgy, hogy egy memória kártyára, *.txt fájlba írna adatokat, vagy is a *.txt fájl tartama bővülne mindig egy újabb sorral.
Esetleg, ha mód van rá olvasásra is használnám, de azt csak a teljesség kedvéért, hogy az is meglegyen.
Ami fontos az az, hogy PC-n vagy MAC-en olvasni tudjam a memóriát mert az összegyűlt adatok feldolgozása már a gépen történne, egyéb feldolgozó, kiértékelő programok segítségével.
Gyakorlatilag csak adatgyűjtésre kellene a PIC-es móka..

Végig olvasva a topi bejegyzéseit, nincs egyszerű dolgom, ha egy mód van rá akkor az SD rész írását és olvasását kihagynám és az egyéb adatbekérő rutinokat írnám meg.
Van esetleg egy ilyesmi rutinja valakinek, és az a valaki szívesen osztaná meg velem?
16F-es és 18F-es (18F442-452, 18F4550) családból áll rendelkezésemre PIC.
Előre is köszönöm az esetleges segítséget.
A hozzászólás módosítva: Júl 7, 2014
(#) don_peter hozzászólása Júl 8, 2014 /
 
Ebből valaki ki tudna indulni?
Vagy esetleg számomra is értékelhető sima C-re le tudja fordítani?
SD kártya és P18F4550, írás MicroC-ben
Szerintem ez sokat tudna segíteni, ha valaki mind két nyelvet behatóan ismeri...
(#) Beles hozzászólása Júl 19, 2014 /
 
Sziasztok!
SD kártyával bajlódok, nem tudom sehogy inicializálni. A kérdéseim, hogy kell-e pull-up vagy down ellenállás a MOSI vagy a MISO lábakra? Illetve a PIC-ben a SPI1CON1bits.CKE = 1 és SPI1CON1bits.CKP = 0 a helyes beállítás az SPI mode 0,0-hoz?
(#) don_peter válasza Beles hozzászólására (») Júl 20, 2014 /
 
Hol tartasz az SD kártyával?
Csinálhatnánk együtt mert nekem is szükségem lenne egy SD kártyás megoldásra.
Én még sehol nem tartok sajnos, csak olvasgattam...
Miben írod?
Én MPLAB C18, 18F442-452
(#) Beles válasza don_peter hozzászólására (») Júl 20, 2014 /
 
Szia!
Benne vagyok, csak az a baj, én C30-ban írom PIC24EP128MC202-re. Ott tartok, hogy még mindíg nem sikerül inicializálnom az SD-t Utána majd FAT16 fájlrendszert szeretném olvasni csak egyelőre.
(#) AZoli válasza Beles hozzászólására (») Júl 20, 2014 /
 
Szia!
24H -val kezeltünk SD -t (FAT32), a Microchip függvényeivel. Felhúzó ellenállást csak a CS lábakta tettünk, Pontosan mi nem megy?
  1. void InitCommonSPI() {
  2.         SD_CS  = 1;
  3.         SPICON1 = 0x0000;
  4.         SPICON1bits.CKP = 1;
  5.         SPICON1bits.CKE = 0;
  6.         SPICON1bits.MSTEN = 1;
  7.         SPI1CON1bits.PPRE = 3; //1:1     //2; //primary pre,scaler 4:1
  8.         SPI1CON1bits.SPRE = 4; //seondary prescaler 4:1
  9.         SPICLOCK = 0;
  10.         SPIOUT = 0;
  11.         SPIIN = 1;
  12.         SPIENABLE = 1
  13. }
(#) Beles válasza AZoli hozzászólására (») Júl 20, 2014 /
 
Miért a SPICON1bits.CKP = 1; és nem a SPICON1bits.CKE = 1? A mode 0,0-nál nem a CKE-nek kell 1-ben lennie?
(#) abcdabcd válasza Beles hozzászólására (») Júl 20, 2014 /
 
Szia én a kérdéseiden kívüli dologra hívnám fel a figyelmedet: azt a lábat, ahol a MOSI van tehát a proci felőli kimenet, azt a lábat állítsd be a portiránynál !!digitális kimenetté!!, egyszer én is keresgéltem hibát spi-nél, már mindent megnéztem, ezzel direkt nem foglalkoztam, mert valahol (nem tudom, hogy Microchip által kiadott doksiban-e vagy máshol, de) azt olvastam, hogy mivel ez egy periféria (az SPI), így nem kell foglalkozni azzal, hogy amúgy az a portláb mibe van állítva... de kell... legalábbis egy próbát mindenképpen megér...
(#) Beles válasza abcdabcd hozzászólására (») Júl 20, 2014 /
 
Szia! Az kimenetnek van, a PIC felöli oldalon a MOSI pedig bemenetnek! Egyébként a PIC felöl van adat, sőt, mostmár az SD felől is jön. De nem 0x01 a válasz ahogy elnézem. Csatoltam a jelalakot. Módosítva: Valamiért nem tudom csatolni a képet
A hozzászólás módosítva: Júl 20, 2014
(#) AZoli válasza Beles hozzászólására (») Júl 20, 2014 /
 
Idézet:
„Az kimenetnek van, ..”

Igen, amint eljutott odáig a program, addig meg lebeg, amit nem szeretek.
Mód.:Most nézem hogy ezt nem is nekem írtad a CS -ellenállásra, úgyhogy tárgytalan.
Ennyire részletekre nem emlékszem, hogy mit válaszol a kártya, de rémlik valami olyasmi hogy inicializálni valami nagyon alacsony órajel sebességen kell, aztán mehet gyorsabban.
A hozzászólás módosítva: Júl 20, 2014
(#) Beles válasza AZoli hozzászólására (») Júl 20, 2014 /
 
Az van, hogy egy pickit2-vel logikai analizátorral nézve jön válasz az SD felől a CMD0 parancsra, de a PIC mégis 0x00-t ad vissza az SPI1BUF-ban. Közbe rájöttem hogy csak bmp-t nem hajlandó csatolni A képen CH1 a clock, CH2 a PIC SDO-ja, CH3 a PIC SDI-je.
A hozzászólás módosítva: Júl 20, 2014

SPI.jpg
    
(#) AZoli válasza Beles hozzászólására (») Júl 20, 2014 /
 
Nálam "olvashatatlanul" jelenik meg a kép.
(#) Beles válasza AZoli hozzászólására (») Júl 20, 2014 /
 
Ha lemented úgy látszik!
(#) AZoli válasza Beles hozzászólására (») Júl 20, 2014 /
 
24EP -n van 8 byte FIFO. Azt figyelembe vetted/letiltottad? SRXMPT
Következő: »»   6 / 14
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem