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.

BQ76PL455A-Q1: Unable to Read Device Addresses in Daisy Chain Architecture

Part Number: BQ76PL455A-Q1
Other Parts Discussed in Thread: BQ76PL455A

Hello All,

I am working on 2 bq76pl455a-q1 stacked configuration. Single IC works perfectly well by reading Voltages, Temperatures, Faults and balancing.

Now I am trying to interface 2 IC on the same PCB board. Both the IC have been waken up with VP,Vio voltages 5.3V with respect to local ground.

When using auto addressing method for addressing the bq76pl455a-q1, base board ID ids written 0 and Top board ID is written 1. While reading back device addresses, both base board and Top board reads 0.

So, i have a doubt in either Firmware code or Hardware design. But hardware design seems to be OK as TOP board gets waken up through Wake up tone on COMM+- lines.

I am attaching my initialization code below. Please let me know if i am missing out something.

nDev_ID = 0;
nSent = WriteReg(nDev_ID, COMCONFIG, 0x10E0, 2, FRMWRT_ALL_NR);    // set communications baud rate as 250KBaud

nSent = WriteReg(nDev_ID, DEVCONFIG, 0x19, 1, FRMWRT_ALL_NR);

nSent = WriteReg(nDev_ID, DEV_CTRL, 0x08, 1, FRMWRT_ALL_NR);			// Auto Address enable

uint8_t wTemp, wTemp1;
	// Set addresses for all boards in daisy-chain (section 1.2.3)
	for (nDev_ID = 0; nDev_ID < TOTALBOARDS; nDev_ID++)
	{
		nSent = WriteReg(nDev_ID, ADDR, nDev_ID, 1, FRMWRT_ALL_NR); // send address to each board
	}
	
// read device ID to see if there is a response
nDev_ID = 0;
nRead = ReadReg(nDev_ID, ADDR, &wTemp, 1, 0); // 0ms timeout
printf("Device id 0 : %d\r\n", wTemp);
	
nDev_ID = 1;
nRead = ReadReg(nDev_ID, ADDR, &wTemp1, 1, 0); // 0ms timeout
printf("Device id 1 : %d\r\n", wTemp1);

nDev_ID = 1;
nSent = WriteReg(nDev_ID, COMCONFIG, 0x1020, 2, FRMWRT_SGL_NR);	   // enable only comm-low for the top board
	
nDev_ID = 0;
nSent = WriteReg(nDev_ID, COMCONFIG, 0x10C0, 2, FRMWRT_SGL_NR);	   // enable comm-high, single-end comm port on bottom board

Thanks

