Exemplo n.º 1
0
Arquivo: spi.c Projeto: mrdudz/FPGAPCE
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);
}
Exemplo n.º 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);
    }
#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);
}