This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

UCD3138 Communication problem Through PMbus

Other Parts Discussed in Thread: UCD3138

I am trying implement a PMBus master on MSP430 chip to command  UCD3138 for LLC converter that has a TI default code on it.

It is working well when UCD3138 executes ROM, but I am getting almost random NACK on read commands when it executes through Flash. The success rate is below 50% and NACK happens almost in every other massage. I am running 250KHz CLK and tried to reduce it also up to 100kHz.  The strange thing is NACK seems not to happen anymore when I ignore reading last byte of DATA, and I am still reading correct PEC after STP. 

I would appreciate if anyone could help me out with this,  I am not sure if it is a CLK timing problem or the order of reading data from ISR. I am reading one byte at each ISR after Restart, and last byte is read after STP is set. 

Thanks, 

  • Dear Mehrnami,Which read command you are using? Do you have any waveform?
    Please use the code released in TI website for your testing. www.ti.com/.../ucd3138fw_llc
    Regards,Jack
  • Dear Jack,
    Thank you for the link! I will try the updated UCD3138 code, because I think old one had some bugs (Write RAM to Flash and vice versa didn't work correctly even with GUI).
    About MSP430 code that I am developing right now, I solved that problem. The problem was my CPU speed ! The code execution to read the incoming data was behind of data flow; so MSP's I2C was acknowledging last incoming data before I order it to STOP. So the last bit was .../read-/ ACK -/STP. Apparently UCD3138 PMBus state machine didn't like that and for next massage it NACKed the its own address. So I got NACK for every other massage.

    Best,
    Siamak
  • Dear Siamak,

    Regarding to store RAM to Flash, you may have to check to the optimization level of source file, interrupts.c, should be -o1.

    When you use a mix of C and assembly, especially when you use the asm(“…”); statement from C, high level optimization can cause issues.

    The file” interrupts.c” is a good example of using lots of asm(“…”); statement from C.

    The O2 level in CCS version higher than “3.3.82.13” (Even in CCS5, CCS6) is more aggressive than in older versions.

    Here is the step(I guess you are using CCS6): Right click on interrupt.c -> Properities -> ARM compiler -> Optimization, and select the optimization level as 1 local optimizations.

     

    I agree that UCD will ACK/NACK to next message if there is a extra ACK/NACK in the code. However, it is neccessary sometimes, since it tells hardware to handle next things. Here I suggest to use ACK, since it will be better than NACK.

    Regars,

    Jack

  • Jack,

    I had older version of UCD3138 code, I ordered newer version (your link) but I am not getting any responses from TI support email or another one that emailed me once as sales person from TI any more. Is everyone on vacation ?  

    Could you help me get the code please!?

    Thank you so much!

  • Hi Siamak,

    I've forward your request to related persion, maybe you will got the firmware soon. Sorry for the delay.

    Regards,

    Jack

  • Thanks Jack! It was helpful.

    Regards,

    Siamak