Ritul Shah

 

  • Hi Ritul,

    Thank you for your question.

    In case you haven't seen it already, this document has the procedure step by step to implement auto-addressing. See section 1: www.ti.com/lit/an/slva617a/slva617a.pdf

    I compared your procedure to the one in the document and it looks correct, assuming your write_broadcast() and write_reg() functions where implemented correctly (e.g. CRC calculated correctly and functions sends the bytes in the correct order).

    A couple of questions for you:
    1) Is this software developed by you or are you using TI's example code?
    2) Are you using TI's bq76PL455A EVMs or boards developed by you?

    Lets focus on debugging the hardware first. I recommend trying the following in the order listed below:
    1) Confirm that the hardware is configured correctly when used as a stacked device. See section 6.7 and 6.8 of the bq76PL455A EVM User's Guide to see how to configure and connect stacked devices: www.ti.com/lit/ug/sluuba7a/sluuba7a.pdf
    2) Confirm that both devices in the stack wakeup correctly when a wakeup signal is sent. They can do this by measuring the voltage on the power pins (VDIG, VP, VIO, VREF) to confirm both devices powered up correctly. See section 7.4.4 "Power-On Reset (POR) or Wakeup" in the datasheet: www.ti.com/lit/ds/symlink/bq76pl455a-q1.pdf
    3) Connect oscilloscope to COMML+- terminals on the top device and confirm that the signals are received in the pins by the top device when a broadcast write command is sent from UART on the base device

    Best regards,
    Leslie
  • Hello Leslie,

    Thanks for your detailed reply.

    I have referred the document slva617a to implement auto-addressing.

    1. I am using TI's sample code for my application.

    2. PCB board has been developed by me with 2 bq76pl455a-q1 IC and a cortex m-3 microcontroller on it.

    As per your advice i checked out following things:

    1. I have done configuration of stacked devices as per the mentioned user guide document.

    2. Both the devices remain waked up. 5.3V is measured on Vp of both the devices. But it is observed that, when i read the device addresses after auto addressing and writing addresses to each device, only base board address is read and top board address is not read. Either it hangs up the code at RXReady while loop or it gives zero value, which is incorrect.

    3. I have checked continuity across the line. It is proper. Also, none of the TVS diodes are shorted. COMML+- lines are also not shorted.

    Yet, I have not tested with oscilloscope. Do I need to perform a differential measurement with 2 channels and a common ground?

    My questions:

    1. In what all conditions can the top devices get powered down?

    2. Once it powers down, i need to wait a long to again wakeup the top device. What might be the reason?

    Please help me to solve my problems.

    THank you

    Ritul Shah

  • Hi Ritul,

    Please capture scope plot on your oscilloscope on COMML+, COMML- on top device and COMMH+, COMMH- on bottom device to make sure frame is received correctly on top device. For ease of debugging, you can power up both devices in parallel from same supply (bottom board and stacked board powered from same power supply) and just connect your normal oscilloscope probes reference to GND.

    There are several events that can cause the device to enter shutdown mode. These are listed in the device datasheet (www.ti.com/.../bq76pl455a-q1.pdf) section 7.4.1. "SHUTDOWN", pages 46 and 47.

    You mentioned that the top device gets powered down. Can you please explain in more detail what you mean by this and how you get to that state? Specifically:
    - What do you mean by "device get's powered down"?
    - At what point does this happen?

    Please review the modes to go into shutdown from the list in the datasheet mentioned above to make sure one of these is not the issue. Also, to focus on hardware debug first, please use the device GUI instead of the microcontroller software.

    Best regards,
    Leslie
  • Hello Leslie,

    Please find the attached scope results for COMML+- on TOP and COMMH+- on bottom device. 

    I am powering up the devices internally using Wakeup signal. Should I power up externally by giving 5V to Vp on both the devices?

    The Wakeup of Top device is quite magical. Sometimes it powers up properly and gets 5.3 V on Vp(Top). Then if I keep the setup as it is for some period of time without doing anything, TOP device Vp voltage goes OFF. Also, on reconnecting the circuit and again waking it up, it does not waked up. I need to wait a long after which It may get waked up again.

    Questions:

    1.  Procedure for wakeup: For waking up the bottom device, I am using an external 3.6V Battery supply that gives a 3.6V signal for around 1 second to the Wakeup pin. Then I remove the battery. Is this procedure OK?

    2.  To use the Device GUI, should I connect RS232 cable to bottom device?

     

  • Scope result across COMMH+- on Bottom device and COMML+- on TOP devices are same.

  • Hello Leslie, Taylor,

    I have tested using GUI software for bq76pl455. Only 1 device was detected. Second device was not detected.(Image attached below)

    After manually putting commands for auto-addressing, while reading 2nd device address, an error has come.(Image attached below)

  • Hi Ritul,

    On your scope plot, can you please indicate what each signal is of the 3 signals plotted? Seems like no data is being sent. Did you capture this after a read or write to stack device? You should see data (voltage levels toggling high and low as data is being transmitted). Can you please capture the plot when sending or reading from the top device?

    Regarding the error you saw in the GUI, what happened is that when you read from the top device, the PC is waiting for a response from that device and it never received it so you get a timeout error.

    Regards,
    Leslie
  • Hi Ritul,

    As aligned, I'm closing this thread since we already have a discussion about this on the other thread.

    Best regards,
    Leslie
  • Hello Leslie,

    I have got the root cause of the problem. When I removed TVS Diodes on the daisy chain communication line, Top board started communicating.
    Currently i had put 5v TVS diodes. Can you suggest me a suitable part number so that it can protect my daisy chain circuit?

    Thank you for helping me.
  • Hi Ritul,

    I'm glad your system is working now!

    Please refer to the EVM User's guide (www.ti.com/.../sluuba7a.pdf) to see the part number of the diodes we used on the EVM. I recommend using these ones. See bill of materials on page 60. Z20 to Z27 are the diodes on the comm lines. To see how these are connected in the schematic, see page 64.

    Best regards,
    Leslie