Tengo el SPI activo y he probado el funcionamiento de SCLK, MOSI y CS w.r.t el programa con TI CC3200 LP Rev 3.2. Durante las pruebas, noté algunos de los siguientes problemas, como:
-
Los bits de datos que salen de MOSI no coinciden con el byte de datos real que se está enviando
-
A veces, la salida de datos se anula incluso antes del inicio de la señal del reloj y me preguntaba cómo puede ser posible.
SPI configurado para velocidad de bits de: 100 KHz
Submodo SPI: 0 es decir, si lo he entendido bien: los datos se muestrean en el flanco ascendente de la señal del reloj y el bit de datos se retira durante el flanco descendente de la señal del reloj
Modo SPI: MASTER
La FIG (1) a continuación muestra la salida de DSO que aborda el problema (1) discrepancia de datos relevantes. La línea azul es la línea de datos y la amarilla es la señal del reloj.
EnlaFIG(1),hetransmitidouncarácter"A", es decir, 0x0A. Los bits de salida de datos esperados se supone que son (MSB) 0000 1010 (LSB) en binario w.r.t los ocho ciclos de reloj que se muestran arriba. Sin embargo, desde mi percepción de las señales, obtengo otros datos en la salida y no 0x0A. Por favor, hágame saber si los datos que obtengo están realmente mal o si he interpretado las señales de manera incorrecta. Este mismo problema se aplica a la FIG (2) a continuación también cuando transmito un carácter "B", es decir, 0x0B.
Paraobtenermásinformación,tambiénadjuntounaimagenacontinuaciónconlaFIG(3),quemuestralatransmisiónde5bytes,esdecir,"ABCDE".
LaFIG(4)acontinuaciónmuestralasalidaDSOqueabordaelproblema(2)quesegenerandatosrelevantesinclusoantesdeliniciodelaseñaldereloj.Lalíneaazuleslalíneadedatosylaamarillaeslaseñaldelreloj.
EnlaFIG(4),hetransmitidouncarácter"F", es decir, 0x0F. Los bits de salida de datos esperados se supone que son (MSB) 0000 1111 (LSB) en binario w.r.t los ocho ciclos de reloj que se muestran arriba. Aquí también, estoy obteniendo otros datos, así como, se puede ver que los datos se eliminan antes de la señal del reloj y no hay sincronización entre el reloj y los datos.
A continuación se muestra el software / programa que usé mientras realizaba estas pruebas en modo maestro, que es una ligera modificación del ejemplo real de spi_demo en el SDK:
#define MASTER_MODE 1
#define SPI_IF_BIT_RATE 100000
#define TR_BUFF_SIZE 100
//Default start strings
#define MASTER_MSG "ABCDEFGHIJ"
#define SLAVE_MSG ""
void MasterMain()
{
int i;
int bytecount = 1;
unsigned long ulUserData;
unsigned long ulDummy;
memcpy(g_ucTxBuff,MASTER_MSG,sizeof(MASTER_MSG));
ucTxBuffNdx = 0;
ucRxBuffNdx = 0;
MAP_SPIReset(GSPI_BASE);
MAP_SPIConfigSetExpClk(GSPI_BASE,MAP_PRCMPeripheralClockGet(PRCM_GSPI),
SPI_IF_BIT_RATE,SPI_MODE_MASTER,SPI_SUB_MODE_0,
(SPI_SW_CTRL_CS |
SPI_4PIN_MODE |
SPI_TURBO_OFF |
SPI_CS_ACTIVELOW |
SPI_WL_8));
MAP_SPIEnable(GSPI_BASE);
Message("Enabled SPI Interface in Master Mode\n\r");
Report("Press any key to transmit data....");
while(1)
{
ulUserData = MAP_UARTCharGet(UARTA0_BASE);
MAP_SPITransfer(GSPI_BASE,g_ucTxBuff,0,bytecount,
SPI_CS_ENABLE|SPI_CS_DISABLE);
Report("\r\n\nSending:");
for(i = 0; i < size; i++)
{
Report("%c", g_ucTxBuff[i]);
}
Report(":");
Report("\r\nReceived:%s:",g_ucRxBuff);
for(i = 0; i < size; i++)
{
Report("%02X, ", g_ucRxBuff[i]);
}
Report(":\r\n");
}
}
Cualquier ayuda, información o consejo sobre los cambios que se realicen al respecto serán apreciados. Gracias de antemano.
Saludos
~ VD