|
|
View previous topic :: View next topic |
Author |
Message |
zaremchichak
Joined: 31 Jan 2012 Posts: 3
|
sd/mmc & pic18f2520 |
Posted: Sun Feb 19, 2012 10:26 am |
|
|
Hello!
Sorry, I'm from Russia and my english bad.
I'm trying to connect pic18f2520 and sd/mmc card.
Used:
Driver from http://www.ccsinfo.com/forum/viewtopic.php?t=31532
SanDisk 256 SD card - connected with 78l33, spi interface - with resistors 1.8k&3.3k on CLK, DI, CS and without it on DO.
On pic - internal oscillator 8 MHz
I'm try to run example code from this driver. For connect to PC used Terminal by Bray. They give me this text:
"MMC initialized
Error1st file in list was probably a dir"
Where I made a mistake, why it don't working correctly?
Schematic is ok.
on bottom - example project, please, help me! MMC_SPI_FAT32.h, MMC_SPI_FAT32.с did not change, modifed only "printf(glcd_putc,"NoLongFileName!");" string in MMC_SPI_FAT32.с - was removed.
Code: |
#include <18f2520.h>
#fuses INTRC_IO,NOWDT,PROTECT
#use delay(clock=8000000)
#use rs232(baud=9600, xmit=pin_C6, rcv=pin_C7)
#include <string.h>
#include <MMC_SPI_FAT32.h> // As usual you also need to
#include <MMC_SPI_FAT32.c> // include your device .h file...
void main(void)
{
char f,filename[20],res,i,c;
delay_ms(20);
printf("\r\npic18 started! Good luck!\r\n");
while(TRUE)
{
if(MMCInit() == MMC_OK)
{
printf("MMC initialized\r\n");
InitFAT();
strcpy(filename,"DIR/");
f = InitList(filename);
if(f & MMC_ERROR)
printf("Error");
else
{
do
{
res = ListFiles(f);
for(i=0;i<res;i++)
{
printf(FileList[i].name);
if(FileList[i].isDir)
printf("\\\r\n");//a "\" with row break
else
printf("\r\n");
}
} while(NextPage(f) == MMC_OK);
CloseList(f); // frees the file, but the list is
} // still there...
strcpy(filename,FileList[0].shortName);
f = fopen(filename,'r'); // open file for reading
if((f & MMC_ERROR) == 0) // No error, same as
{ // if(f < MAXFILES)
while(fgetch(&c,f) == MMC_OK)
printf(c);
fclose(f);
}
else if(f == MMC_NOT_FOUND)
printf("1st file in list was probebly a dir");
else
printf("Other error\r\n");
while(TRUE)
; // Loop forever, program is finished
}
else
printf("MMC init failed!\r\n");
delay_ms(1000);
printf("Trying once more..\r\n");
}
} |
|
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9221 Location: Greensville,Ontario
|
|
Posted: Sun Feb 19, 2012 12:48 pm |
|
|
Your mistake is in the HARDWARE and no amount of Software will fix it!
You CANNOT connect a 5 volt PIC to a 3 volt MMC card directly!! Resistors will NOT work......don't know how that ever got started...
Your 3 volt MMC card cannot give 5 volt OUTPUT to PIC for PROPER logic levels....
SEARCH this forum and you'll see dozens of replies,messages, etc.......about this problem which starts by NOT reading the datasheets of the devices....
YOU have 3 options
1) buy a 'low voltage' PIC ie: 18LF4550... 'L' means low voltage
2) add logic level translation chip inbetween the 5 volt PIC and the 3 volt MMC card
3) give up...find another hobby... |
|
|
zaremchichak
Joined: 31 Jan 2012 Posts: 3
|
|
Posted: Sun Feb 19, 2012 6:45 pm |
|
|
ok, but why in internet we have a lot of devices, based on this shematic and work?
Hm...
Can i use logic level converter basen on BSS88 mosfets? |
|
|
asmallri
Joined: 12 Aug 2004 Posts: 1634 Location: Perth, Australia
|
|
Posted: Sun Feb 19, 2012 7:08 pm |
|
|
zaremchichak wrote: | ok, but why in internet we have a lot of devices, based on this shematic and work? |
There are lots of schematics by people that failed to read or understand the electrical specifications of the PIC micro-controller. You CAN use resistor dividers between the PIC and the SD/MMC card for the SDO, SCK and CS.
You SHOULD NOT directly connect DO from the SD card to SPI of the PIC. When the PIC is configured to use the SPI peripheral the input mode switches to Schmidt trigger input. If you examine the worst case logic 1 output voltage for the SD/MMC card (lowest voltage guaranteed for a logic 1) the value is LOWER that the PIC's guaranteed level to detect a logic 1. This means, in a worst case scenario a logic 1 output from the media is detected as a logic 0 by the PIC. Despite this worst case scenario, it works. So the question is when would it fail?
It could fail when the temperate reaches 38 deg C (or not)
It could fail when the temperature reaches 0 deg C (or not)
It could fail on a full moon (or not)
It could fail on a Tuesday (or not)
It could fail at any time (or not) _________________ Regards, Andrew
http://www.brushelectronics.com/software
Home of Ethernet, SD card and Encrypted Serial Bootloaders for PICs!! |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|