ADAU1701 Microcontroller I2C issue
Hi,
I have downloaded a program to the ADAU1701 chip via SigmaStudio so that it self-boots from EEPROM.
In the SigmaStudio schematic there is a mulitplexer block that I'm using to switch between various audio effects. This works fine when connected to the computer and running SigmaStudio but I have an embedded controller that I'm using as a demonstration for a school project and the I2C won't work. The embedded controller is set up to essentially copy what SigmaStudio is doing. That is to say that when I select a given input, the embedded controller performs the exact same I2C transaction that SigmaStudio would.
I have configured the I2C in the embedded controller to be the same as SigmaStudio. Below is an example of what I'm trying to accomplish.
I click on "position1" of my multiplexer block and the following takes place:
(start condition) -> (0x68 address + write bit + ack bit) -> (param_addr_MSB + ack bit) -> (param_addr_LSB + ack bit) -> (data1 + ack bit) -> (data2 + ack bit) -> (data3 + ack bit) -> (data4 + ack bit) -> (stop condition)
The embedded controller program does the exact same thing except for the obvious difference of the acknowledge bit being pulled high. I've even compared them bit by bit. I can't think of any issues why the chip will not acknowledge the I2C writes. I'm 100% certain I'm on the correct pins. I've had to lower my pull-up resistors from the embedded controller side due to a high capacitance line from our bi-level translator. The only issue I can think of is the logic level. The pull-ups on the SigmaDSP are pulled up to approximately 3.1 volts and not 3.3. Could this be an issue?
Anyways, I'm basically asking for confirmation with the I2C transaction as well as if there are any issues I may be overlooking. The goal is to use the embedded controller to copy what SigmaStudio does.
Thanks,
Jesse
Audio Signal Processors
i2c
eeprom
usbi
SigmaDSP Audio Processors
evaluationboard
SigmaDSP
selfboot
adau1701
Show More
Hi Jesse,
I had several problems in the past for controlling an ADAU1761 or 1701 with I2C. Problems were not related to the chip, but to the
microcontroller (I used an Arduino UNO board).
You can take a look at this post https://ez.analog.com/thread/7448 ... maybe it's useful for you.
The main problem was the I2C library used on the microcontroller, the commonly used one was unable to perform "time stretching"
of impulses sent on the I2C lines for reading ...
Hope this can help.
Best regards. Daniele.
Hi Danielle,
Thank you for your help. I discovered my issue after some careful observation. I double checked the first byte and it was sending out the 0x68 + write bit but it was doing so one bit ahead of the first SCL period. To summarize, I was sending the address+R/W' bit before the clock started. It turns out that the code I wrote was bit shifting the 7-bit address twice thus making my first byte one bit too long and therefore the ADAU1701 would not acknowledge. I've since corrected it to one bit-shift and it works perfectly.
Jesse
Thanks for answering the question, Daniele!
Please log in to reply.