Show Posts
Pages: 1 ... 57 58 [59] 60 61 ... 109
871  Using Arduino / Storage / Re: itdb02 sd card : unable to do working on: October 04, 2012, 03:43:09 pm
The card does not return a valid response to a read.  It must not be a true SD card.

SDFormatter 3.1 also rejects it so it won't work in some SD devices.

Windows accepts cards released before the official SD spec and MMC cards.

I didn't add code for these cards to the Arduino libraries since it would increase the size of the libraries and these old cards are now rarely used.
872  Using Arduino / Storage / Re: itdb02 sd card : unable to do working on: October 04, 2012, 12:12:05 pm
Most likely your 16MB card is formatted FAT12.

You can force it to be FAT16 by using the SdFat SdFormatter example located in SdFat/examples/SdFormatter.

All SD cards support SPI.  If your 16MB card is an MMC card, it won't be supported by SdFat or the Arduino SD.h library.
873  Using Arduino / Storage / Re: MicroSD: New Card Issues on: October 01, 2012, 06:00:32 pm
The methods are documented in html generated by doxygen.  

Click on SdFat.html in the unzipped SdFatBeta20120825 directory and explore the Classes tab.

Most of the important methods are illustrated in the examples in the SdFat/examples folder.

There are also examples in the SdFatBeta20120825/extras/exampleV1 folder.  These are older but demonstrate rewrite, seek, remove, and other basic methods.
874  Using Arduino / Storage / Re: MicroSD: New Card Issues on: October 01, 2012, 04:47:10 pm
O.K. - I have seen the CRC problem with other cheap cards.

You can enable CRC with any card and it will increase reliability a great deal.  Data is protected by a 16-bit CRC so SPI errors will be detected. 

Performance for all cards will be reduced since calculating CRC requires CPU cycles.  Run bench using a good card with and without CRC to see the hit.

I suspect that the performance of these new cards is very low.  Edit bench.ino and decrease the file size to one MB by changing FILE_SIZE_MB like this:

Code:
#define FILE_SIZE_MB 1
#define FILE_SIZE (1000000UL*FILE_SIZE_MB)

bench.ino should run in 1/5 the time.  Wait at least three minutes.
875  Using Arduino / Storage / Re: MicroSD: New Card Issues on: October 01, 2012, 01:19:58 pm
Ordering new cards seems like a good idea.

I noticed that BENCH.DAT was created even though open failed.  This means data was written to the card but a failed status was returned.

I am curious to see what happens if you edit Sd2Card.cpp to accept the incorrect return status.

At about line 670 of Sd2Card.cpp change this
Code:
  status_ = spiRec();
  if ((status_ & DATA_RES_MASK) != DATA_RES_ACCEPTED) {
    error(SD_CARD_ERROR_WRITE);
    goto fail;
  }
  return true;
to this
Code:
  status_ = spiRec();
  return true;  // Ignore write response
  if ((status_ & DATA_RES_MASK) != DATA_RES_ACCEPTED) {
    error(SD_CARD_ERROR_WRITE);
    goto fail;
  }
  return true;

Run bench and see if BENCH.DAT contains text lines like this:
Quote
ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRST
ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRST
ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRST
ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRST
ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRST
ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRST
876  Using Arduino / Storage / Re: MicroSD: New Card Issues on: September 30, 2012, 07:46:03 pm
I don't think other configuration options will help.

If possible try the card in another Arduino and SD module.  This is a long shot since read operations seem to work with the Teensy.

It may be that the card has problems with single block write commands in SPI mode.
877  Using Arduino / Storage / Re: MicroSD: New Card Issues on: September 30, 2012, 03:04:29 pm
This card fails by returning an error status after a 512 byte data block is sent to the card during a write. The following error code is for a CRC error for the data block.  
Quote
error: write MBR
SD error: 13,b
SD cards should ignore a block's CRC by default in SPI mode.

Try enabling CRC checking by editing SdFatConfig.h and setting USE_SD_CRC to 1 or 2.
Code:
/**
 * To enable SD card CRC checking set USE_SD_CRC nonzero.
 *
 * Set USE_SD_CRC to 1 to use a smaller slower CRC-CCITT function.
 *
 * Set USE_SD_CRC to 2 to used a larger faster table driven CRC-CCITT function.
 */
#define USE_SD_CRC 0
Try the SdFormatter example again.  If this fixes the problem, the card does not function correctly in SPI mode.  The Arduino has no CRC hardware so enabling software CRC will reduce write performance.

Another possible cause is a bad MOSI SPI signal.  I don't think this is the problem with your 3.3V setup.
878  Using Arduino / Storage / Re: MicroSD: New Card Issues on: September 29, 2012, 07:13:40 pm
I wrote SdFat, Fat16, and the base code for SD.h.  These three libraries have similar code but the new beta of SdFat supports more SD cards than other libraries so download and install SdFatBeta20120825.zip http://code.google.com/p/beta-lib/downloads/list.

