Post Go back to editing

"Check last compilation through DSP" not working on custom board using ADAU1467 and SigmaStudio

Category: Hardware
Product Number: ADAU1467

Hello,

I have difficulties with the "Check last compilation through DSP" feature of SigmaStudio v4.7.

With an evalboard EVAL-ADAU1467Z it works as expected. I can write and and check the EEPROM data through SigmaStudio using USBi adapter.
Also Selfboot works fine, when I pull SELFBOOT pin high.

But with our custom board, the "Check last compilation through DSP" fails always. The data shown in the capture window doesn't match the data of the EEPROM. It is not all 0x00 or 0xFF, just different to what is expected. But also not really random. seems to be always the same.

The captured data in SigmaStudio even does not match what I can see when checking the SPI bus with a logic analyser. Logic analyser properly shows the expected data 0xAA, 0x00, 0x00, etc.

So it seems that this is some kind of hardware problem on my custom board. Even SPI bus shows the correct data ADAU1467Z doesn't read the data correctly.
Or some nasty software bug in SigmaStudio.

This is what I already checked and confirmed with my custom board:
- Selfboot pin pulled low when using SigmaStudio "Check last compilation through DSP"
- ADAU1467Z boots correctly from EEPROM, if Selfboot is high. My little test programm works as expected (setting a LED, if Aux ADC reads a specific minimum value from poti)
    -> so basically ADAU1467Z could read correctly from EEPROM and previous write was also fine. Connection between DSP and EEPROM is ok.
- Evalboard and my custom board use ADAU1467Z
- Evalboard and my custom board use same EEPROM 25AA1204 (actually I took EEPROM from evalboard to my custom board, to be really sure)
- checked the SPI signals with a scope to be sure that the levels are fine
- vary serial resistors within SPI lines from DSP to EEPROM, between 0R, 56R and 120R to reduce slew rate (I saw warning in ADAU1467Z datasheet on stagging of internal IOVDD  in case of highspeed SPI clocks)
- changed the write speed parameter in SigmaStudio from original 10.000kHz down to 10kHz.

I attached my SigmaStudio project and logs from eval and custom board for the "Check last compilation through DSP".

All of this doesn't fix the problem.

Did anyone encounter a similar problem or could assist here, on both issues?Poti-LED.dspprojCheck last compilation through DSP - custom board.logCheck last compilation through DSP - evalboard.log

Parents
  • Meanwhile I was able to fix my problem. The actual reason was a problem with the SPI communication from USBi to ADAU1467 on my customer board. The custom board uses smaller header than the USBi because of limited space. Therefor we use a custom adapter cable between USBi and custom board. This combination introduced problems on the SPI communication for MISO (ADAU1467 to USBi). Because of this the check feature fails, which it uses MISO. The problem was not so visible when using SigmaStudio to programm and tune the DSP on the fly. I found the problem when I tried to tune the pin drive parameters for MISO line. I saw that whatever setting I sent, reading it back always give wrong result. Looking at the MISO signal with a scope showed the problem. Especially if only 1 bit is set within a byte of a transfer, the MISO signal was crippled to a small peak. it looks like ADA1467 is not able to drive enough power to the bus.

    The actual fix was to improve the adapter cable and make it much shorter. Still this works only with MISO line driving strength set to slowest. When I set it to Highest, MISO signal is again crippled. Actually I do not understand why, because Highest should even make it more robust. But nevermind.

    In order to be 100% sure that SPI communication is not perfect I create a small SigmaStudio script that reads value of a DC obejct on the DSP setup by USBi multiple times and compares it to an expected value.
    // #LANGUAGE# C#
    //Read 32 bit value from a specific address and compares value with expected one.
    //Usefull to test SPI read from DSP

    long value;
    const long soll_co = 0x01020304;
    int count = 1;
    int count_max = 200;
    int addr = 0x0017;

    ss.PrintLine(System.String.Format("Reading 0x{0:X4} for {1} times...", addr, count_max));

    while(count<count_max)
    {
        ss.ICRegisterRead("IC 1", addr, 4, out value);
        //ss.PrintLine(System.String.Format("read 0x{0:X8}", value));
        if(value != soll_co)
        {
            ss.PrintLine(System.String.Format("Missmatch on read #{0}: read: 0x{1:X8} expect: 0x{2:X8}", count, value, soll_co));
            return;
        }
        count++;
    }
    ss.PrintLine("no errors");

Reply
  • Meanwhile I was able to fix my problem. The actual reason was a problem with the SPI communication from USBi to ADAU1467 on my customer board. The custom board uses smaller header than the USBi because of limited space. Therefor we use a custom adapter cable between USBi and custom board. This combination introduced problems on the SPI communication for MISO (ADAU1467 to USBi). Because of this the check feature fails, which it uses MISO. The problem was not so visible when using SigmaStudio to programm and tune the DSP on the fly. I found the problem when I tried to tune the pin drive parameters for MISO line. I saw that whatever setting I sent, reading it back always give wrong result. Looking at the MISO signal with a scope showed the problem. Especially if only 1 bit is set within a byte of a transfer, the MISO signal was crippled to a small peak. it looks like ADA1467 is not able to drive enough power to the bus.

    The actual fix was to improve the adapter cable and make it much shorter. Still this works only with MISO line driving strength set to slowest. When I set it to Highest, MISO signal is again crippled. Actually I do not understand why, because Highest should even make it more robust. But nevermind.

    In order to be 100% sure that SPI communication is not perfect I create a small SigmaStudio script that reads value of a DC obejct on the DSP setup by USBi multiple times and compares it to an expected value.
    // #LANGUAGE# C#
    //Read 32 bit value from a specific address and compares value with expected one.
    //Usefull to test SPI read from DSP

    long value;
    const long soll_co = 0x01020304;
    int count = 1;
    int count_max = 200;
    int addr = 0x0017;

    ss.PrintLine(System.String.Format("Reading 0x{0:X4} for {1} times...", addr, count_max));

    while(count<count_max)
    {
        ss.ICRegisterRead("IC 1", addr, 4, out value);
        //ss.PrintLine(System.String.Format("read 0x{0:X8}", value));
        if(value != soll_co)
        {
            ss.PrintLine(System.String.Format("Missmatch on read #{0}: read: 0x{1:X8} expect: 0x{2:X8}", count, value, soll_co));
            return;
        }
        count++;
    }
    ss.PrintLine("no errors");

Children
No Data