CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to CCS Technical Support

MMC SPI interfacing

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
Wizard



Joined: 27 Mar 2006
Posts: 9

View user's profile Send private message Send e-mail MSN Messenger

MMC SPI interfacing
PostPosted: Mon Mar 27, 2006 2:55 pm     Reply with quote

Hi there!

I'm adding a mmc card to my data adquisition project. I'm using a pic18f4550 with usb conection implemeted. I use a 1.8k and 3.3k voltage divider circuit to convert the 5V from the pic to aporx. 3V to the card. As in: http://www.cc5x.de/MMC/
I know that it doesn't suit the standart but peolple have it working. So far I have tried the mmc_spi.c drivers, without good results. I have tested it with two mmc cards(32mb and 256mb) I got nothing from the 256 one. With the 32mb card I can reset it with some problems:
Code:

int mmc_status;
mmc_status=mmc_init();
printf(lcd_putc, "MMC status: %u", mmc_status);

I got a 0(MMC_EC_OK) from mmc_init so I guess its working, if I disconect the card I get a 1(MMC_EC_NOT_IDLE).

The very problem is when I write a sector in the mmc and after that I read it. After write and read I get the commands that all have gone well, but I read diferents values from those which I wrote previously Shocked. So something its pointing to a bad direction.

I would like someone to give some information about the best circuit(or a working one Wink) to interface a 5V pic with a mmc card. I have used the functions from the mmc_spi.c because its a fast way to begin around the mmc card instead I dont like that they dont use the SPI hardware module, I would be pleased to see others codes. Also it would be useful to se an example of using the mmc_spi functions.

here its my MMC testing code:

Code:

#include <18F4550.h>

#fuses HS         
#fuses PLL5       
#fuses CPUDIV1
#fuses USBDIV
#fuses VREGEN   
#fuses NOWDT     
#fuses NOPROTECT 
#fuses NOLVP     
#fuses NODEBUG   

#use delay(clock = 20000000)           

#define Led_on          PIN_E1
#define Led_USB_ready   PIN_E2
#define Led_Red         PIN_C6
#define Led_Yellow      PIN_C7


#define MMC_CLK   PIN_B1

#define MMC_DI    PIN_B0

#define MMC_DO    PIN_B3

#define MMC_CS    PIN_B2

#include "files/mmc_spi.c"
#include "files/LCD420.c"

void main(void)
{

   int mmc_status=35;
   int mmc_hex[512];
   int16 i;

   SETUP_ADC_PORTS(NO_ANALOGS);

   for(i=0;i<512;i++)
   {
      mmc_hex[i]==175;//0xAF
   }


   lcd_init();   
   output_high(Led_Yellow);
   lcd_gotoxy(1,1);
   printf(lcd_putc, "System Init");
   printf(lcd_putc, "\nMMC status: %u", mmc_status);
   delay_ms(1000);
   output_low(Led_Yellow);

   mmc_status=mmc_init();

   lcd_putc("\f");
   lcd_gotoxy(1,2);
   printf(lcd_putc, "MMC status: %u", mmc_status);

   output_high(Led_Yellow);
   delay_ms(2000);
   output_low(Led_Yellow);

   mmc_status=mmc_write_block(0, 512, mmc_hex);

   lcd_gotoxy(1,2);
   printf(lcd_putc, "MMC status: %u", mmc_status);
   delay_ms(2000);

   mmc_status=mmc_read_block(0, 512, mmc_hex);

   lcd_gotoxy(1,2);
   printf(lcd_putc, "MMC status: %u", mmc_status);
   lcd_gotoxy(1,3);
   printf(lcd_putc, "MMC byte 0: %X", mmc_hex[0]);
   lcd_gotoxy(1,4);
   printf(lcd_putc, "MMC byte 512: %X", mmc_hex[511]);

   while (TRUE)
   {
   }
}



thanks in advance guys, all information about mmc and pics its kindly acepted
_________________
Tomas L.
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Mon Mar 27, 2006 3:15 pm     Reply with quote

See this thread for already translated code:
http://www.ccsinfo.com/forum/viewtopic.php?t=23183&start=15

