ADAU1452 I2C transaction
Hi there,
Is it possible to split the DSP Program data or Parameter data into more than one I2C transaction? If yes, how to do it? Kindly please advise.
Thanks and best regards,
Keddy
Audio Signal Processors
adau1452
SigmaDSP Audio Processors
Hi there,
To be more specific, I want to split single I2C transaction to smaller ones for DSP program data portion.
1) if we transfer the data with a single transaction of 8316 Bytes to address 0xC000:
data read back is exact match of the program data ADAU1452 is working correctly.
2) if we transfer the data with 3 transaction:
Transaction1: Address:0xC000, Size:4096, data Offset: 0
Transaction2: Address:0xD000, Size:4096, data Offset: 4096
Transaction3: Address:0xE000, Size:142 , data Offset: 8192
What we noticed is that:
Read back after each transaction, we get correct data that is programmed in
Read back after all transaction is done, we get:
Transaction 1: Data Matching Transaction 1 but starting part of the section is overwritten by data from Transaction3
Transaction 2: Exact Match
Transaction 3: Exact Match
ADAU1452 is not working.
Need your advice whether the way we split the I2C Transaction is correct. If not, what is the correct way to split the I2C transaction?
BR,
Keddy
Hello Keddy,
Perhaps this is a confusion between bytes and words? The SigmaDSP memory is organized and addressed as words not bytes.
There are only 8192 words of program memory and so therefor only 8192 valid addresses for it.
So if you try to go above 0xDFFF then it will wrap around and start back as 0xC000. There is no 0xE000 memory address.
You are writing 8316 bytes which is only 2079 words.
In your writing routine you need to write the data in groups of 4 and then increment the address. If you stop or segment the writes then you will need to do it on the word boundaries since you cannot write a partial word. Well, you can but it will not be what you expect.
By the way, thanks for your excellent writeup of the issue and the tests you did.
Dave T
Please log in to reply.