I have an EVAL-ADAU144XEB board. I use SigmaStudio 4.2 and USBi to communicate with the board and the board works fine, except that I cannot get self-boot working. When I reset the board, nothing happens except D4 COMMS is flashing.
I can write to the onboard Microchip 24AA256 EEPROM from SigmaStudio and I can read out the contents of the EEPROM. The board has the R164 and R165 2k resistors mounted.
I have set the selfboot pin to "1" using the S2 switch, like shown here:
I have set the page size to 64 and the number of address bytes to 2.
I have tried removing the USBi before booting, like suggested here:
The schematic I have used for testing contains a single high-pass filter between input pin 0 and output pin 0. When the selfboot pin is enabled, "Link Compile Download" in SigmaStudio does not work, i.e. the effect is not audible. Is this functionality and selfboot supposed to be mutual exclusive?
I am wondering if it is not working because:
1) The ADAU1442 chip simply does not read the EEPROM at boot. If this is likely, how can I check it?
2) The stored data on the EEPROM is in a wrong format or something is missing. Should I use another page size and number of address bytes?
It is actually difficult to kill these eval boards but I do have some bad ones here but then we do tend to beat them up here and modify them!
I just tested this project on my Rev C eval board…
Great, glad you are up and running. You are correct that you may have clicked "Read All Registers" at a time when either power was not applied to the part or some other setting on the eval…
I am sorry to say this but I have discovered that I am still having problems booting from the EEPROM. I thought everything worked fine but somehow I was fooled.
To perform a sort of sanity check…
Make sure that S2-6 is set to "Off" so that the selfboot pin is high. The "ON" position of the switch grounds the pin.
Also, the two address pins are also on S2, S2-7 and S2-8. Those should be set to "ON" so that both address pins are low and the base address is being used for booting.
It looks like you checked the pull-up resistors. There are also jumpers to connect the EEPROM, LK15 and LK16 on the revision of my eval board. Rev C.
The default page size of 32 bytes should work but the other post mentioned raising it to 64. So I think you have done most of what I can think of that would cause a problem.
You do not have to remove the USBi for the selfboot to work. What you do have to do is make certain that the USBi is not trying to communicate with the DSP. This would be happening if any of the readback cells are set to continuous read or if there are meters in the project that are turned on. This would cause a collision with the bus and when the I2C port changes from a slave to a master for booting it cannot respond as a slave. SO certainly disconnecting the USBi is not a bad thing to do.
Once the part is booted then you can click on Link/Compile/Connect to compile the project and have SigmaStudio just control the program without loading it into the DSP. The project loaded into SigmaStudio MUST be the exact same project that resides on the EEPROM.
Have you placed a scope on the CLK and SDA lines to see if it is trying to boot and if there is other traffic on the bus?
So with this all said, Can you zip up your project and attach it? I can test the project here to see if it loads here and to see if there is an issue with the project itself.
I think all my S2 settings were right and I had LK15 and LK16 jumpers connected. I have not tried placing a scope on CLK and SDA lines yet. Unfortunately, I have run into a new problem. After fiddling around with the S2 selfboot switch and trying various things in SigmaStudio, I no longer have audio output from the board. I can communicate with the DSP and the board seems to work but there is no analog audio out (I have not tried spdif yet). I do not know if the board has become defective or it is a matter of configuring the DSP registers correctly. Do you have any idea what could be wrong?
Do you have a simple step-by-step guide for a configuration that should definitely work?
I have tried following the old QuickStart guide but no luck.
I just tested this project on my Rev C eval board. Stock, no mods. This project will take audio in from analog input 0,1 and send it out on analog output 0/1. I have audio from my computer and headphones on the output. The project does have an EEPROM in it and it is set to the default settings. I was able to program the EEPROM and boot from it. All while the USBi was connected and then I was able to control the program from SigmaStudio after it selfbooted. There is also an oscillator in the project so you can switch to that internal source to just start with one direction of audio.
ADAU1442 Basic Project.zip
Thank you so much Dave! You have saved my day.
The project you have sent me works as you described: - I get audio through - I am able to program the EEPROM and I can just use the default page size of 32 bytes- Selfboot from the EEPROM is working- I do not need to unplug the USBi and I can change the parameters after boot
The reason there was no audio was that somehow I had modified the DSP registers and all the "Master clk enable" (DSP Register Modes 3 tab) settings had been disabled. I think it happened because at some point I pressed "Read All Registers from DSP", the read failed and I ended up with some bogus register settings that I accidently saved.I am not sure what caused the selfboot functionality to work now but perhaps also some DSP register settings. Of course, this would be nice to know for future reference.
Great, glad you are up and running. You are correct that you may have clicked "Read All Registers" at a time when either power was not applied to the part or some other setting on the eval board was wrong.
However, I usually see this happening when using SPI instead of I2C. Because I2C will only try to communicate the first message and if it gets a NAK it stops. With SPI it happily reads all zeros if there is no power or all "1"s when something like the chip address is wrong. Then ALL of the registers in the part get set to zeros or ones. For parts like these with a lot of registers it is bad. So I only carefully use that command and I make sure the project is saved before I do that. Then I do not save over it if something went wrong.
I learned this because I have done it myself!
What I place in all my projects are a DC cell connected to a readback cell. This can then be used to test communications with the DSP. If you click READ then you should see the value in the DC cell in the readback. If you get garbage then something is wrong. You can also change the DC value and read it and it should also change. It is in the project I sent over. It is on the upper left above the input cell. The only purpose is to test communication and can be deleted if MIPS are needed.
Hope the rest of your project goes well!
Thanks again Dave,
I will use the DC cell trick in the future.
To perform a sort of sanity check, I wrote your basic project example to the EEPROM and disconnected AC power from the 6V switch mode PSU. Then I waited about 20 seconds and reconnected power. In the project I left the oscillator/tone generator on, so it should be easy to hear if it is working. Nothing happened, no tone. It seemed that if I just disconnected power for a couple of seconds instead of ~20 seconds, the tone came back on. I checked the hex values from the EEPROM in the read/write window in Sigma Studio. It looks like the hex values are written to the EEPROM and I can read the same values back even after having power disconnected for a long time. I made sure to "Disable all continuous readback controls" Ctrl-F12 but it made no difference.
I have noticed that after powering on the board, there is a yellow "Comms" LED that starts flashing and it always does that. How can I tell if the board is reading from the EEPROM at boot or if it is trying to communicate instead somehow (scope on CLK and SDA lines)?
Is there someway I can manually check that the program in the EEPROM is valid?
Today I read: https://ez.analog.com/dsp/sigmadsp/w/documents/5163/e2prom-selfboot-problem
Setting the memory size to 253952 bits did not seem to be possible, as it automatically changed to 262144 bits. However, after fiddling with the values, self-boot started working again (at least after leaving power off for ~20 seconds it was still able to load the program). Then I thought that maybe memory size 262144 bits, page size 64 byte, write speed 100 kHz, address bytes 2 was the golden combination but it still worked when changing page size to 32 byte. So I am puzzled whether it is a hardware issue, a software issue or something I am doing wrong that prevents self-boot from working some times.
The day after I turned on power but the program I wrote to EEPROM yesterday did not load. After some testing, I figured out that the program seems to load when either the USB programmer pin header is disconnected or if the pin header is connected but the programmer is connected to my PC while turning on power to the DSP board. Even if the USB programmer does not have power but has the pin header connected, self-boot did not work. Tomorrow I will try again to see if this behavior is persistent. If so, is this expected behavior or what could be wrong?
UPDATE 3 AND CONCLUSION:
I have tested that the program is loaded by the DSP several times now and it has worked every time. I have made some modifications to the DSP program and written it to EEPROM and it also works. For the ADAU1442 board it seems that memory size 262144 (or 253952) bits, page size 64 byte, write speed 100 kHz, address bytes 2 is always working. In standalone mode (no PC connected), in order for the board to read the EEPROM program at boot, the I2C pin header MUST be disconnected. By obeying this rule, it has worked for me so far. It would be nice if this could be read somewhere in the documentation or someone could give an explanation of why it is so.