I am interfacing an ADS124S08 (currently using your evaluation board but with runs cut - basically a simple power supply and holder for the chip) to a FT240X (A parallel USB interface). I am using bit-banging on the FT240X to communicate with the ADS124. I am running the FT240X and bit banging using a LabView interface. I can successfully communicate, read registers, change registers, and sometimes read A/D conversions.
I am using conversion on demand (reg 4 is set to X22 - single shot, Sinc filter, 10 SPS). Problem occurs no matter what setting on these registers.
The problem is very unusual.
I am reading the conversions in a direct mode after issuing a start convert command with single-shot (as mentioned above).
After reading the 18 registers, I issue a start command and then wait for the /READY to go low. Immediately after the start command, the /READY goes low and I read garbage. If I repeat this command, it reads OK no matter how many reads I use. Reading the registers continues this sequence where the first start-read is garbage.
Now, that is reading AD1 (reg 2 is set to 1C ). If I ONLY change reg 2 to a x2C value (reading AD2) and issue a START command, it reads correctly. Then if I continue the start-read, it reads garbage. However, if I insert a NOP before the start-read, it reads correctly. If I continue the sequence NOP-Start-read -NOP-Start-read everything is OK. Using a scope, the NOP reads the first byte of the previous conversion (as it should).
Now if I switch to another register, sometimes I need NOPs sometimes I do not. If I use too many NIOPs, then it reads garbage.
Basically, the /READY line is going low immediately upon issuing a START command when the system is not working but behaving correctly (delaying ready until conversion is complete) when the system is working. I can delay the going ready by changing the number of SPS or low-latency filter vs. Sinc so I believe that the system is at least responding correctly. I also read the registers and any changes are correct.
I have tried for DAYS to toggle other lines programmatically - such as CS (currently tied low) and /RESET (currently floating) and START (currently tied low). Thinking it was a programming error. Years ago, I worked with the TIMSP430F149 and also spent days on finding a silicon error. No errata was reported for this chip so I assumed that I must be making a stupid programming error.
Many variations on the program for troubleshooting, without success and monitoring lines with a scope and waveforms look great. Even tried changing data rates. Tried stopping conversion, wakeup, etc, without success.
NOTE: /READY refers to the DOUT/\RDY line but the /DRDY line behaves the same (mirrored on the scope).
Any thoughts would be appreciated on this unusual behavior.