This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

ADS8688: SPI 8 channel has some problem

Part Number: ADS8688

Tool/software:

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1533590/ads8688-spi-clock-and-sdo-timing

This issue is linked to the above link.

I attempted to use the Manual Channel n Select (MAN_Ch_n) function in the ADS8688 data sheet to communicate with an 8-channel ADC and SPI. However, the CS signal remains low in the interval where the SCLK corresponding to each channel ends (immediately after 32 clocks). In other words, the falling edge does not occur. I believe you will understand this easily by looking at the photo.

Do I have any other options? I need an 8-channel ADC and SPI communication.

Below is the SPI configuration code.

/*
* ======== test function ========
*/
void spi_test(UArg arg0, UArg arg1)
{
SPI_Params spiParams; /* SPI params structure */
SPI_Handle handle; /* SPI handle */
SPI_Transaction transaction; /* SPI transaction */
bool retVal = false; /* return value */

/* Init GPIO driver */
GPIO_init();

/* Init SPI driver */
SPI_init();

/* Default SPI configuration parameters */
SPI_Params_init(&spiParams);
spiParams.frameFormat = SPI_POL0_PHA1;
spiParams.dataSize = 32;

/* Uncomment below lines of code to test callback mode */
/* spiParams.transferMode = SPI_MODE_CALLBACK; */
/* spiParams.transferCallbackFxn = MCSPICallbackFxn; */

/* Open QSPI driver */
// handle = SPI_open(BOARD_MCSPI_SERIALIZER_INSTANCE, &spiParams);
handle = SPI_open(1U, &spiParams); // Select SPI2

/* Load data */
LoadData();

/* Initiate transfer */
uint8_t cnt = 0;
for(cnt = 0; cnt < 32 ; cnt++){
txBuf[cnt]= 0x00U;
}

txBuf[3] = 0xC0U;
txBuf[7] = 0xC4U;
txBuf[11] = 0xC8U;
txBuf[15] = 0xCCU;
txBuf[19] = 0xD0U;
txBuf[23] = 0xD4U;
txBuf[27] = 0xD8U;
txBuf[31] = 0xDCU;
transferLength = 8U;

transaction.count = transferLength;
transaction.txBuf = &txBuf[0];
transaction.rxBuf = &rxBuf[0];

while(1)
{
retVal = SPI_transfer(handle, &transaction);
spiResultBuf = ((uint16_t)rxBuf[1] << 8) | rxBuf[0];
System_printf("usr rx data is 0x%x%x, %u \n", rxBuf[1], rxBuf[0], spiResultBuf);
delay(DELAY_VALUE);
}

if(false == retVal)
{
SPI_log("\n Error occurred in spi transfer \n");
}
else
{
/**
* This below is check is required for callback mode to indicate the
* transfer completion.
*/
if(SPI_MODE_CALLBACK == spiParams.transferMode)
{
while(txCompleteCallbackFlag == 1U);
}

retVal = VerifyData((uint8_t *)&serializerData[0], &rxBuf[0], transferLength);

if(true == retVal)
{
SPI_log("\n All tests have passed. \n");
}
else
{
SPI_log("\n Some tests have failed. \n");
}
}

SPI_close(handle);

while(1);
}