Also do a search of the forum for "MMC". There are many threads
on that circuit, and the problems that it has, such as level translators
and the lack of 100K pull-up resistors, etc. Read the link I posted
and read all the MMC threads before going any further.
http://www.ccsinfo.com/forum/search.php
ckielstra



Joined: 18 Mar 2004
Posts: 3680
Location: The Netherlands

View user's profile Send private message

PostPosted: Mon Mar 27, 2006 3:57 pm     Reply with quote

Code:
      mmc_hex[i]==175;//0xAF

change to
Code:
      mmc_hex[i]=175;//0xAF
Guest








PostPosted: Tue Mar 28, 2006 6:02 am     Reply with quote

Thanks ckielstra, that was my fault. Now, when the card its reseted I can write and read from the mmc card without problems. BUT the problem its to reset the card Shocked

I explain, when I power on th system and the card it's inserted, it can't be reseted, so nothing is going to work, I cant read neither write due it hasn't been reseted to spi mode. But if after the power on I extract the card from the MMC connector and insert it again, and later reset the pic to run again the program, the card it is mysteriously reseted and initiated OK:exclaim:, after that I can write and read.

Also if I switch off the 5V power of the system but not the 3.3V voltage supply of the card and after that I power on the pic to run the program, it reset the card ok. I tried also to switch off the 3.3V supply of the mmc when the system and pic it's running and after that to reset the pic to execute the test program and It can't reset the mmc, like the card was disconnected, but if I extract the mmc and connect it again, the program works as I said before.

So when I turn on the embedded system, if I want to use the mmc card I have to extract it and plug it again and reset the system. Thats really strange, any ideas??????

the code it's still the same, with the change that ckielstra pointed:
Code:
   
for(i=0;i<512;i++)
   {
      mmc_hex[i]=175;//0xAF
   }
Wizard



Joined: 27 Mar 2006
Posts: 9

View user's profile Send private message Send e-mail MSN Messenger

PostPosted: Tue Mar 28, 2006 6:06 am     Reply with quote

It was me, I forgot to login before to post.

Waiting for any ideas ot information about the issue and mmc staff
_________________
Tomas L.
ckielstra



Joined: 18 Mar 2004
Posts: 3680
Location: The Netherlands

View user's profile Send private message

PostPosted: Tue Mar 28, 2006 5:38 pm     Reply with quote

Looks like you have major problems in initializing the MMC card. Did you check out the thread mentioned by PCM Programmer? If you did you have noticed I'm not happy with the hardware design from that particular site. It's a quick-and-dirty design with some flaws in it and I don't feel like giving support on it.

Your program is incomplete, the file mmc_spi.c is missing.
Wizard



Joined: 27 Mar 2006
Posts: 9

View user's profile Send private message Send e-mail MSN Messenger

PostPosted: Wed Mar 29, 2006 2:18 am     Reply with quote

I know the interfacing circuit doesn't compile with the mmc specification, but I'm using the PIC18F4550 running on 5V. So I can't connect the mmc card spi lines directly with the pic pins with the pull-up resistors.
I have thought to use a inverter with open collector outputs (ie. 74LS05) with 1.8K resitors to 3.3V at the outputs. Any ideas?
_________________
Tomas L.
C-H Wu
Guest







MMC level
PostPosted: Wed Mar 29, 2006 8:01 pm     Reply with quote

Suppose PIN_B3 is TTL level input, then you don't need level translator.

#define MMC_DO PIN_B3

For the other pins, all you need is simple voltage divider.

#define MMC_CLK PIN_B1
#define MMC_DI PIN_B0
#define MMC_CS PIN_B2

For the power, I simply use two 0.7V diode like 1N4001 to get the voltage down to 3.6V from 5V with a 1 uF bypass capacitor.

It works fine for me.

Best wishes
Wizard



Joined: 27 Mar 2006
Posts: 9

View user's profile Send private message Send e-mail MSN Messenger

PostPosted: Thu Mar 30, 2006 1:14 am     Reply with quote

Thanks for the point, I think you mean that I dont need voltage divider in the #define MMC_DI PIN_B0 Line, which it's the data output of the MMC. That's how I have the circuit.

Thanks for the point of the diodes, I'll inform about any progress.
_________________
Tomas L.
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
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