07-29-2019 08:00 AM
Hi,
We are using NI PXIe 6570 for generating I2C patterns to test the I2C devices.
Currently we are building one full clock in a single vector. We are using SBC format to generate a clock signal and NR format to generate SDA line. In order to maintain the required I2C timing parameters like T_Low, T_High and Data Setup time, we are adjusting the drive edges in the vector. The time set and the pattern file that we are using is displayed below,
We have an I2C device with external Pullup and the I2C Master (PXIe-6750) should send an I2C signal toggling between 0 and X(Hi-Z) to communicate with the device. We are trying to use the same timeset configurations as mentioned above and drice '0' and 'X' as per the drive edges. When we place 'X' instead of '1' in the pattern file, the pin goes to Hi-Z state for the entire period of the vector and the drive formats and edges are not coming into picture. But we need to maintain different pin states with the same vector (for example, clock line should be at '0' for T_Low and 'X' for T_High).
Is there any way to drive between '0'and 'X' in the same vector as we needed?
08-14-2019 04:43 PM
Hi Saro123,
From my understanding, you cannot change the pin state within a single vector. You can use the opcode source_d_replace to change the source pin state from that vector forward, but you can only select a single state for each individual vector.
09-24-2019 09:09 AM
Hi Lindsey
I think we have the same issue. We are not trying to change the pin state within a single vector. We want that the pin is not driven in the middle of the period, but at the start and end it is driven low.
In order to achieve this thought we could use the timing sheet to define the Drive On and Drive Off period with the Driver Format set to RL (return low).
If we select the Drive On to be 1/4*period and the Drive Off to be 3/4*period and output three vectors of "1"s the output signal should look like:
_--__--__--_
As in:
4. Steps 1-3 are then repeated for each vector.
The Waveform view in Digital Pattern editor verifies this as does oscilloscope measurements of the output.
However, if we replace the vector input with X, then the entire period is replaced by X. The output is never driven low or returned low. The Drive On, Drive Off, and Drive Format settings are completely ignored.
When communicating with I2C we could like to have the certain parts driven low by the PXI-6570 and other parts non-driven. This is because, in the I2C communications protocol, we are only allowed to change the input data when the CLK is low, and the CLK itself should never be driven high.
Do you have any insight into how we can make the output driven low for the first and last quarter of the period and make it non-driven in the remaining part?