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   14 / 14
(#) don_peter válasza Wezuv hozzászólására (») Máj 30, 2017 /
 
A (len) csak '\0'-ig olvas? Mert ha nem, akkor gond lehet vele mivel a hosszú fájlnevekre is én hozok létre egy tömböt, amely az esetek többségében hosszabb mint maga a tartalom.
(#) don_peter válasza pajti2 hozzászólására (») Máj 30, 2017 /
 
Ezeken már rég túl vagyok.
A kisméretűeket meg nagyra konvertálja semmi mást nem csinál.
A "." pont nem minden esetben jelenik meg, ha hosszú fájlneves a téma, akkor pl. nincs is pont.. Már megoldottam a kiterjesztésre való szűrést a sorba rendezést hanyagolom, nem fontos. Szerencsére alapból a kártyán létrehozás (felmásolás) dátuma szerint listáz mivel így kerülnek be egymást követően a FAT bejegyzések..
A hozzászólás módosítva: Máj 30, 2017
(#) Wezuv válasza don_peter hozzászólására (») Máj 30, 2017 /
 
Igen, szabványos...
(#) don_peter válasza Wezuv hozzászólására (») Máj 30, 2017 /
 
Értem, ez esetben jó lehet ez a megoldás is nekem..
Bár talán még mindig több lépés mint a rövid fájlnevekre való szűrés..
A hosszú fájlnevekkel még az a baj, hogy vannak kimondottan hosszúak. Valamelyik elfoglal 4 entry-t is. Borzasztó..
(#) don_peter hozzászólása Okt 30, 2017 /
 
Srácok éppen most kezdtem el írni az SD kártya író rutinomat és az a kérdésem merült fel bennem , hogy mind két FAT táblát nekem kell módosítanom, vagy csak az egyiket kell (az elsőt) és a másikat automatikusan frissíti a kártya?

Leírva az tűnik logikusnak, ha mind kettőt én nekem kellene kezelnem, de azért jobb ha megkérdezem..
(#) Hp41C válasza don_peter hozzászólására (») Okt 30, 2017 /
 
A FAT redundanciájának értelme az, hogy ha sérül az első példány, a második felhasználásával az adat még elérhető. Tehát mindkét táblát módosítani kell, hiszen előre nem tudhatod, hogy mikor lesz olvashatatlan egy felhasznált szektor.
(#) don_peter válasza Hp41C hozzászólására (») Okt 30, 2017 /
 
Köszi, erre gondoltam én is, de bizonytalan voltam benne..
(#) don_peter hozzászólása Okt 31, 2017 /
 
Srácok eljutottam odáig, hogy beírom az adatokat SD kártyára, fájl kezelőben látom is, de megnyitni nem tudom. Csatoltam képeket.

1. kép: SD tartalma fájlkezelőben
2. kép: 0. szektor (0. szektor)
3. kép: kezdő szektor (8192. szektor)
4. kép: FAT tábla (8198. szektor)
5. kép: Root tartalma és kijelölve a fájl amire ugrottam (8672. szektor)
6. kép: fájl tartalma (9344. szektor)

A tartalom megegyezik vagy is helyes. (512 byte)

Számolás az ugrásnál: 8672 (Root) + 32 (Root maximum sector) + (7-2)*128 (fájl cluster címe - 2x16bit adat, amelyet a FAT tábla magának tart fent és szorozva sluster/sector-al).
Ekkor megkapjuk a fájl kezdő szektorának címét ami ez esetben a 9344-es szektorra mutat.
Tehát az ellenőrzés jónak kell legyen, de nem értem, hogy még sem tudom megnyitni a fájlt.

A fájl adatainál a méretét független, hogy eredetileg csak 512 byte helyet foglal le én egy egész cluster-t foglalok le neki, mert ez egy alap foglalási egység. (64kbyte)

Lát valaki valami hibát?
Esetleg van valakinek valami ötlete?
Előre is köszi..
(#) bbalazs_ válasza don_peter hozzászólására (») Okt 31, 2017 / 1
 
Otletem van, de nem neznem vegig a mellekleteket, ha nem muszaj.

Formazd le az SD-t, aztan ird ra a sajat fileodat. Mint az elobb. De csak egyet.
Utana mentsd el ezeknek a sectoroknak az ertekeit,mint csinaltad az elobb.

Most formazd le megint es PC-rol masolj fel egy olyan filet, mint a tied.
Ismet mentsd le a fontos, erdekes sectorok erteket.

Hasonlitsd ossze, minek kellett volna kijonni az elso esetben.

Abbol lathatod majd, hogy mit serelmez a rendszer.

Valami normalis filekezelo nincs a kozeledben? VC,NC,Far? Azok talan kevesebb dolgot ellenoriznek es akkor kiderulhet, hogy mire haklis a tied.
(#) don_peter válasza bbalazs_ hozzászólására (») Nov 1, 2017 /
 
Jó ötlet.. Köszi már is nézem a különbségeket.
(#) don_peter válasza bbalazs_ hozzászólására (») Nov 1, 2017 / 1
 
No meg lett a gond.. Nem nagybetűvel írtam be a fájlnevet és ez kiakasztotta az egészet.
Most már frankon működik. Köszi..

Most lettem kész az SD kártya kezeléssel.
Már csak fel kell használnom..
(#) bbalazs_ válasza don_peter hozzászólására (») Nov 1, 2017 /
 
Ugyes vagy!

Egy rovid kerdes: nem volt eddig olyan library, ami ezt tette volna?
Vagy csak szemelyes ambicio fűtött, hogy sajat magad is megcsinald?
(#) don_peter válasza bbalazs_ hozzászólására (») Nov 1, 2017 / 1
 
Túl sok kész projektet találtam, de amiket próbáltam egyiket sem tudtam használni, nem működtek, így megírtam az egészet magamtól, így bármelyik PIC-re át tudom faragni mert ismerem a felépítését. Elsőre kicsit perverznek tűnhet a dolog, de nagyon jó tanulást biztosít egy ilyen projekt.
Az init és olvasás már készen van egy fél éve, arra kellett majd egy hét mire megírtam, az írás volt nehezebb, de erre szerencsére elég volt 2-3 nap mire össze állt a program.

Most már csak a célra kell felhasználnom az írás részét, az olvasást már fél éve használom a SEGA projektemben..
(#) elektros90 hozzászólása Szept 23, 2021 /
 
Sziasztok,
igaz nem PIC-et használok, de ez most lényegtelen is. MicroSD kártyára szeretnék írni, ezt próbálom inicializálni SPI-al. A CMD58-ra 0x05 választ kapok 0x01 helyett, miért? Van valakinek ötlete? A kártya kapacitása 2GB.

2GB_CMD58.PNG
    
(#) pipi válasza elektros90 hozzászólására (») Szept 24, 2021 / 1
 
Nulláról akarsz megírni egy SD alacsony szintű + fájlkezelést?
Én inkább az adott procihoz néznék könyvtárat, mintaprogit. Pic-hez betettem ha jól emlékszem a microchipes példát, nem kellett semmit foglalkozni vele... Esp32-höz szintén...Esp8266-hoz szintén. Arduinóhoz szintén. De ha mélyen akarnék vájkálni, akkor kielemeznék egy működő mintát... Volt egy ftp mintám, ami nem kezelte jól a fájlok dátumát, na abba belenyúltam.
(#) elektros90 válasza pipi hozzászólására (») Szept 25, 2021 /
 
Ez az adott proci (Silabs EFM32) könyvtárából való, de nem működik.
Próbáltam Arduinóval, lazán inicializálta. Ezzel meg itt kaput. Viszont néztem datasheeteket abban más inicializálást írnak elő, nincs is benne a CMD58 kiolvasása.

  1. DSTATUS disk_initialize (
  2.   BYTE drv  /* Physical drive nmuber (0) */
  3. )
  4. {
  5.   BYTE n, cmd, ty, ocr[4];
  6.  
  7.   if (drv) return STA_NOINIT;                   /* Supports only single drive */
  8.   if (stat & STA_NODISK) return stat;           /* No card in the socket */
  9.  
  10.   MICROSD_PowerOn();                            /* Force socket power on */
  11.   MICROSD_SpiClkSlow();                         /* Start with low SPI clock. */
  12.   for (n = 10; n; n--) MICROSD_XferSpi(0xff);   /* 80 dummy clocks */
  13.  
  14.   ty = 0;
  15.   if (MICROSD_SendCmd(CMD0, 0) == 1) {          /* Enter Idle state */
  16.     MICROSD_TimeOutSet(1000);                   /* Initialization timeout of 1000 msec */
  17.     if (MICROSD_SendCmd(CMD8, 0x1AA) == 1) {    /* SDv2? */
  18.       for (n = 0; n < 4; n++) ocr[n] = MICROSD_XferSpi(0xff); /* Get trailing return value of R7 resp */
  19.       if (ocr[2] == 0x01 && ocr[3] == 0xAA) {   /* The card can work at vdd range of 2.7-3.6V */
  20.         while (!MICROSD_TimeOutElapsed() && MICROSD_SendCmd(ACMD41, 0x40000000)); /* Wait for leaving idle state (ACMD41 with HCS bit) */
  21.         if (!MICROSD_TimeOutElapsed() && MICROSD_SendCmd(CMD58, 0) == 0) {        /* Check CCS bit in the OCR */
  22.           for (n = 0; n < 4; n++) ocr[n] = MICROSD_XferSpi(0xff);
  23.           ty = (ocr[0] & 0x40) ? CT_SD2|CT_BLOCK : CT_SD2; /* SDv2 */
  24.         }
  25.       }
  26.     } else {                                    /* SDv1 or MMCv3 */
  27.       if (MICROSD_SendCmd(ACMD41, 0) <= 1) {
  28.         ty = CT_SD1; cmd = ACMD41;              /* SDv1 */
  29.       } else {
  30.         ty = CT_MMC; cmd = CMD1;                /* MMCv3 */
  31.       }
  32.       while (!MICROSD_TimeOutElapsed() && MICROSD_SendCmd(cmd, 0));     /* Wait for leaving idle state */
  33.       if (MICROSD_TimeOutElapsed() || MICROSD_SendCmd(CMD16, 512) != 0) /* Set read/write block length to 512 */
  34.         ty = 0;
  35.     }
  36.   }
  37.   CardType = ty;
  38.   MICROSD_Deselect();
  39.  
  40.   if (ty) {                                     /* Initialization succeded */
  41.     stat &= ~STA_NOINIT;                        /* Clear STA_NOINIT */
  42.     MICROSD_SpiClkFast();                       /* Speed up SPI clock. */
  43.   } else {                                      /* Initialization failed */
  44.     MICROSD_PowerOff();
  45.     stat |= STA_NOINIT;                         /* Set STA_NOINIT */
  46.   }
  47.  
  48.   return stat;
  49. }



A if (!MICROSD_TimeOutElapsed() && MICROSD_SendCmd(CMD58, 0) == 0) sornál kiugrik és fail.
A hozzászólás módosítva: Szept 25, 2021
(#) pipi válasza elektros90 hozzászólására (») Szept 25, 2021 /
 
Nem igazán értek hozzá, csak felületesen...
Esetleg érdemes utánajárni az sd/sdhc különbségnek, valamint az sdkártya 2-3 módban tud dolgozni, hw bekötéstől-és szoftver inittől függően... pl SD mód - 1bit SPI, SDMMC mód 1 vagy 4 bites SPI.... ezek különböző inicializálási parancsokat igényelnek, és úgy tapasztaltam "menet közben" nem lehet áttérni egyikről másik módra, csak poweron után...
Következő: »»   14 / 14
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