comunicación SPI SBC

-1

Estoy usando el controlador MPC5748G, ya que quiero comunicar mi SPI con el chip SBC incorporado, es decir, MC33905. Al revisar la hoja de datos, estoy enviando los comandos correspondientes a SBC a través de las API de SPI para INIT WDG, INIT regd, ... Por favor, consulte el archivo adjunto para el conjunto de comandos que he enviado. Ahora tengo que observar la línea MISO, ¿cuál debería ser la respuesta de SBC después de que enviemos cada comando que no estamos recibiendo? Por favor, ayúdeme a comprender la respuesta de SBC para cada comando SPI. He intentado depurarlo y capturar las líneas en el analizador Beagle SPI. Estoy recibiendo algunos datos, pero no estoy seguro de que los datos sean correctos o no. ¿Cómo puedo leer el modo de SBC? Esta es la tarea principal para nosotros.

Por favor, ayúdame en esto, ya que es de alta prioridad.

Este es mi código

volatile Spi_StatusType SpiStatus01;
 unsigned short int Init_WDG[1] = {0x4C10};   //  command to initialize WDG
 unsigned short int Init_Regd[1] = {0x4A00};  // Command to initialize registers
 unsigned short int Init_Misc[1] = {0x5000};  // Command for Misc initializations
 unsigned short int Init_WDG_Time[1] = {0x541F};  // command to initialize WDG time
 unsigned short int WDG_Refresh[1] = {0x5A00};    // command to refresh WDG
 unsigned short int Read1[1] = {0x2500};          // Command to read the status of SBC
 unsigned short int Read2[1] = {0x1F00};          // command to read the status of SBC
 unsigned short   tc_01[1],tc_02[1];              // Receive buffers


/*******************************************************************************
**                      Local Function Declarations                           **
*******************************************************************************/


/*******************************************************************************
**                         Function Definitions                               **
*******************************************************************************/

/*Init test case*/
void TC_Init()
{


uint8 i;
/*  Spi initialization */       
Spi_Init(&SpiDriver_0);

/*  Get the status of   Spi after   initialization */
 SpiStatus01 = Spi_GetStatus();

 Spi_WriteIB(SpiConf_SpiChannel_SpiChannel_0,Init_WDG);   

Spi_SyncTransmit(SpiConf_SpiSequence_SpiSequence_0);
         for(i=0; i<=100; i++);

Spi_WriteIB(SpiConf_SpiChannel_SpiChannel_0,Init_Regd);

Spi_SyncTransmit(SpiConf_SpiSequence_SpiSequence_0);
         for(i=0; i<=100; i++);

Spi_WriteIB(SpiConf_SpiChannel_SpiChannel_0,Init_Misc);

Spi_SyncTransmit(SpiConf_SpiSequence_SpiSequence_0);
         for(i=0; i<=100; i++);

Spi_WriteIB(SpiConf_SpiChannel_SpiChannel_0,Init_WDG_Time);

Spi_SyncTransmit(SpiConf_SpiSequence_SpiSequence_0);
         for(i=0; i<=100; i++);



   //module initialisation


 Can_Init(&CanConfigSet_0);

  // set the controller mode to START 
  Can_SetControllerMode(0,CAN_T_START);
  Can_SetControllerMode(1,CAN_T_START);

 while (1)
 {
 Spi_WriteIB(SpiConf_SpiChannel_SpiChannel_0,WDG_Refresh);

Spi_SyncTransmit(SpiConf_SpiSequence_SpiSequence_0);
         for(i=0; i<=100; i++);



 Spi_WriteIB(SpiConf_SpiChannel_SpiChannel_0,Read1);
 Spi_SyncTransmit(SpiConf_SpiSequence_SpiSequence_0);
         for(i=0; i<=100; i++);
 Spi_ReadIB (SpiConf_SpiChannel_SpiChannel_0,tc_01);



Spi_WriteIB(SpiConf_SpiChannel_SpiChannel_0,Read2);
 Spi_SyncTransmit(SpiConf_SpiSequence_SpiSequence_0);
         for(i=0; i<=100; i++);
 Spi_ReadIB (SpiConf_SpiChannel_SpiChannel_0,tc_02);

     for(i=0; i<=100; i++);

 /*Transmit test case  */
     Test_transmit(3,1,1);

 }      
}
    
pregunta user36809

1 respuesta

1

¿Seleccionó el borde de muestreo correcto? Los datos son válidos en el borde posterior del reloj.

Además, Spi_SyncTransmit está bloqueando la función, así que supongo que no hay necesidad de agregar un bucle for

    
respondido por el Antonio Della Rovere

Lea otras preguntas en las etiquetas