Run these three examples: QuickStart, SdInfo, and bench.

Post the error codes if any of the above examples fail.  Also post the results of the bench example if it runs without errors.

If all examples run O.K. change this line in bench.ino from this
Code:
#define FILE_SIZE_MB 5
to
Code:
#define FILE_SIZE_MB 25
And rerun it.  This should do a write stress test.
879  Using Arduino / Storage / Re: SD Card filesystem poblem on: September 14, 2012, 03:45:04 pm
Quote
I am not using SoftwareSerial, I am using the internal Serial object to communicate with the gprs.
HardwareSerial also uses lots of stack for interrupts.  I assumed SoftwareSerial since many gprs libraries use it.

Are you checking all SdFat calls for error returns?
880  Using Arduino / Storage / Re: SD Card filesystem poblem on: September 14, 2012, 11:40:10 am
Quote

I guess that the flash memory was not enough for SdFat buffers, everything crashed in a reset loop...

Flash use will not cause a crash in a reset loop.  If you are that close to running out of RAM, you will likely have a problem if you log data and run gprs at the same time.  A pin change interrupt in SoftwareSerial can cause a stack overflow while an SdFat function like remove() is executing.

If possible check the amount of free stack by adding this include:
Code:
#include <SdFatUtil.h>
And this print in setup()
Code:
  Serial.println(FreeRam());
You need 200-300 bytes of free RAM in addition to any you allocate in functions.

I looked at your SD module and these often fail. 

The problem is that these modules don't use proper level shifters on MOSI, SCK, and CS.  These signals should be converted from 5V to 3.3V with an IC based level shifter.  Most SD cards are not designed to accept 5V signals.

Too bad you can't use CRC on the SD to check for data transfer errors.  You can check for any detected SD problem like this:
Code:
if (sd.card()->errorCode()) {
  // print SD I/O error code
  Serial.println(sd.card()->errorCode(), HEX);
}

Here are typical SD modules with a level shifter in addition to a 3.3V regulator
http://www.gravitech.us/sdcaad.html
https://www.adafruit.com/products/254
http://www.pjrc.com/teensy/sd_adaptor.html
881  Using Arduino / Storage / Re: Small SDCard library on: September 13, 2012, 05:07:52 pm
The SD standard requires FAT16 formatted cards to be 2GB or less.

The standard requires SDHC cards, 4GB - 32GB, to be formatted FAT32.
882  Using Arduino / Storage / Re: SD Card filesystem poblem on: September 12, 2012, 11:59:47 am
Once the data gets into an SD card there just are not undetected write errors.

Noise on the SPI bus is be the only thing left. 

You can check that by enabling CRC on SPI transfers between the Arduino and SD. 

I added software CRC to SdFat so edit SdFatConfig.h at about line 35 and change USE_SD_CRC to 1 or 2.

Code:
/**
 * To enable SD card CRC checking set USE_SD_CRC nonzero.
 *
 * Set USE_SD_CRC to 1 to use a smaller slower CRC-CCITT function.
 *
 * Set USE_SD_CRC to 2 to used a larger faster table driven CRC-CCITT function.
 */
#define USE_SD_CRC 0

Then all transfers on the SPI bus will be CRC protected.  Calls to SdFat functions will fail with an error return.

883  Using Arduino / Storage / Re: SD ReadWrite example writes too often on: September 12, 2012, 10:17:27 am
An Arduino sketch starts when you power up or load a sketch.  The Arduino is reset when you open the serial monitor.  This means the sketch runs several times, not just once.

Change this:
Code:
Serial.print("Initializing SD card...");

To this:

Code:
Serial.println("Type any character");
 while (Serial.read() < 0);
 Serial.print("Initializing SD card...");

This will prevent writing to the SD before the serial monitor is running.

Then run the sketch and type a character when this message prints.
Quote
Type any character
884  Using Arduino / Storage / Re: SD Card filesystem poblem on: September 12, 2012, 10:04:50 am
Modern SD cards are very tolerant to voltage drops.  They don't commit writes when power is failing. 

The SD data blocks have very powerful ECC so hardware write errors would be detected when you read the Sd on a PC or Mac.

This is a software problem.

How do you run data logging while GPRS is working?

You can't have a file open more than once and you can't call SdFat functions in an ISR.
885  Using Arduino / Storage / Re: How robust is SDlib to other interrupts on: September 12, 2012, 09:14:12 am
SD cards seem to be very tolerant for delays in SPI transfers.  I have delayed for many milliseconds mid-transfer with no problem.

Many people call analogRead() for several pins in an ISR while data is being written to the SD with no problem.  Each call takes about 120 microseconds.

SdFat uses millis() to detect timeout errors so spending more than a millisecond in an ISR will cause millis() to drop counts.  This should just extend the length for a timeout error.
Pages: 1 ... 57 58 [59] 60 61 ... 109