Dear Analog Support Team,
I would be really thankful if you can provide support in this forum.
I am trying to configure the AD7134 in 4-Wire SPI Control Mode with an ESP32-S3. According to the documentation and Analog, the AD7134 and AD4134 are interchangeable with minimum differences. So I tested this with AD7134 and AD4134.
I call out for help, as multiple days of testing and crawling through forums and online resources did not lead to solving the issue and I am running out of ideas to test.
Settings and Setup:
- the communication chain looks as follows: ESP32-S3 Voltage Level Translator (3V3 <-> 1V8) AD7134 (or AD4134)- a 24 MHz Logic Analyzer is used to visualize signals (runs at 12 MHz and connected to the 1V8 ADC side)
- ADC is in Master mode
- SPI PINs:
FORMAT0 CS (SPI_SEL)
FORMAT 1 SCLK
DEC3 SDO (MISO)
DEC2 SDI (MOSI)
- SPI-Mode: 0
- Clock-Speed: 2 MHz
- CPHA = CPOL = 0 (in Logic Analyzer)
- DEVICE_STATUS register reads back: 0b0001 1000 (ok, as far as I understand)
- SPI Error (0x47) and INTERNAL_ERROR (0x42) both read back 0b0000 0000 all the time (no errors)
Find here the ADC shematics (the SPI pin is hardwired to high (is on)):
Problem / Current Output:
Basically, I can communicate with the ADC via 4-wire SPI and can write to some registers as expected. For example, to the SCRATCH_PAD or to the VCMBUF_CTRL register. When I read these registers after writing, I find exactly what I put there. In case of VCMBUF_CTRL register I can also measure the correct voltage, which I set before via this register. So basic communication works from my understanding. See here the SPI communication with a working register as an example (please zoom in to see additional information in white):
Note the ADC convention are as follows:
R = Read = 1
W = Write = 0
So far so good.
However, on some (important) registers I cannot seem to write/change the register entries. I did not test all registers, but it does not properly work for at least INTERFACE_CONFIG_A register, INTERFACE_CONFIG_B register and, as shown in the following, it also does not work on DATA_PACKET_CONFIG register (zoom in to see my comments and the error):
From the screenshot you can see, that the register values do not change, even though I wrote something into them (and these bits in the register are also not some reserved/blocked bits).
I really cannot find an explanation for this behavior. I hope this is a software/setting issue. From the working registers I believe that the hardware part is fine so far, but please correct me if you have other ideas or doubts.
Tested already without success:
- changing the order of registers does not help; the registers which I cannot write on remain the same, independent of when I try to write on them (according to Analog the order to write into registers is also irrelevant)
- note that the readings on PDN and RESET during writing/reading are due to cross-talk in the Logic Analyzer (not visible in direct measurement with oscilloscope)
added ADC shematics
[edited by: pre at 9:48 AM (GMT -5) on 8 Nov 2022]