#include <p18f4550.h>
#include <delays.h>
#include <usart.h>

#include <SDCardSPI.h>

#pragma config PLLDIV=5
#pragma config CPUDIV=OSC1_PLL2
#pragma config USBDIV=2
#pragma config FOSC=HSPLL_HS
#pragma config IESO=OFF
#pragma config PWRT=ON
#pragma config WDT=OFF
#pragma config MCLRE=ON
#pragma config XINST=OFF
#pragma config DEBUG=OFF
#pragma config FCMEN = OFF
#pragma config VREGEN=ON
#pragma config LVP=OFF
#pragma config BOR=OFF

#pragma udata data=0x400
volatile far char Buffer[512];
#pragma udata 


void main(void){
unsigned char k;
unsigned int j;
	OpenUSART( USART_TX_INT_OFF &
	USART_RX_INT_OFF &
	USART_ASYNCH_MODE &
	USART_EIGHT_BIT &
	USART_SINGLE_RX &
	USART_BRGH_LOW,
	77);
	Delay10KTCYx(255);
	
	
	for(j=0;j<512;j++) Buffer[j]=j;

	putrsUSART("Iniciando SD Card\n\r" );
	SDCard_init();
	SDCard_read_CID();
	SDCard_read_CSD();
	printf("Escribimos sector 0x200\n\r" );
	if(SDCard_write_block(0x200,Buffer)==0){
		printf("Error en escritura\n\r" );
	}else{
		printf("Leemos sector 0x200\n\r" );
		if(SDCard_read_block(0x200,Buffer)==0){
			printf("Error en lectura\n\r" );
		}else{
			printf("Valores Leidos:\r\n\r\n");
		    for(j=0;j<16;j++){
		      for(k=0;k<32;k++){
		         printf("%X,",((unsigned char)Buffer[j*32+((unsigned int)k)]));
		      }
		      printf("\r\n");
		    }
			putrsUSART("Listo\n\r" );
		}
	}
	while(1){				// Bucle infinito.
	}
} 