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.

TMS320F280039C: PMBUS behavior to handle I2C protocol

Part Number: TMS320F280039C

Tool/software:

I have 2 questions:

1. Can PMBUS handle General call address/START byte/CBUS/10-bit addressing in I2C protocol?(Described in the figure)

I use I2C(master) to sent general call (addr:0000000+W) to PMBUS(slave) by using TI launch Board

I config the PMBSC.RX_BYtE_ACK_CNT=3 MAN_CMD=0 MAN_SLAVE_ACK=0.

I found PMBUS can ack at every acknowledge bit but PMBRXBUF and PMBSTS dose not have any updated as PMBUS is not matched anymore.

2.What is the difference in the behavior of PMBUS during the period when PMBCTRL.i2cmode is set to 0 and 1? When should I config this bit if I want to use TI PMBUS as a slave equipment.

  • figure of my question 1 is below:

  • Liu Liu,

    1. As mentioned in the TRM,PMBUS does have address and START bit. We have 7-bit addressing (I2C module has 7/10-bit addressing mode). 

    2. Enabling this bit allows for I2C compatibility in terms of both operation (ex. PMBUS is commands based and PMBUS in I2C mode can be data frame based, essentially more simple) and standards for the most part. Not all the I2C features like CBUS capability can be found on the PMBUS module. This bit is only related to I2C mode. For controller and target mode, you can set PMBCCR and PMBTCR accordingly. 

    BTW CBUS is only compatible in standard mode as per the I2C spec.

    Best Regards,

    Aishwarya

  • 1.You mean TRM mentioned START byte in PMBUS Section? Can you tell me where this part is? 

    2. I did a test for General call and Start Byte.  I use I2C(master) to sent general call (addr:0000000+W)/Start Byte(addr:0000000+R) to PMBUS(slave) by using TI launch Board

    I config the PMBSC.RX_BYTE_ACK_CNT=3 MAN_CMD=0 MAN_SLAVE_ACK=0 SLAVE_ADDR=0x3C.

    a. General Call 

    I found PMBUS can ack at every acknowledge bit but PMBRXBUF and PMBSTS does not have any updated as PMBUS is not matched anymore.

    --What this means? Can PMBUS handle General Call ?

    b. Start Byte

    PMBUS not ack at  acknowledge bit and PMBSHA does not updated anymore. Just like never be matched.

    --You said PMBUS have Start Byte on previous reply.  It seems like my test result are inconsistent with your anwser?

  • Liu Liu,

    Let me look into this and get back to you tomorrow.

    Best Regards,

    Aishwarya

  • Liu Liu,

    1.You mean TRM mentioned START byte in PMBUS Section? Can you tell me where this part is? 

    You're right, we have a START bit not byte. 

    2. I did a test for General call and Start Byte.  I use I2C(master) to sent general call (addr:0000000+W)/Start Byte(addr:0000000+R) to PMBUS(slave) by using TI launch Board

    I config the PMBSC.RX_BYTE_ACK_CNT=3 MAN_CMD=0 MAN_SLAVE_ACK=0 SLAVE_ADDR=0x3C.

    a. General Call 

    I found PMBUS can ack at every acknowledge bit but PMBRXBUF and PMBSTS does not have any updated as PMBUS is not matched anymore.

    --What this means? Can PMBUS handle General Call ?

    Can you try setting MAN_SLAVE_ACK to 1 and sending a data byte instead of a general call and see if this works?

    b. Start Byte

    PMBUS not ack at  acknowledge bit and PMBSHA does not updated anymore. Just like never be matched.

    --You said PMBUS have Start Byte on previous reply.  It seems like my test result are inconsistent with your anwser?

    I updated my previous answer, there is no start byte, only bit

    Best Regards,

    Aishwarya

  • a. General Call 

    I found PMBUS can ack at every acknowledge bit but PMBRXBUF and PMBSTS does not have any updated as PMBUS is not matched anymore.

    --What this means? Can PMBUS handle General Call ?

    I want to know that PMBUS's behavior of responding to general call is a feature within 280039C's expectation?  If so, can it be considered that PMBUS cannot handle general call addresses?

    Can you try setting MAN_SLAVE_ACK to 1 and sending a data byte instead of a general call and see if this works?

    I use I2C as master send addr(0x3C) and Wr(0) in addressing phase. I2C SCL frequence is 100K.

    PMBUS as slave with 0x3C slave address.

    I did two test:

    1.Use automatic address acknowledge mode MAN_SLAVE_ACK =0. As Shown in figure:

    a. PMBUS can send ack in addressing phase

    b. PMBHSA=0x78(addr:0x3C,r/w:0x0), which is in line with my expectations.

    2.Use manual address acknowledge mode MAN_SLAVE_ACK =1.

    a. I2C send same addr and r/w with automatic address acknowledge mode test(addr:0x3C,r/w:0x0)

    b. When PMBSTS.SLAVE_ADDR_READY =1. PMBHSA=0x3C(addr:0x1E,r/w:0x0), which is not meet expectations and PMBUS will not config PMBACK if PMBHSA.SLAVE_ADDR not equal to PMBSC.SLAVE_ADDR  in my code.

    Why PMBHSA is not correct in manual address acknowledge mode?

  • Any updated?

  • Liu Liu,

    I2C and PMBUS should support general call.

    Acording to the latest screenshots, you are not operating in I2C mode. Can you confirm if you’d like to be in I2C mode or PMBUS mode? If so, those questions I had asked earlier, could you try those in I2C mode? 

    Best Regards,

    Aishwarya 

  • I have try those teset in I2C mode. The test results are no different from using PMBUS MODE. 

    a. General Call (MAN_SLAVE_ACK =0)

    I found PMBUS can ack at every acknowledge bit but PMBRXBUF and PMBSTS does not have any updated as PMBUS is not matched anymore.

    Question: The test results do not match what you described that I2C and PMBUS should support general call

    b. Set MAN_SLAVE_ACK=0 and MAN_SLAVE_ACK=1 and I2C_MODE=1. The test results are consistent with set I2C_MODE=0.

    Question: How to determine if the address matches in manual addr ack mode?

    I use I2C as master send addr(0x3C) and Wr(0) in addressing phase. I2C SCL frequence is 100K.

    PMBUS as slave with 0x3C slave address.

    I did two test:

    1.Use automatic address acknowledge mode MAN_SLAVE_ACK =0. As Shown in figure:

    a. PMBUS can send ack in addressing phase

    b. PMBHSA=0x78(addr:0x3C,r/w:0x0), which is in line with my expectations.

    2.Use manual address acknowledge mode MAN_SLAVE_ACK =1.

    a. I2C send same addr and r/w with automatic address acknowledge mode test(addr:0x3C,r/w:0x0)

    b. When PMBSTS.SLAVE_ADDR_READY =1. PMBHSA=0x3C(addr:0x1E,r/w:0x0), which is not meet expectations and PMBUS will not config PMBACK if PMBHSA.SLAVE_ADDR not equal to PMBSC.SLAVE_ADDR  in my code.

    Why PMBHSA is not correct in manual address acknowledge mode?

    .

  • Liu Liu,

    Apologies for the delay due to the holiday on my end. Thanks for providing those details.

    General call along with the other calls are reserved addresses for I2C/PMBUS. A write to this address is used to address all the devices connected to I2C bus. Can you confirm what data is sent (after the START bit + general call + ACK) based on this screenshot from https://www.ti.com/lit/an/sbaa565/sbaa565.pdf?ts=1756816759317&ref_url=https%253A%252F%252Fwww.google.com%252F? Based on what you are describing the ACK process is working properly. 

    I am going to check with design experts if our PMBUS module can support general call, though my understanding was they can. I am also going to check if the PMBRXBUF and PMBSTS need to match necessarily since they are not necessarily I2C specific registers.

    In addition, could you share the MAN ACK code/configurations for further analysis? 
    Best Regards,

    Aishwarya 

  • General call along with the other calls are reserved addresses for I2C/PMBUS. A write to this address is used to address all the devices connected to I2C bus. Can you confirm what data is sent (after the START bit + general call + ACK) based on this screenshot from https://www.ti.com/lit/an/sbaa565/sbaa565.pdf?ts=1756816759317&ref_url=https%253A%252F%252Fwww.google.com%252F? Based on what you are describing the ACK process is working properly. 

    I can cofirm the frame format of general call.

    In addition, could you share the MAN ACK code/configurations for further analysis? 

    My code is below. PMBHSA is not my expected value. 

    2.Use manual address acknowledge mode MAN_SLAVE_ACK =1.

    a. I2C send same addr and r/w with automatic address acknowledge mode test(addr:0x3C,r/w:0x0)

    b. When PMBSTS.SLAVE_ADDR_READY =1. PMBHSA=0x3C(addr:0x1E,r/w:0x0), which is not meet expectations and PMBUS will not config PMBACK if PMBHSA.SLAVE_ADDR not equal to PMBSC.SLAVE_ADDR  in my code.

    Why PMBHSA is not correct in manual address acknowledge mode?

        uint16_t iii;
        uint16_t hsa1;
        HWREG(PMBUSA_BASE + 0x10) =  0x5200000;//CLK_DIV=0xA,SLV_EN=1
        //HWREG(PMBUSA_BASE + 0x10) =  0x85200000;//I2CMODE=1,CLK_DIV=0xA,SLV_EN=1
        HWREG(PMBUSA_BASE + 0xc) =  0x617F3C;//SLVADDR=0x3C,tx_count=1
        while((HWREG(PMBUSA_BASE + 0x8)&0x400)!=0x400) //waiting SLAVE_ADDR_READY=1
                   {
                      h=0;
                   }
           h++;
           hsa1 = HWREG(PMBUSA_BASE + 0xe); //read PMBHSA after SLAVE_ADDR_READY=1
        uint16_t iii;
        uint16_t hsa1;

  • Liu Liu,

    Thanks for sharing. I'm going to discuss this further with the design team and get back to you as soon as possible. Here's the configurations I used for manual ACK.

    Best Regards,

    Aishwarya

  • In the mode of manual ack of the address, did you get the same result as me?

  • Liu Liu,

    I see the addresses being setup properly and matching. Please give me some time to work with design team on it. Will give you update early next week.

    Best Regards,

    Aishwarya

  • I am going to check with design experts if our PMBUS module can support general call, though my understanding was they can. I am also going to check if the PMBRXBUF and PMBSTS need to match necessarily since they are not necessarily I2C specific registers.

    Is there any progress on this issue?

  • Liu Liu,

    Thanks for the prompt check-in. Unfortunately, I have not heard back from them yet. It may take over a week to get a response. I will also be out of office for the remainder of the week. 

    I also see that you have asked the same question twice (in this thread and here). Please only create one thread per question as this duplicates efforts on our end. I request you to close one of the threads and we can support you on one of them. 

    Best Regards,

    Aishwarya

  • OK, I hope you can continue to follow up on this issue. In addition,How to close another post?

  • Liu Liu,

    Yes, will do. I will work with my colleague to close the other thread. Please expect a response from me at the earliest next week. Thank you.

    Best Regards,

    Aishwarya

  • Liu Liu,

    I have not heard back from the team again. At this point, I would suggest testing out the configuration scenarios and select the configuration that is best suited for your application as it doesn't look like we have documentation on this.

    Best Regards,

    Aishwarya