Fórum témák

» Több friss téma
Fórum » Egyszerű SD kártya AVR-el
 
Témaindító: wg_kezdo, idő: Máj 12, 2009
Lapozás: OK   1 / 1
(#) wg_kezdo hozzászólása Máj 12, 2009 /
 
SD kártyát szeretnék használni AVR-el, de nem FAT32 hanem a világ legegyszerűbb módján. Vagyis csak írni és olvasni akarom.
Ezért is nyitottam az új témát, na meg azért is mert sehol a neten nem találtam magyar nyelven leírást erre.
Amire kell(het):
Adatgyűjtés. Pl napfény vagy bármi.
A memóriában (SRAM) gyűjti az adatokat majd, ha eléri az 512 byte-ot akkor kiírja a kártyára.
Mivel valamivel fel is akarjuk dolgozni ezért az AVR-nek valahogy kommunikálnia kell a PC-vel vagy amivel akar, de ez a része most nem érdekes. (amúgy lehet akár infrával is a COM porton keresztül ez igazán nem nagy feladat).

Az alapgondolat:
0. sectorban tároljuk a FAT-ot, de ez csak annyit mutat meg, hogy mettől meddig tart pontosan az egyetlen file amit használunk. (vagyis csak egy 4 byte-os long van az elején).
Utána pedig sorban ott vannak az adatok.

Szükség van egy sector író és egy sector olvasó függvényre, ha jól sejtem ami az SRAM egy adott területét kiírja a meghatározott sectorba illetve beolvassa azt.

Most kezdtem el átolvasni az SD kártya speckóját, de jó lenne (nem csak nekem), ha valami magyar nyelvű áttekinthető nem túlcifrázott leírás is lenne hozzá.

Szóval mégegyszer FAT32 és ATMEga999+++ horribilis áru chippek nem érdekesek.
Én ATMega88-al valósítanám meg annak már van 1K memóriája és nem drága (600Ft körül).
Nekem amúgy szélerősséget fog mérni.

Ami gondot okoz az egyrészt a jó kapcsolás amivel nem teszek tönkre 1000 kártyát és egy kis lökés, hogy merre induljak el.
Szeretném, ha ezt a témát akár a neten sokan megtalálnák, mert angolul és fat32-re sokat találtam, de egyszerűt és magyart azt nem.
(Ne lőjünk ágyúval verébre )
(#) Elektroman válasza wg_kezdo hozzászólására (») Máj 12, 2009 /
 
Helló én innen indultam el : http://www.captain.at/electronic-atmega-mmc.php.

Én sem használtam filerendszert, köztes utat talátam, csináltam egy txt file ami a teljes kártyát elfoglalta, megkerestem hogy a kártyán hanyadik szektor a saját tartalmam és onnan írtam, olvastam a kártyát így nem kell FAT, kártyaolvasó mégis olvassa.
Ha nagyon nem boldogulsz akkor túrhatok elő neked kódrészletet is.

Üdv Marcello G
(#) potyo válasza wg_kezdo hozzászólására (») Máj 12, 2009 /
 
Az SD kártya doksiját belinkelnéd vagy feltennéd?
(#) Libus válasza wg_kezdo hozzászólására (») Máj 12, 2009 /
 
AVR-DOS -t nézted már?
Ez egy BASCOM library amivel tudsz FAT16/32-t kezelni.
A fileba írás gyakorlatilag egy open vagy write függvény.
Ha sok adatot akarsz eltárolni, akkor a soros vonal sebessége igencsak lassú lesz kiolvasásnál, nem tudod kikerülni a kártyaolvasót....
(#) Elektroman válasza potyo hozzászólására (») Máj 13, 2009 /
 
Én MMC doksiból csináltam, azzal ment.
MMC doksi
(#) wg_kezdo válasza Libus hozzászólására (») Máj 13, 2009 /
 
A téma kifejezetten az AVR-DOS nélküli adatrögzítésről szól.
A kártyaolvasó maga az AVR lesz ami pl com porton keresztül fogja küldeni az adatokat, vagy más módon, teljesen mind1.

A feladat szempontjából lényegtelen az adatok utólagos kiolvasási sebessége, de lényeges, hogy ne lőjünk ágyúval verébre vagyis a legkisebb szükséges chip-et kelljen beépíteni.
(#) pako válasza potyo hozzászólására (») Máj 13, 2009 /
 
Ez is egy jó doksi.
(#) tneilc válasza wg_kezdo hozzászólására (») Máj 13, 2009 /
 
Szia!

Én a következő linkeken találtam haszonló megoldásokat a témában:

Arduino Nut:uFat
MMC/SD/SDHC card library
SD card read/write with Arduino
GPS Shield
(#) wg_kezdo hozzászólása Máj 13, 2009 /
 
Nos amint látom a legtöbb helyen úgy indul, hogy nem kell nekünk fat meg hasonló aztán valami atmega999-nél kötnek ki meg fat32 meg mindenféle libary-nél.

Ja azt nem mondtam előre, hogy én bascom-ban fogom elkészíteni a programot így először "le kell fordítanom" a C programokat

Még nem tudtam alaposan átnézni a linkeket, de mindenképpen jó lenne esetleg ide egy címszavas leírás, hogy hogyan is kell eljutni oda, hogy 512byte-ot kiírunk egy kártyára.

Nem hiszem, hogy túl bonyolult lenne aki csinált már ilyet gondolom 2 perc alatt le tudja írni.
(#) watt válasza wg_kezdo hozzászólására (») Máj 13, 2009 /
 
Idézet:
„Nem hiszem, hogy túl bonyolult lenne aki csinált már ilyet gondolom 2 perc alatt le tudja írni.”

Tévedsz.
(#) Elektroman válasza wg_kezdo hozzászólására (») Máj 13, 2009 /
 
Amit írtam abban pont az van amit szeretnél.és ATmega16-tal ami egy 5-600 forintos chip. A linken amit küldtem ott ven neked a kész fgv arra hogy hogyan kell kitolni 512byte-ot a kártyára.
(#) wg_kezdo válasza Elektroman hozzászólására (») Máj 13, 2009 /
 
Igen az tökéletes már elkezdtem fordítan bascom-ba, hogy halandó is megértse
(#) Cavalier válasza wg_kezdo hozzászólására (») Máj 13, 2009 /
 
Ha szeretnél sokat szívni vele, akkor hajrá. Körbejártam a témát, és pont ilyen célra vettem Mega644-et, az sincs egy ezres, létezik diptokosban is, simán elmegy rajta az avr-dos, mondjuk full Bascom kell hozzá. (vagy okosított, de az csúnya dolog )
A másik, hogy a PC-re átvitel is egyszerűbb, csak bedugod egy kártyaolvasóba, és áttöltöd a txt filet. Mindenesetre a keresett információk már meg is vannak a topikban.
(#) wg_kezdo válasza Cavalier hozzászólására (») Máj 13, 2009 /
 
A full bascom nekem nincs meg és okosítani nem akarok lévén nem vagyok tolvaj sem rabló.
Annyit nem ér, hogy megvegyem mivel csak hobbi szinten használom.
A 644-esnek utánanézek, bár az ATMega88-ban is van 1K Sram szerintem azon is elmenne az AVRDOS csak szükségtelen szerintem.
(#) wg_kezdo hozzászólása Máj 13, 2009 /
 
Közben kutakodtam egy kicsit és találtam delphihez olyan komponenst amivel sector szinten lehet írni olvasni az SD kártyákat is így teljesen felesleges a FAT.

Készítek egy ingyenes szoftvert amiben max 128 file-t lehet majd tárolni és simán lehet írni olvasni vagyis ki lehet menteni a file-t és létre is lehet hozni.

Így már igazi alternatívát jelenthet a fat32-vel szemben annak aki nem akarja megvenni a bascom-ot meg bonyolultan programozni stb...stb...

Csak sok adatot tárolni.
(#) poznamokus hozzászólása Okt 30, 2009 /
 
Sziasztok! Arról mit tudtok, hogy microSD-t ugyanúgy lehet-e kezelni, mint a normál SD-t? (SPI könyvtárral, illetve ARM-ok esetében beépített vezérlő segítségével)
(#) pici válasza poznamokus hozzászólására (») Okt 30, 2009 /
 
Szia
A micro/mini/normal SD között nincs kölönbség SPI se SD modban. Gondolj bele, a microSD-t bele tudod dugni egy tokba és SD lesz belőle.
(#) pici hozzászólása Nov 27, 2009 /
 
Sziasztok

Sikerült szereznem pár újfajta microSDkártya foglalatot.
Kisebb helyet foglal, a proci fölé is nyúlhat, könnyebb beforrasztani.

shortMSD.jpg
    
(#) taj1989 hozzászólása Júl 19, 2010 /
 
Sziasztok!
AVR-hez szeretnék SD kártyát illeszteni. Megépítettem ezt a kapcsolást : Link Még mielőtt rátettem volna az SD kártyát lemértem multiméterrel a feszültséget és a CS és SCK lábakon majdnem 5V-ot mértem. Rendben van ez a kapcsolás és én néztem el valamit, vagy nem jó? Nem szeretném hűvösre tenni a kártyát
Köszi a segítséget!
Attila
(#) pici válasza taj1989 hozzászólására (») Júl 19, 2010 /
 
Mindegyk AVR megy 3,6Voltról. Használd úgy.
(#) Sick-Bastard hozzászólása Ápr 11, 2013 /
 
Üdv!

Segítséget szeretnék kérni az AVR-SD olvasás/írás (SPI-vel) megvalósításában.
Szerencsére az oldal nem túl hosszú, így minden linket, pdf-et átolvastam és a linkeken lévő kódokba is belenéztem.
A problémám, hogy nem találom a parancsokhoz (CMD0-58 stb.) a megfelelő hexa vagy bináris kódokat.
pl.:
SEND_STATUS CMD13 0x????
SET_BLOCKLEN CMD16 0x????
READ_SINGLE_BLOCK CMD17 0x????
WRITE_BLOCK CMD24 0x????
... stb.

Valakinek ezek megvannak?
A hozzászólás módosítva: Ápr 12, 2013
(#) ndavid87 válasza Sick-Bastard hozzászólására (») Ápr 11, 2013 / 1
 
Szia.

A parancs számához adj hozzá 64-et, így kapod meg a hexa kódját.
CMD16 például így néz ki:
h'50', h'00', h'00', h'02', h'00', h'ff' (A blokk hossza 512 (h'0200') bájt lesz.)
Az első bájt a parancs (16+64=80 (h'50'), ezt követi 4 adatbájt, és a végén a crc bájt.

Nézd át ezt az oldalt, nekem sokat segített.
Üdv.
(#) Sick-Bastard válasza ndavid87 hozzászólására (») Ápr 11, 2013 /
 
THX!

Ez szerintem az eddigi leghasznosabb infó!!!!
Így már sokkal átláthatóbb és érthetőbb a számomra. SB
A hozzászólás módosítva: Ápr 12, 2013
(#) Sick-Bastard hozzászólása Ápr 17, 2014 /
 
Üdv!

Egy kis gondom akadt az SD kártyával.

Még csak az inicializálásnál tartok, annak is a 2. lépésénél.
A CMD0 parancs után megkapom R1-nek a 0x01-et, de CMD1 után is 0x01-et kapok. Tehát nem lép ki az IDLE állapotából.

A inicializálás így néz ki:
  1. void SD_Init(void)
  2. {
  3.         _delay_ms(10);
  4.         SD_DIS();
  5.         for(unsigned char i = 0; i<10; i++)     //      send 80 clk pulses
  6.         {
  7.                 SPIWR(0xFF);
  8.         }
  9.         USART0_TX_String("80clk pulse done");
  10.         USART0_TXD(10);                                        
  11.         USART0_TXD(13);
  12.        
  13.         _delay_ms(50);
  14.        
  15.         SD_EN();
  16.         SD_CMD(0,0,0x95);                                               //      CMD0
  17.         USART0_TX_String("CMD0 Send");
  18.         USART0_TXD(10);                                        
  19.         USART0_TXD(13);
  20.        
  21.         USART0_TX_String("Waiting for R1:");
  22.         USART0_TXD(10);                                        
  23.         USART0_TXD(13);
  24.        
  25.         R1 = 0xFF;
  26.        
  27.         while(R1 != 0x01)                                                       //      getting R1 (Response 1) while R1 is not 0x01                           
  28.         {
  29.                 R1 = SPIWRD(0xFF);                                     
  30.                 USART0_TX_String("Response 1: ");
  31.                 itoa(R1, StringA, 10);
  32.                 USART0_TX_String(StringA);
  33.                
  34.                 USART0_TXD(10);                                         //      ASCII for Enter (2 byte)
  35.                 USART0_TXD(13);
  36.                 _delay_ms(250);
  37.         }
  38.        
  39.         SPIWR(0xFF);
  40.         SPIWR(0xFF);
  41.        
  42.         SD_CMD(1,0,0xFF);                                               //      CMD1
  43.        
  44.         USART0_TX_String("CMD1 Send");
  45.         USART0_TXD(10);                                        
  46.         USART0_TXD(13);
  47.        
  48.         R1 = 0xFF;
  49.        
  50.         while(R1 != 0x00)                                               //      getting R1 (Response 1) while R1 is not 0x00
  51.         {
  52.                 R1 = SPIWRD(0xFF);                                     
  53.                 USART0_TX_String("Response 1: ");
  54.                 itoa(R1, StringA, 10);
  55.                 USART0_TX_String(StringA);
  56.                
  57.                 USART0_TXD(10);                                         //      ASCII for Enter (2 byte)
  58.                 USART0_TXD(13);
  59.                 _delay_ms(250);
  60.         }                              
  61.        
  62.        
  63.         SD_DIS();
  64. }


Az UART azért van, benne, hogy HyperTerminalban láthassam hol is tart éppen a program és miket kapok R1-nek.
A hozzászólás módosítva: Márc 6, 2015
(#) Sick-Bastard válasza Sick-Bastard hozzászólására (») Ápr 18, 2014 /
 
Megvan a hiba.

Úgy néz ki, hogy a CMD1-et 2x kellett elküldeni és így a másodikra az R1 értéke 0x00 lesz.
A hozzászólás módosítva: Márc 6, 2015
(#) jointsilver36 hozzászólása Márc 6, 2015 /
 
Sziasztok!A következő arduino projektet készítettem el: Bővebben: Link

Erről az eszközről bejövő adatokat szeretném sd kártyára rögzíteni txt formátumban a következő olvasóval-íróval Bővebben: Link
Van valakinek valami ötlete ,hogy lehetne ezt megoldani?Esetleg programozásban kaphatnék segítséget?(az sd kártya író -olvasó készen van .Le van tesztelve és működik)Köszi a segítséget.
Könyvtárai itt találhatók Bővebben: Link
UI:Bocsánat de valamiért a link beillesztés nalam nem működik.
A hozzászólás módosítva: Márc 6, 2015
Következő: »»   1 / 1
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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