Formát SD Card
Úvodní stránka › Fórum › Hardware › Arduino › Formát SD Card
- Toto téma obsahuje celkem 9 odpovědí. Do diskuze (2 diskutující) se naposledy zapojil uživatel Axamith a poslední změna proběhla před 7 roky a 5 měsíci.
-
AutorPříspěvky
-
28.4.2017 v 11:54 #11272AxamithÚčastník
Ahoj, mám problém s komunikaci arduino – SD Card. Klasické připojení karty a její inicializace. Při výpisu info o kartě na serial monitor mi hlásí:
Inicializace SD karty…
Pametova karta nebyla detekovana
Kartu jsem dříve používal v mobilu, MicroSD, 2 GB. Formát ve Win nepomáhá. Něco jsem vygooglil, takže jsem formátoval pomocí SDFormatter v4.0. Nyní kartu detekuje, ale nerozpozná systém souborů FAT:
Typ karty: SD1
System souboru FAT16/FAT32 nenalezen.
Zkuste naformatovat kartu
Dohledal jsem ještě sketch na formátování přímo přes Arduino, knihovna SDFat. V příkladech je sketch formatting, na ser. monitoru vidím výpis z formátování, po otestování karty opět hláška o nerozpoznání FAT 16/32.
Zkoušel jsem takto dvě karty, obě se chovají úplně stejně. Máte někdo zkušenosti, co s tím?29.4.2017 v 16:28 #11279RomanBÚčastníkTaké zdravím, jakou máš desku se čtečkou a použil jsi jenom program pro komunikaci s SD kartou?
30.4.2017 v 19:42 #11285AxamithÚčastníkAhoj, mám čtečku Micro SD.
Použil jsem krom jiných tuto sketch:
// created 28 Mar 2011
// by Limor Fried
// modified 9 Apr 2012
// by Tom Igoe
// modifed 23.3.2013
// by Pavel Putna#include <SD.h>
// nastaví proměné pro info karty
Sd2Card card;
SdVolume volume;
SdFile root;// nastavte správně
// Arduino Ethernet shield: pin 4 – náš případ
// Adafruit SD shields and modules: pin 10
// Sparkfun SD shield: pin 8
const int chipSelect = SS;void setup()
{
Serial.begin(9600);Serial.print(„\nInicializace SD karty…“);
pinMode(4, OUTPUT);// inicializace
if (!card.init(SPI_HALF_SPEED, chipSelect)) {
Serial.println(„\nPametova karta nebyla detekovana“);
return;
} else {
Serial.println(„\nPametova karta nalezena.“);
}// Určí typ karty
Serial.print(„\nTyp karty: „);
switch(card.type()) {
case SD_CARD_TYPE_SD1:
Serial.println(„SD1“);
break;
case SD_CARD_TYPE_SD2:
Serial.println(„SD2“);
break;
case SD_CARD_TYPE_SDHC:
Serial.println(„SDHC“);
break;
default:
Serial.println(„Neznama“);
}// Now we will try to open the ‚volume’/’partition‘ – it should be FAT16 or FAT32
if (!volume.init(card)) {
Serial.println(„System souboru FAT16/FAT32 nenalezen.\nZkuste naformatovat kartu“);
return;
}// print the type and size of the first FAT-type volume
uint32_t volumesize;
Serial.print(„\nVolume type is FAT“);
Serial.println(volume.fatType(), DEC);
Serial.println();volumesize = volume.blocksPerCluster(); // clusters are collections of blocks
volumesize *= volume.clusterCount(); // we’ll have a lot of clusters
volumesize *= 512; // SD card blocks are always 512 bytes
Serial.print(„Volume size (bytes): „);
Serial.println(volumesize);
Serial.print(„Volume size (Kbytes): „);
volumesize /= 1024;
Serial.println(volumesize);
Serial.print(„Volume size (Mbytes): „);
volumesize /= 1024;
Serial.println(volumesize);Serial.println(„\nNalezene soubory na karte (nazev, datum a velikost v bajtech): „);
root.openRoot(volume);// list all files in the card with date and size
root.ls(LS_R | LS_DATE | LS_SIZE);
}void loop(void) {
}Čtečku jsem zkoušel jak na Pro mini, tak na UNO a Wemos D1. Vím, že je třeba definovat vstup na Arduinu pinu. Volba 4, 8, 10 (dle Arduina). NIC nejede, ani volba SS. Nebo spíš ji detekuje, nenajde FAT a veškeré pokusy s kartou z příkladů z knihoven nejedou, respektive s kartou nekomunikují. Koupil jsem i novou kartu, pro klid duše, pořád bez výsledků. Buď kartu nedetekuje, nebo ji detekuje a nerozpozná FAT16/32
30.4.2017 v 21:24 #11286RomanBÚčastníkJá vlastním Ethernet s SD a tam je použit pin 4. U tebe samozřejmě je možnost volby zapíchnutím drátku. Vyzkoušej také skeč z Arduina IDE, je tam v příkladěch pod SD. Je to vlastně to stejné jako ty zde cituješ, ale akorát je to počeštěno. Jediné co je špatně je:
// nastavte správně
// Arduino Ethernet shield: pin 4 – náš případ
// Adafruit SD shields and modules: pin 10
// Sparkfun SD shield: pin 8
const int chipSelect = SS;Má být const int chipSelect = 4; nebo jiný tebou použitý pin.
Zároveň zachovej a definuj tento pin v setupu
Serial.print(“\nInicializace SD karty…”);
pinMode(4, OUTPUT);A jaké používáš napětí? 5V nebo 3,3V
1.5.2017 v 13:41 #11293AxamithÚčastníkAbych minimalizoval problémy s různým pochopením HW a SW, omezil jsem testování na UNO a originální příklady ke knihovně. UNO, napájené přes USB, SD modul připojen na GND a 5V,
CS – PIN 10
MOSI – PIN 11
MISO – PIN 12
SCK – PIN 13Kartu 4 GB jsem naformátoval pomocí SD Card Formatter, nastavení :
Format type – Full (OverWrite) // i když by stačilo QUICK
Format size adjustment – OFFSketch dle příkladu z knihovky SD – CardInfo:
/*
SD card testThis example shows how use the utility libraries on which the‘
SD library is based in order to get info about your SD card.
Very useful for testing a card when you’re not sure whether its working or not.The circuit:
* SD card attached to SPI bus as follows:
** MOSI – pin 11 on Arduino Uno/Duemilanove/Diecimila
** MISO – pin 12 on Arduino Uno/Duemilanove/Diecimila
** CLK – pin 13 on Arduino Uno/Duemilanove/Diecimila
** CS – depends on your SD card shield or module.
Pin 4 used here for consistency with other Arduino examplescreated 28 Mar 2011
by Limor Fried
modified 9 Apr 2012
by Tom Igoe
*/
// include the SD library:
#include <SPI.h>
#include <SD.h>// set up variables using the SD utility library functions:
Sd2Card card;
SdVolume volume;
SdFile root;// change this to match your SD shield or module;
// Arduino Ethernet shield: pin 4
// Adafruit SD shields and modules: pin 10
// Sparkfun SD shield: pin 8
// MKRZero SD: SDCARD_SS_PIN
const int chipSelect = 10;void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}Serial.print(„\nInitializing SD card…“);
// we’ll use the initialization code from the utility libraries
// since we’re just testing if the card is working!
if (!card.init(SPI_HALF_SPEED, chipSelect)) {
Serial.println(„initialization failed. Things to check:“);
Serial.println(„* is a card inserted?“);
Serial.println(„* is your wiring correct?“);
Serial.println(„* did you change the chipSelect pin to match your shield or module?“);
return;
} else {
Serial.println(„Wiring is correct and a card is present.“);
}// print the type of card
Serial.print(„\nCard type: „);
switch (card.type()) {
case SD_CARD_TYPE_SD1:
Serial.println(„SD1“);
break;
case SD_CARD_TYPE_SD2:
Serial.println(„SD2“);
break;
case SD_CARD_TYPE_SDHC:
Serial.println(„SDHC“);
break;
default:
Serial.println(„Unknown“);
}// Now we will try to open the ‚volume’/’partition‘ – it should be FAT16 or FAT32
if (!volume.init(card)) {
Serial.println(„Could not find FAT16/FAT32 partition.\nMake sure you’ve formatted the card“);
return;
}// print the type and size of the first FAT-type volume
uint32_t volumesize;
Serial.print(„\nVolume type is FAT“);
Serial.println(volume.fatType(), DEC);
Serial.println();volumesize = volume.blocksPerCluster(); // clusters are collections of blocks
volumesize *= volume.clusterCount(); // we’ll have a lot of clusters
volumesize *= 512; // SD card blocks are always 512 bytes
Serial.print(„Volume size (bytes): „);
Serial.println(volumesize);
Serial.print(„Volume size (Kbytes): „);
volumesize /= 1024;
Serial.println(volumesize);
Serial.print(„Volume size (Mbytes): „);
volumesize /= 1024;
Serial.println(volumesize);Serial.println(„\nFiles found on the card (name, date and size in bytes): „);
root.openRoot(volume);// list all files in the card with date and size
root.ls(LS_R | LS_DATE | LS_SIZE);
}void loop(void) {
}
a výsledek:
Initializing SD card…initialization failed. Things to check:
* is a card inserted?
* is your wiring correct?
* did you change the chipSelect pin to match your shield or module?Pro klid duše jsem dal i nové propojovací kabely, vyzkoušel SS piny č. 4, 8, 10 (i když u UNA je jasné, že 4 a 8 je blbost), opět bez výsledku. Taková kravina jako SD karta a co já na tom strávil času … a bez výsledku.
1.5.2017 v 19:40 #11296RomanBÚčastníkJeště vyzkoušej test pinů 10-13 jestli jsou OK. Viz https://bastlirna.hwkitchen.cz/i-zaklady-2-bliknuti-led/ s tím, že ti bude stačit ta jedna LEDka a ty ji jenom přepojíš na další piny. A pin 12 bych ještě otestoval jako vstup. Pokud bude vše OK, tak to vypadá na mrtvou čtečku.
/*
Blikání
LED na sekundu zasvítí a pak zase na sekundu zhasne. Opakovaně.
*/// Pin 13 je na většině Arduino deskách spojen s LED
int led1 = 10;
int led2 = 11;
int led3 = 12;
int led4 = 13;void setup() {
// nastavení pinu na Output
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
}// opakujici se smyčka
void loop() {
digitalWrite(led1, HIGH); //zapnutí led
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);delay(1000); // po dobu jedné sekundy
digitalWrite(led1, LOW); // vypnuti LED
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);delay(1000); // po dobu jedné sekundy
}2.5.2017 v 13:07 #11301AxamithÚčastníkDíky, testnu to. Ale myslím, že problém bude s modulem. Zkoušel jsem jak na UNO, tak na Wemos a Pro mini a vždy se stejným výsledkem. Originální příklady k SD modulu. takže objednám nový modul a uvidíme.
5.5.2017 v 10:21 #11351AxamithÚčastníkTak a mám jasno, problém byl v čtečce. Ač byla nová a nepoužitá, je mrtvá.
S jinou čtečkou vše jede jak má. Co já se nad tím natrápil …
Děkuji za konzultaci a pomoc s řešením problému.5.5.2017 v 19:32 #11357RomanBÚčastníkKdyby vše fungovalo napoprvé, nemělo by bastlení smysl 🙂 A proto přeji mnoho úspěchů v projektu Arduino.
6.5.2017 v 5:11 #11359AxamithÚčastníkAč je to k nevíře, čtečka se probudila k životu. Koukl jsem na ni lupou s tím, že se podívám, co by se z ní dalo využít a rozeberu ji na díly. A našel jsem neproletovaný spoj. Kapka cínu a už jede 🙂
-
AutorPříspěvky
- Pro reakci na toto téma se musíte přihlásit.