Fórum témák
» Több friss téma |
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.
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!
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
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.
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
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
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
Hogy sikerült megtalálni a "0. szektor"-t, amiben vagy MBR vagy DBR(dos boot record) található?
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.
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
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
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...
Í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!
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..
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.
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
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...
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?
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
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.
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?
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?
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...
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
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
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
Nálam "olvashatatlanul" jelenik meg a kép.
24EP -n van 8 byte FIFO. Azt figyelembe vetted/letiltottad? SRXMPT
|
Bejelentkezés
Hirdetés |