Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

Acemi nin MMC-sd kart okuyucu

Başlatan rree, 06 Ekim 2012, 11:25:17

rree

  Yazdığım ilk kodlar aşağıda
//#include <FatRE01.h>
#include <33FJ32MC204.h>
#FUSES PR_PLL,XT,NOWDT,NODEBUG,NOJTAG,NOWINDIS
#use delay(clock=80M,oscillator=10M)
//#use fixed_IO(B_outputs = PIN_B0,PIN_B0,PIN_B1,PIN_B1,PIN_B2,PIN_B2)
//#include <LCD.C>



#include <Lcd_Zafzaf.c>
#include <mmc_CCS.c>
#include <Dspic33FjRPx.C>
#include <CCSBol32_32.C>
//mmc_spi_rft.c> 
//<mmc_spi.c> 
#use rs232 (baud=9600, xmit=pin_C0, rcv=pin_C1, parity=N, stop=1)


#define  Led1            PIN_B8
#define  Led2            PIN_B9 
#define  Push_Button     PIN_A5 
#int_TIMER1

 int error; 
 int8 data;
 unsigned int8 TxDt,RxDt;
void  TIMER1_isr(void) 
{

}



void main()
{
 int8 i,j,Ok_Data,count; 
 
//   SETUP_SPI (SPI_MASTER |  SPI_SS_DISABLED |SPI_H_TO_L| SPI_CLK_DIV_256 | SPI_XMIT_L_TO_H);
// setup_spi(SPI_MASTER | SPI_L_TO_H | SPI_CLK_DIV_256);
//setup_spi(SPI_MASTER | SPI_H_TO_L | SPI_CLK_DIV_256);
setup_spi(spi_master | spi_l_to_h | spi_clk_div_64 | spi_xmit_l_to_h); 
   lcd_init();
  //  enable_interrupts(INT_TIMER1);
  //Spi33fjRPxRAyarla(18,SS1OUT);//SDO1 SCK1OUT SS1OUT
  Spi33fjRPxRAyarla(20,SCK1OUT);//SDO1 SCK1OUT SS1OUT
  Spi33fjRPxRAyarla(21,SDO1);//SDO1 SCK1OUT SS1OUT
  Spi33fjRPINX(24,SDI1);

   
  // Spi33fjRPxRAyarla(16,U1TX);
  // Spi33fjRPINX(17,U1RX);
 
Delay_ms(1);
  Output_High(Pin_c2);
printf("\r\n CS=High \r\n");
For(i=0;i<10;i++)
     { 
       //SPI_WRITE(0xFF);
        TxDt= 0xFF;       
        RxDt=spi_read(TxDt);
        printf(" TX=%X RX=%1X\r\n",TxDt,RxDt);

      } 
//SPI_WRITE(0xAA);                        // send reset command
//data=spi_read(0xAA);
        TxDt= 0xAA;       
        RxDt=spi_read(TxDt);
        printf(" TX=%X RX=%1X\r\n",TxDt,RxDt);
for(i=0;i<10;i++)
     { 
       TxDt= 0xFF;       
        RxDt=spi_read(TxDt);
        printf(" TX=%X RX=%1X\r\n",TxDt,RxDt);
      }  
      
      
OUTPUT_LOW(PIN_C2);
printf("\r\n CS=Low \r\n");
Delay_ms(10);
         TxDt= 0xFF;       
         RxDt=spi_read(TxDt);
         printf(" TX=%X RX=%1X\r\n",TxDt,RxDt);
         TxDt= 0xFF;       
         RxDt=spi_read(TxDt);
         printf(" TX=%X RX=%1X\r\n",TxDt,RxDt);
 TxDt= 0xBB;       
 RxDt=spi_read(TxDt);
 printf(" TX=%X RX=%1X\r\n",TxDt,RxDt);                      // send reset command
for(i=0;i<20;i++)
     { 
       TxDt= 0xFF;       
        RxDt=spi_read(TxDt);
        printf(" TX=%X RX=%1X\r\n",TxDt,RxDt);
        if(RxDt=0xFF){Break;}
      }  
//SPI_WRITE(0x40);                        // send reset command
//data=spi_read(0x40);
        TxDt= 0x40;       
        RxDt=spi_read(TxDt);
        printf(" TX=%X RX=%1X\r\n",TxDt,RxDt);
//SPI_WRITE(0x00);                        // all the arguments are 0x00 for the reset command
//data=spi_read(0x00);
        TxDt= 0x00;       
        RxDt=spi_read(TxDt);
        printf(" TX=%X RX=%1X\r\n",TxDt,RxDt);
//SPI_WRITE(0x00);
//data=spi_read(0x00);
        TxDt= 0x00;       
        RxDt=spi_read(TxDt);
        printf(" TX=%X RX=%1X\r\n",TxDt,RxDt);
//SPI_WRITE(0x00);
//data=spi_read(0x00);
        TxDt= 0x00;       
        RxDt=spi_read(TxDt);
        printf(" TX=%X RX=%1X\r\n",TxDt,RxDt);
//SPI_WRITE(0x00);
//data=spi_read(0x00);
        TxDt= 0x00;       
        RxDt=spi_read(TxDt);
        printf(" TX=%X RX=%1X\r\n",TxDt,RxDt);
//SPI_WRITE(0x95);
//data=spi_read(0x95);
        TxDt= 0x95;       
        RxDt=spi_read(TxDt);
        printf(" TX=%X RX=%1X\r\n",TxDt,RxDt);
    for(i=0;i<40;i++)
     { 
       //SPI_WRITE(0xFF);
       //data=spi_read(0xFF);
               TxDt= 0xFF;       
        RxDt=spi_read(TxDt);
        printf(" TX=%X RX=%1X\r\n",TxDt,RxDt);
         if(RxDt=0x01){Break;}
      }  

        TxDt= 0xFF;       
        RxDt=spi_read(TxDt);
        printf(" TX=%X RX=%1X\r\n",TxDt,RxDt);
                TxDt= 0xFF;       
        RxDt=spi_read(TxDt);
        printf(" TX=%X RX=%1X\r\n",TxDt,RxDt);
    for(i=0;i<40;i++)
     { 
       //SPI_WRITE(0xFF);
       //data=spi_read(0xFF);
               TxDt= 0xFF;       
        RxDt=spi_read(TxDt);
        printf(" TX=%X RX=%1X\r\n",TxDt,RxDt);
         if(RxDt=0xFF){Break;}
      } 



CS=High
TX=FF RX=0
TX=FF RX=0
TX=FF RX=0
TX=FF RX=0
TX=FF RX=0
TX=FF RX=0
TX=FF RX=0
TX=FF RX=0
TX=FF RX=0
TX=FF RX=0
TX=AA RX=0
TX=FF RX=0
TX=FF RX=0
TX=FF RX=0
TX=FF RX=0
TX=FF RX=0
TX=FF RX=0
TX=FF RX=0
TX=FF RX=0
TX=FF RX=0
TX=FF RX=0

CS=Low
TX=FF RX=7F
TX=FF RX=FF
TX=BB RX=FF
TX=FF RX=FF
TX=40 RX=FF
TX=0 RX=FF
TX=0 RX=FF
TX=0 RX=FF
TX=0 RX=FF
TX=95 RX=FF
TX=FF RX=FF
TX=FF RX=1
TX=FF RX=FF
TX=FF RX=FF

Aldığım veriler yukarıda programı linkteki arkadaşın verilerine göre yazdım.
https://www.picproje.org/index.php/topic,36419.msg262296.html#msg262296

Sorumlarım şunlar.
1- CS=High  durumda iken 0XAA niçin göndermemiz gerekir. O durumda mmc den  sadec 0x00  geliyor
2- CS=Low yaptığımda 0xBB  nin anlamı nedir. O durumda 0xFF  başak bir şey gelmiyor.
3- MMC init yazmaya çalışıyorum. Neler yapmalyım?

rr

Bir soruda benden
    mmc.c kütüphanesinde cmd1 ile cmd16 arasında cs=High sonra Cs=Low yapıyor bu gereklimi?
     
      //Cmd1 bitiyor   
OUTPUT_HIGH(PIN_C2);                    // set SS = 1 (off)
SPI_WRITE(0xFF);                        // extra clocks to allow mmc to finish off what it is doing
OUTPUT_LOW(PIN_C2);                     // set SS = 0 (on)
       // cmd16 başladığı yer
        SPI_WRITE(0x50);                // send mmc command one to bring out of idle state
        SPI_WRITE(0x00);

rree

#2

   Okuma görüntülerim
Şimdi MMC  blok veri nasıl yazılacak. Elimdeki ornek şöyle
 


SPI_WRITE(0xFE);                        // send data token

for(i=0;i<512;i++)
{

//SPI_WRITE(i2c_eeprom_read(HIGH(i),LOW(i)));     // send data

}

       Şimdi nasıl bir yol izlmeleyim?