Because of the holidays, TI E2E™ design support forum responses will be delayed from Dec. 25 through Jan. 2. Thank you for your patience.

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.

DAC8832: SPI CLK idle state & CS change - timing relationship

Part Number: DAC8832
Other Parts Discussed in Thread: ADS127L11,

Hello,

I have a design using a SAME70Q21 microcontroller with a TI ADS127L11 and TI DAC8832 hooked to the same instance of the SAME70 master SPI peripheral ("SPI1"). This SAME70 SPI peripheral allows up to 4 different SPI slave devices to be hooked to one of 4 chip select instances. Furthermore, the SAME70 SPI peripheral is designed to be configured to allow each of those slave devices to have different SPI CLK phase and polarity behaviors (i.e. SPI clock either idles low or high, data is either clocked out on rising or falling edge of clock). The configuration is called "variable chip select" mode.

This brings me to the two TI Devices on the bus.

The ADS127L11 ADC requires the clock to idle LOW and also requires the data to change state on the RISING edge of SCLK and be read on the SCLK FALLING edge.

The DAC8832 DAC doesn't explicitly state that the SPI clock should ide high, but it does explicitly state the master micro should have the data change state of the FALLING edge of SCLK. The DAC will then capture the data on the RISING edge of SCLK. 

Also of note, the DAC8832 Figure 1 timing diagram seems to show a don't care state of the idle SPI CLK. prior to CS falling. It also calls out a "Tdelay" parameter of 10nS. Am I interpreting this correctly that the DAC8832 doesn't care what state the CLK is in prior to CS falling, only that it must be in that state for AT LEAST 10nS before the CS goes low?

This brings me to what I'm observing with my logic analyzer. My SAME70 micro appears to be handing the multiple slave devices correctly, and their respective CLK idle states. The main concern is the amount of time the micro is providing for that CLK idle level before it starts the CS assertion and subsequent clocking.

For all of these captures, the SPI clock is configured to 1MHz. I'm only able to sample at 50MHz on the analyzer

Here's a capture of the ADWS127L11 ADC:

We can see that the CLK is idling high at the beginning of this capture. This is because the last access done on the SAME70 SPI peripheral was to the DAC8832, who has an active high CLK configuration. After a SPI access is over, SAME70 leaves the CLK in whatever the idle state is for that particular slave peripheral. In the case of the DAC8832, CLK is left high. We can see that as soon as the SAME70 starts to interact with the SPI bus, it yanks the SPI CLK into that new SPI slave device's idle state, which in the case of the ADS127, it LOW. This effectively happens at the same time as CS going low. Then, on the diagram, we see the proper SPI clock data relationship for the ADS127LL, with the ADC changing the state of the data line on the rising edge of CLK, and latching it on the falling edge.

We see the same behavior with the DAC8832. On this capture, the interaction with the ADS127LL just occurred a few milliseconds prior to his analyzer capture, therefore the CLK is idling low. Then when the SAME70 begins to interact with the DAC8832, it yanks the CLK to the DAC8832 required CLK idle state of high, but it does this at pretty much the same time as CS going low. However, we can observe the required timing and behavior being met, with the data line being changed on the FALLING clk edge and data being captured on the RISING CLK edge.

In the end, this appears to be working with both slave peripherals when I run it on the actual hardware. However, I'm concerned I might be "right on the edge" with timing and would like to get feedback from TI if this kind of timing is well within the respective chip timing margins.

Also, while I can adjust many chip select and clock delays on the SAME70, in variable chip select mode, I'm unable to explicitly specify the amount of time the clock idles in an idle state before it tries to asser the chip select.

Thank you very much for looking at this. Please let me know if I can provide further clarification.

  • Hi Adam,

    You are correct that the DAC8832 idle state is "don't care". Just make sure that the data is shifted on the falling edge and captured on the rising edge. You are also correct that the Tdelay on the timing diagram is telling you that the clock should be stable in it's idle state for Tdelay before CS falls low. 

    It actually doesn't look like you are violating any of the ADC timing specs. There is only a delay required from the CS falling edge to the first rising edge of SCLK. As far as the DAC, if you are close to that 10ns Tdelay timing, then there is the chance that the communication may not work over all temperature or system conditions. 

    Is it possible to change the idle state of the DAC8832 clock to low? It seems like that would solve the problem of the SCLK idle state changing when the new CS is pulled low. 

    Best,

    Katlynne Jones 

  • Thank you for the quick reply Katlynne.  Fortunately, the board design in question is still being finalized, as we're in a proof of concept stage.. The timing diagrams I presented were a result of wiring TI Eval boards into a SAME70 micro breakout board.

    Because it's still being finalized, I went ahead and moved the 8832 DACs in our design to their own SAME70 SPI instance. Therefore, the ADS127L11's will be allocated to one peripheral and the DAC8832's will be on another. Each SPI instance will then adhere to the respective polarity/phase requirements of the respective TI chips.

    Good point about trying to keep the idle low for the SPI instance of the 8832. I might experiment with that, just in case I have some micro pin allocation issues down the road and need to combine the ADS127 and DAC8832 onto the same SPI bus again.