Ayuda con puerto SPI pic32

Saludos a todos

alguien sabe si el puerto SPI1 y SPI2 de un PIC-32MX350F256H se diferencia en algo, tengo una aplicación que controla una memoria SD y por el puerto SPI2 funciona bien pero al cambiar al puerto SPI1 con la misma configuración me da error que no reconoce la SD. necesito hacer este cambio porque la placa esta diseñada con el puerto SPI1.

La configuración inicial del pic y el modulo spi lo hago mediante Code Configurator. También revise los bits de configuración y son iguales en ambos casos solo cambia el registro.

Gracias por sus respuestas.
 
Buenas:

Por fin veo a alguien usando el PIC32 tal como usan los de 8 bits. Desde el 2007 llevo esperando estos detalles.

Hola de datos:
PIC-32MX350F256H

Por lo que he estado leyendo, en apariencia son iguales, hacen lo mismo.

¿Puedes subir el código fuente?

Quizás se te escapa algo, que está en otro banco, en otra posición de memoria.

Saludos.
 
¿Lo haz probado con un emulador? Si es así. ¿Cuál emulador?

Fíjate en la arquitectura del PIC32, de las dos SPI1 y SPI2, puede cambiar algo que no te hayas dado cuenta, como algo negado, por ejemplo.
 
el modo del spi esta correcto por que utilizo la misma configuración en el spi2 y el spi1, en el spi 2 funciona la sd

la configuracion de inicializacion de los 2 es la misma solo cambia el registro

Código:
void SPI2_Initialize (void)
{
    // FRMERR disabled; 
    SPI2STAT = 0x0;
    // SPI2BRG 199; 
    SPI2BRG = 0xC7;
    // AUDMONO disabled; AUDEN disabled; SPITUREN disabled; FRMERREN disabled; IGNROV disabled; SPISGNEXT disabled; SPIROVEN disabled; AUDMOD disabled; IGNTUR disabled; 
    SPI2CON2 = 0x0;
    // MCLKSEL PBCLK; DISSDO disabled; SRXISEL Last Word is Read; CKP Idle:Low, Active:High; FRMEN disabled; FRMSYPW One-Clock; SSEN disabled; FRMCNT 1; MSSEN disabled; MSTEN Master; MODE16 disabled; FRMPOL disabled; SMP Middle; SIDL disabled; FRMSYNC disabled; CKE Active to Idle; MODE32 disabled; SPIFE Frame Sync pulse precedes; STXISEL Complete; DISSDI disabled; ON enabled; ENHBUF enabled; 
    SPI2CON = 0x18120;

}

void SPI1_Initialize (void)
{
    // FRMERR disabled; 
    SPI1STAT = 0x0;
    // SPI1BRG 199; 
    SPI1BRG = 0xC7;
    // AUDMONO disabled; AUDEN disabled; SPITUREN disabled; FRMERREN disabled; IGNROV disabled; SPISGNEXT disabled; SPIROVEN disabled; AUDMOD disabled; IGNTUR disabled; 
    SPI1CON2 = 0x0;
    // MCLKSEL PBCLK; DISSDO disabled; SRXISEL Last Word is Read; CKP Idle:Low, Active:High; FRMEN disabled; FRMSYPW One-Clock; SSEN disabled; FRMCNT 1; MSSEN disabled; MSTEN Master; MODE16 disabled; FRMPOL disabled; SMP End; SIDL disabled; FRMSYNC disabled; CKE Active to Idle; MODE32 disabled; SPIFE Frame Sync pulse precedes; STXISEL Complete; DISSDI disabled; ON enabled; ENHBUF enabled; 
    SPI1CON = 0x18320;

}
 

Adjuntos

  • spi1.jpg
    spi1.jpg
    50.6 KB · Visitas: 7
  • spi2.jpg
    spi2.jpg
    52.2 KB · Visitas: 6
tendras algun osciloscpio, podrias revisar si tiene en la salida del pin SCK que este generado los pulsos de reloj para el microSD?, podrias debugear el microcontorlador, posiblemente se esta quedando en el flag de recepcion de datos, a mi me paso lo mismo con otros micros de PIC18, del cual el pin SCK no lo estaba generando y se quedaba en el ciclo de espera del flag de recepcion.

¡Saludos!
 
Para inicializar la SD se precisa una velocidad concreta, después ya se puede ir mas rápido o mas lento.
Si los generadores de frecuencia no son idénticos, o se usa otro timer con otro preescaler... no saldrá la misma frecuencia.
 
Atrás
Arriba