Пример #1
0
int wait_initV2()
{
    int i=20000;
    int r;
    spi_spin();
    while(--i)
    {
        if((r=cmd_CMD55())==1)
        {
//			printf("CMD55 %d\n",r);
            SPI(0xff);
            if((r=cmd_CMD41())==0)
            {
//				printf("CMD41 %d\n",r);
                SPI(0xff);
                return(1);
            }
//			else
//				printf("CMD41 %d\n",r);
            spi_spin();
        }
//		else
//			printf("CMD55 %d\n",r);
    }
    return(0);
}
Пример #2
0
int is_sdhc()
{
	int i,r;

	spi_spin();

	r=cmd_CMD8();		// test for SDHC capability
//	printf("cmd_CMD8 response: %d\n",r);
	if(r!=1)
	{
		wait_init();
		return(0);
	}

	r=SPI_PUMP();
	if((r&0xffff)!=0x01aa)
	{
//		printf("CMD8_4 response: %d\n",r);
		wait_init();
		return(0);
	}

	SPI(0xff);

	// If we get this far we have a V2 card, which may or may not be SDHC...

	i=50;
	while(--i)
	{
		if(wait_initV2())
		{
			if((r=cmd_CMD58())==0)
			{
//				printf("CMD58 %d\n  ",r);
				SPI(0xff);
				r=SPI_READ();
//				printf("CMD58_2 %d\n  ",r);
				SPI(0xff);
				SPI(0xff);
				SPI(0xff);
				SPI(0xff);
				if(r&0x40)
					return(1);
				else
					return(0);
			}
//			else
//				printf("CMD58 %d\n  ",r);
		}
		if(i==2)
		{
			puts("SDHC error!\n");
			return(0);
		}
	}
	return(0);
}
Пример #3
0
int spi_init()
{
	int j;
	int i;
	int r;
	SDHCtype=1;
	j=5;
	while(--j)
	{
		SPI_CS(0);	// Disable CS
		spi_spin();
		puts("SD init...\n");
	//	puts("SPI Init()\n");
		DBG("Activating CS\n");
		SPI_CS(1);
		i=50;
		while(--i)
		{
			if(cmd_reset()==1) // Enable SPI mode
			{
				i=1;
				j=1;
			}
			DBG("Sent reset command\n");
			if(i==2)
			{
				puts("SD card reset failed!\n");
				return(0);
			}
		}
	}
	DBG("Card responded to reset\n");
	SDHCtype=is_sdhc();
	if(SDHCtype)
		DBG("SDHC card detected\n");
	else 	// Not SDHC? Set blocksize to 512.
	{
		DBG("Sending cmd16\n");
		cmd_CMD16(1);
	}
	SPI(0xFF);
	SPI_CS(0);
	SPI(0xFF);
	DBG("Init done\n");

	return(1);
}
Пример #4
0
int wait_init()
{
    int i=20;
    int r;
    SPI(0xff);
//	puts("Cmd_init\n");
    while(--i)
    {
        if((r=cmd_init())==0)
        {
//			printf("init %d\n  ",r);
            SPI(0xff);
            return(1);
        }
//		else
//			printf("init %d\n  ",r);
        spi_spin();
    }
    return(0);
}
Пример #5
0
int spi_init()
{
	int i;
	int r;
	SDHCtype=1;
	SPI_CS(0);	// Disable CS
	spi_spin();
	puts("SPI Init()\n");
	DBG("Activating CS\n");
	SPI_CS(1);
	i=8;
	while(--i)
	{
		if(cmd_reset()==1) // Enable SPI mode
			i=1;
		DBG("Sent reset command\n");
		if(i==2)
		{
			DBG("SD card initialization error!\n");
			return(0);
		}
	}
	DBG("Card responded to reset\n");
	SDHCtype=is_sdhc();
	if(SDHCtype)
		DBG("SDHC card detected\n");
	else // If not SDHC, Set blocksize to 512 bytes
	{
		DBG("Sending cmd16 (blocksize)\n");
		cmd_CMD16(1);
	}
	SPI(0xFF);
	SPI_CS(0);
	SPI(0xFF);
	DBG("Init done\n");

	return(1);
}
Пример #6
0
int spi_init()
{
    int i;
    int r;
    SDHCtype=1;
//	HW_PER(PER_TIMER_DIV7)=150;	// About 350KHz
    SPI_CS(0);	// Disable CS
    spi_spin();
//	puts("Activating CS\n");
    SPI_CS(1);
    i=8;
    while(--i)
    {
        if(cmd_reset()==1) // Enable SPI mode
            i=1;
        puts("Sent reset command\n");
        if(i==2)
        {
            puts("SD card initialization error!\n");
            return(0);
        }
    }
    puts("Card responded to reset\n");
    SDHCtype=is_sdhc();
    if(SDHCtype)
        puts("SDHC card detected\n");

    puts("Sending cmd16\n");
    cmd_CMD16(1);
    SPI(0xFF);
    SPI_CS(0);
    SPI(0xFF);
    puts("Init done\n");

//	HW_PER(PER_TIMER_DIV7)=HW_PER(PER_CAP_SPISPEED);
    return(1);
}
Пример #7
0
int is_sdhc()
{
    int i,r;

    spi_spin();

    r=cmd_CMD8();		// test for SDHC capability
//	printf("cmd_CMD8 response: %d\n",r);
    if(r!=1)
    {
        wait_init();
        return(0);
    }
#if 0
    SPI(0xff);
//	SPI_WAIT();
    r=SPI_READ();
//	printf("CMD8_1 response: %d\n",r);
    SPI(0xff);
//	SPI_WAIT();
    r=SPI_READ();
//	printf("CMD8_2 response: %d\n",r);
    SPI(0xff);
//	SPI_WAIT();
    r=SPI_READ();
    if(r!=1)
    {
        wait_init();
        return(0);
    }

//	printf("CMD8_3 response: %d\n",r);
    SPI(0xff);
//	SPI_WAIT();
    r=SPI_READ();
    if(r!=0xaa)
    {
        wait_init();
        return(0);
    }
#endif
    r=SPI_PUMP();
    if((r&0xffff)!=0x01aa)
    {
        wait_init();
        return(0);
    }

//	printf("CMD8_4 response: %d\n",r);

    SPI(0xff);

    // If we get this far we have a V2 card, which may or may not be SDHC...

    i=50;
    while(--i)
    {
        if(wait_initV2())
        {
            if((r=cmd_CMD58())==0)
            {
                printf("CMD58 %d\n  ",r);
                SPI(0xff);
//				SPI_WAIT();
                r=SPI_READ();
                printf("CMD58_2 %d\n  ",r);
                SPI_PUMP();
//				SPI(0xff);
//				SPI(0xff);
//				SPI(0xff);
//				SPI(0xff);
                if(r&0x40)
                    return(1);
                else
                    return(0);
            }
            else
                printf("CMD58 %d\n  ",r);
        }
        if(i==2)
        {
            printf("SDHC Initialization error!\n");
            return(0);
        }
    }
    puts("Determined SDHC status\n");
    return(0);
}