Part Number: DAC3174
Other Parts Discussed in Thread: LMK03328, , DAC3171, SN74LVC1G32, SN74ALVTH16374
Hi,
I have an issue where I write to config0 to switch to a 4-wire (SDO becomes an output). I find that I have to (conditionally see below) have to write repeatedly to the CONFIG0 register (73 or more times) before it changes over to SDO, outputting all '1's until then. This is faithfully repeatable for two devices.
My signals for SDIO, SDENB, SCLK all appear within the electrical specifications, and I have ensured that there is at least 1uS margin between any signal transition and another, using the following signal pattern:
1.SCLK = LOW, SDENB GOES LOW.
2. 10uS delay
3. SDIO set to bit value
4. 1uS delay
5. SCLK set high
6. 1uS delay
7. SCLK set low
8. 1uS delay
9. loop to (3) to complete the 24 bits
10. 10uS delay with SCLK low
11. SDENB goes high
There is excellent grounding and decoupling. TX_ENABLE is high, RESETB HAS been cleanly cycled 100mS after power up and is high during the process above AFTER the DATA_CLK and DAC_CLK are both the same frequency (driven by an LMK03328 - with the DAC_CLK PECL derived from an SI53322B Universal PECL Buffer. The clocks are stable and 62.5MHz. SLEEP is left floating. SYNC is not yet toggled.
After the above write process of 0x0046ED to CONFIG0 - to amongst other things switch over to 4-wire, I do not read the right value for 73 cycles of the above algorithm! I have not timed this, but when I write this just once, breakpoint the code (NIOS2 in Cyclone Vgx) under eclipse (no optimisation, volatile I/O - everything looks in right order etc..) AFTER THE COMPLETE WRITE CYCLE (proven with a scope), and then step over the read - it always reads correctly WITH ONE WRITE.
In both cases (running repeatedly and breakpointing) I capture the write cycles on my storage scope - they are identical.
When just running - after 73 looped attempts (or just one attempt via debugger step) - I finally read the written value coming from SDO. I get the following register dumps from TWO DAC3174s I have in the system. Note- I have never seen it return inconsistently, and CONFIG1 is never returned wrong even though it is only ever written too once.
CONFIG0 : 46ed <<<<<<<< As Programmed
CONFIG1 : 604e <<<<<<<< As Programmed
CONFIG2 : 3fff << DEFAULT
CONFIG3 : 0000 << DEFAULT
CONFIG4 : 28a0 << BITS THAT FAILED DURING IO Test pattern comparison
CONFIG5 : 3f40 << 0011 1111 0100 0000 FIFO A and B pointer collisions, dataclk_gone
CONFIG6 : 3100 << 0011 0001 0000 0000 : 0011 0001 temerature sensor = 49
CONFIG7 : ffff << DEFAULT
CONFIG8 : 6000 << SHOULD DEFAULTS to 4000, - some non-default reading in the reserved bits!!!
CONFIG9 : 8000 << DEFAULT
CONFIG10 : f080 << DEFAULT
CONFIG11 : 1111 << DEFAULT
CONFIG12 : 3a7a << DEFAULT
CONFIG13 : 36b6 << DEFAULT
CONFIG14 : 2aea << DEFAULT
CONFIG15 : 0545 << DEFAULT
CONFIG16 : 0585 << DEFAULT
CONFIG17 : 0949 << DEFAULT
CONFIG18 : 1515 << DEFAULT
CONFIG19 : 3aba << DEFAULT
CONFIG20 : 0000 << DEFAULT
CONFIG21 : ffff << DEFAULT
CONFIG22 : 2d04 << RESET IS NOT APPLICABLE. LOWER 16bits of the DIE ID
CONFIG23 : a3c4 << RESET IS NOT APPLICABLE. LOWER MIDDLE 16bits of the DIE ID
CONFIG24 : c9a8 << RESET IS NOT APPLICABLE. UPPER MIDDLE 16bits of the DIE ID
CONFIG25 : 87ff << RESET IS NOT APPLICABLE. UPPER 6bits of the DIE ID
CONFIG127 : 0049 << 0000 0000 0100 1001 . ANOTHER DATASHEET MISTAKE - LOOK AT DEFAULT verses register bits
DAC3174 B REGISTERS
CONFIG0 : 46ed <<<<<<<< As Programmed
CONFIG1 : 604e <<<<<<<< As Programmed
CONFIG2 : 3fff << DEFAULT
CONFIG3 : 0000 << DEFAULT
CONFIG4 : 2cff << BITS THAT FAILED DURING IO Test pattern comparison
CONFIG5 : 3f00 << 0011 1111 0000 0000 FIFO A and B pointer collisions. All clocks present
CONFIG6 : 3500 << 0011 0101 0000 0000 : 00110101 = Temperature Sensor = 53
CONFIG7 : ffff << DEFAULT
CONFIG8 : 6000 << SHOULD DEFAULTS to 4000, - some non-default reading in the reserved bits!!!
CONFIG9 : 8000 << DEFAULT
CONFIG10 : f080 << DEFAULT
CONFIG11 : 1111 << DEFAULT
CONFIG12 : 3a7a << DEFAULT
CONFIG13 : 36b6 << DEFAULT
CONFIG14 : 2aea << DEFAULT
CONFIG15 : 0545 << DEFAULT
CONFIG16 : 0585 << DEFAULT
CONFIG17 : 0949 << DEFAULT
CONFIG18 : 1515 << DEFAULT
CONFIG19 : 3aba << DEFAULT
CONFIG20 : 0000 << DEFAULT
CONFIG21 : ffff << DEFAULT
CONFIG22 : 320b << RESET IS NOT APPLICABLE. LOWER 16bits of the DIE ID
CONFIG23 : a3c4 << RESET IS NOT APPLICABLE. LOWER MIDDLE 16bits of the DIE ID
CONFIG24 : c9a8 << RESET IS NOT APPLICABLE. UPPER MIDDLE 16bits of the DIE ID
CONFIG25 : 91ff << RESET IS NOT APPLICABLE. UPPER 6bits of the DIE ID
CONFIG127 : 0049 << 0000 0000 0100 1001 . ANOTHER DATASHEET MISTAKE - LOOK AT DEFAULT verses register bits
Both DACs show FIFO sync errors and one shows a clock issue potentially - although I have not yet sent a SYNC pulse at this time to the DACs so I expect a framing issue. Also, the power sequencing chapter indicates that serial configuration is independent of these clocks (can anyone please confirm - there are some serious issues with this datasheet and I don't trust it)
What would be the mechanism for this 'deaf' characteristic - when further writes and reads all seem to work no problems at all.
Any help appreciated.