ADAU1701
Production
The ADAU1701 is a complete single-chip audio system with a 28-/56-bit audio DSP, ADCs, DACs, and microcontroller-like control interfaces. Signal processing...
Datasheet
ADAU1701 on Analog.com
Hey All,
I was trying to configure an ADAU1701 connected to a raspberry pi (over an i2c bus, running Raspbian) using SigmaTcp. Unfortunately, I was unable to do that in the first attempt. I analyzed the TCPIP packages sent by SigmaStudio using wireshark and I noticed that the header was different from the one that SigmaTcp was waiting. Sigma tcp waits for a 8 bytes header, with length in the bytes 4 and 5, and addr in the bytes 6 and 7. SigmaStudio sends a 10 bytes header with length in the bytes 6 and 7, and addr in the bytes 8 and 9. After some changes in function handle_connection on sigma-tcp.c, I was able to control the chip over a TCP/IP connection.
Is there a different version of sigma tcp to be used with ADAU1701? I searched in this forum and couldn't find anyone with the same problem, so I decided to post this.
Thanks!
Lucas@
Hi,
I am facing the same problem. Can you share what you changed?
Best regards
Axel
You have to adequate the size of the header and the position of the information in the right places. SigmaStudio works with a 10 bytes header, instead of 8. You will have to place a few changes in the function handle_connection in sigma_tcp.c
lines 163, 166 and 167:
while (count >= 9)
len = (p[6] << 8) | p[7];
addr = (p[8] << 8) | p[9];
lines 184 and 185:
p += 10
count -= 10
lines between 180 and 192: replace all "8" with "10".
Hi,
thank you, this works for me. Did you also try to read registers from the DSP using sigma-tcp? Currently, we are able to write using your modifications but are unable to read.
Edit: My student postet a seperate thread for the problem here: TCP/IP ADAU1701 - Read not possible
Best regards
Axel
I believe that your problem is in the i2c interface. I faced the same problem when trying to interface the ADAU1701 with raspberryPi (I saw in the other thread that it is the hardware that you are using). Are you able to read the DSP in another way? Try to "i2cdetect -y" your i2c bus and verify if you are able to detect the codec in the right address.
The ADAU i2c bus requires two start conditions in a row, and it seems that the i2c hardware of the broadcom chip in RPI doesn't do that (and I couldn't find a way to change it).
you can read more about this problem here:
Lucas
Hello Lucas,
yes we already figured out how to read. Our own application running on the pi works for both reading and writing. Only SigmaTCP using the provided patches is only able to write to the DSP but is unable to read. Unfortunately, we cannot patch SigmaTCP the same way for reading as we did for writing because SigmaStudio is the black box and we can only guess how the packets need to be modified for SigmaStudio to accept them.
Best regards
Axel
why doesn't analog devices help with this and describe the tcp protocol ?
is it different from this ?
raspberry pi has no problem making repeated starts.
uint8_t addr_buf[2];
struct i2c_msg msg[2] = {0};
struct i2c_rdwr_ioctl_data msgset;
// 16 bit address
addr_buf[0] = (addr >> 8) & 0xff;
addr_buf[1] = addr & 0xff;
msg[0].addr = i2c_dev_addr;
msg[0].flags = 0;
msg[0].buf = addr_buf;
msg[0].len = 2;
msg[1].addr = i2c_dev_addr;
msg[1].flags = I2C_M_RD;
msg[1].buf = data;
msg[1].len = r_len;
msgset.msgs = msg;
msgset.nmsgs = 2;
if(ioctl(i2c_fd, I2C_RDWR, &msgset ) < 0) {
I don't understand why Analog doesn't respond to that either.
I already know the link you mentioned, but this package order only applies to the ADAU 144x and 145x - not to the ADAU1701.
I already tested it, but it didn't work out.
I did study the C code for the 145x/146x family as i will use it for raspberry PI
many bugs and overly complicated/obfuscated, must be very unstable. (IMHO)
the oposite of KISS
I will rewrite it , and add SPI support,
anyway, to return to the original topic.
it cannot be very hard to reverse engineer the 1701 format, can it ?
i assume it will resemble at least the 145x format
if you just run the code you can see the incoming packet and analyse it, or run wire-shark on it.
The software itself is even relatively stable.
Because some answers in the thread suggest that we did not precisely nail down the problem, here is a step by step what we did and try so far.
1.Sigma Studio sends a read request to the Raspberry PI via the LAN interface - This step works.
2. the Raspberry PI receives the request via the LAN interface and analyzes the packet for what it should do. For example, the first byte contains the prompt what to do. 0x0A stands for read and 0x0B for write - this step also works. Even if Sigma TCP only checks if the first byte is not 0x0A.
3. The Raspberry PI sends a request to the ADAU that it would like to read - This step works.
4. the ADAU responds to the Raspberry PI - that works too.
5. The PI receives the response of the ADAU, this can be an analog value, for example. - It works the same way.
6. The PI packs the answer into a new package and sends it to Sigma Studio - Here's the problem!
The problem is that Sigma Studio expects a specific package, as described here: https://wiki.analog.com/resources/tools-software/sigmastudio/usingsigmastudio/tcpipchannels. The problem is that this package seems to be different for the ADAU1701 - it doesn't work in this package order.
Wireshark doesnt help here because SigmaStudio is the black box. SigmaStudio receives a package from us and doesnt accept it. We need to know the package format for packages from SigmaTCP to SigmaStudio. We can look into the package we sent using wireshark but we cannot the extract the information we need: Will SigmaStudio accept the package?
And if not, why not?