I would like a clue as to the cause of our ADS1292 SPI continuous data read errors, considering the following:
I am driving ADS1292 from MSP430F5528, and set up is to use DCO at 16.384MHz, with modulation off , and FLL off once frequency is at target. This eliminates the DCO jump see ERRATA, and jitter from modulation.
SMCLK is derived from DCO/4 and used to clock the ADS1292 SCLK, it has been monitored as in specification for the ADS1292 by logic analyser (timing) an frequency meter.
The firmware sets up the micro, ports, clocks, timers, SPI and UART for BLE (BLE not used during test), then puts the ADS1292 into power down by applying 3V AVDD and holding down the reset line while the clock is applied for 10ms.
After the power down for testing without BLE a 0.25s delay is called, prior to initializing the ADS1292. This initialisation is done by writing the registers of the ADS1292 with the appropriate values, after a SDATAC command is sent, for each register write a read is done to confirm it has been effective. The register values used have been verified by use on a USB variant of the board. Following register verification and final setup byte, the RDATAC command is sent. An 8ms delay is then called prior to handling the /DRDY interrupts.
I have been over the timing of the SPI signals and delays in detail and they conform to the ADS1292 latest datasheet >4Tmod delays being used at the right places.
The firmware loops (ADS1292 power down, delay, initialise, run) when 5000 samples have been received. The electrode studs are connected to a Fluke mediSim 300B, however it is turned off so as to just provide the correct impedance interface for probe detection. I won't go into the details of this here as it works OK.
When I run the firmware in debug I trap data errors, for this I use the fact that in this application the lead 1 and 2 data with the ECG simuator off is always in the range 0x01 0xnn 0xnn. If testing the first byte of lead 1 and lead 2 is > 0x01 the debug gives a breakpoint halt.
Using the logic analyser I can see that sometimes, after the START line is taken high and the interrupt delay has elapsed, handling the /DRDY to recover the nine bytes (status, lead 1, lead2) sometimes give the the bytes back from the ADS1292 in the wrong order creating problems,
example below:
correct data: 0xC0,0x00,0x00 0x01,0x3B,0xC0 0x01,0x3B,0xC0
error data: 0xC0,0x00,0x10 0x14,0xB5,0x00 0x01,0x14,0xAF
the data goes on even more corrupted ending up at: 0xC0,0x00,0x00 0xC8,0xC0,0x00 0x00,0xC8,0xC0
can someone shed some light on what might cause the bytes from the ADS1292 to come back in this erroneous way? I have spent many days trying to resolve this and now call for help