Overview
In recent years, mobile devices such as laptops have achieved charging capabilities of up to 100W, with an increasing number of applications adopting USB PD to standardize charging connectors. Additionally, the trend of using both wired and wireless charging methods has been on the rise. However, to meet the broad power requirements of USB PD, such as charging two batteries (8.4V) from a 5V charger, the system must add a boost function. Furthermore, using both charging methods requires additional charging ICs and external components, which can complicate engineering practices and increase costs.
To address these issues, ROHM has launched a new battery charging IC: BD99954GW/MWV. This chip targets 1-4 battery cells and utilizes boost and buck control to generate a charging voltage of 3.07-19.2V while supporting the latest USB PD systems. It features a unique dual-input charging system developed by ROHM, allowing for charging switching without the need for a microcontroller. Moreover, it supports not only the USB PD standard but also the widely used USB BC1.2 charging standard. This makes it easy to implement USB charging, wireless power supply, and AC adapter charging, greatly facilitating the creation of a more convenient charging environment.
With the gradual popularization of wireless charging technology, most modern chargers need to be compatible with both wired and wireless input sources. Circuits using the BD99954 can eliminate the switching circuits required in traditional designs:
Figure: Designing a dual-input power supply using BD99954
BD99954GW and BD99954MWV have two key features that greatly facilitate the creation of a more convenient charging environment:
(1) Industry’s first dual-system charging support. The dual-input method makes it easier to integrate two charging methods. It also includes a charging adapter detection function, allowing for charging switching without a microcontroller. The dual-input charging system does not require the external components, transistors, and resistors needed for separate handling (charging path switching, preventing current backflow), which not only reduces installation space but also significantly alleviates design burdens.
(2) Buck-boost control supports the latest USB PD systems. The buck-boost control can generate the required charging voltage for batteries from any voltage between 5-20V (the maximum voltage of USB PD). For example, when charging two batteries (8.4V), it can step down from 20V input to charge at 8.4V, or step up from 5V input to charge at 8.4V.
Additionally, regarding USB charging standards, it supports not only USB PD but also the currently most popular USB BC1.2, thus supporting various charging methods from traditional USB charging to USB PD charging. This article evaluates the functionality of the evaluation board developed by ROHM for this chip: BD99954MWV Evaluation Kit, exploring its usage and some unique features.
First, let’s take a look at the BD99954 development board:
Figure: Development board and its main components
Note that the BD99954 development board received is an engineering sample, so there are jumper wires, but this does not affect the functional evaluation of the chip.
Hardware
Schematic
Figure: Schematic 1 (Main Circuit)
Figure: Schematic 2 (USB to I2C Section)
Due to resolution issues, the schematic is not very clear on the page. Interested readers can find the PDF format file in the reference resources at the end of this article.
The entire schematic is relatively simple, with nothing much to say. The main components are two chips (BD99954 + FT232HL) and some passive components. The FT232HL is used for communication with software on the PC, so the entire development board mainly consists of the BD99954 and passive components. This also demonstrates the high integration of the BD99954.
Chip
Next, let’s analyze the chip from the chip perspective, starting with the typical application diagram:
Figure: Typical Application Diagram of BD99954
Next, let’s look at the internal block diagram of the chip:
Figure: Internal Block Diagram of BD99954
From the above two diagrams, we can see that this chip integrates some commonly used units in power management circuits, greatly simplifying the final circuit.
Dual Input Automatic Switching
For instance, if two input sources need to switch, the traditional design:
Figure: Traditional dual-input switching requires additional switching circuits
If the same function is designed using the BD99954, it can greatly simplify the design, eliminating the switching FET and circuit shown in the above diagram:
Figure: Dual input switching designed using BD99954
Charging Curve
Figure: Charging Curve
Where System Voltage is the operating voltage of the system. If the battery voltage is below this voltage, it first needs to use trickle and pre-charge modes to bring the battery up to this voltage. Then, increase the charging current into fast charging constant current mode, charging the battery to the preset full charge voltage. At this point, the battery is not yet fully charged, and it enters fast charging constant voltage mode until the battery voltage reaches 1.15 times the set VBAT, at which point charging stops. At this time, the battery can be considered fully charged. These parameters can be set via the I2C bus. In addition, to prevent the battery from overheating, the chip can monitor the temperature of the battery through the temperature detection pin. If the temperature is too high, the current is halved, and the voltage is output according to the three-stage set voltage based on temperature.
Figure: Constant current and constant voltage parameters reduced based on temperature monitoring
GUI Configuration Software
The manufacturer has developed GUI software specifically for this development board to facilitate quick evaluation of its functionality, with download links provided at the end of this article. Installation instructions are not elaborated here, and the software consists of three interfaces:
Figure: Charge and discharge control interface
Figure: Direct register control interface
Figure: Extended control interface
Function Demonstration 1: Automatic Switching Charging and Discharging of Two Power Sources
Charging connection:
Figure: Charging connection
The discharging connection is similar, just without the battery, outputting voltage from VSYS.
First, observe the dual power source switching by disconnecting the 5V input of VCC, only connecting a 20.5V laptop power supply (modified) to VBUS, configured to output 19.2V, with the software configuration as follows:
Figure: Experiment 1 configuration UI
Note a few points: First, set the mode to 4S, which is a 4-cell series mode; otherwise, the chip will not allow such high voltage output. Secondly, the output voltage can theoretically be set to 32752mV, but the chip can only output a maximum of 19200mV, so setting it too high will automatically be capped by the software. Lastly, the indicators for 3 and 4 refer to the monitoring lights for VBUS and VCC, with the green light indicating input detection. The figure shows that only VBUS input is present.
Figure: Experiment 1 result
Note that my multimeter has poor accuracy, further explanations are not provided.
Now, connect the 5V VCC input, with both inputs connected, it defaults to using VBUS. This can also be changed to favor which input through the register.
Figure: Both inputs connected simultaneously
Figure: At this point still outputting 19200mV, as expected
Turn off VBUS and only connect VCC:
Figure: Only connecting VCC (5V)
At this point still outputting 19200mV, indicating boost mode.
Figure: VCC (5V) boosted to 19200mV output
Next, let’s look at the charging mode. This chip can charge 1-4 series lithium-ion batteries, and the author has conducted experiments, but due to the inconvenience of taking photos, only single-cell battery charging is demonstrated here.
Figure: Connecting the battery
Note that if the battery has a temperature resistor, it can be connected to the green military socket shown above to utilize the temperature resistor to prevent overheating, but the author does not have such a battery on hand, so this function is not tested.
For charging, the following parameters need to be configured:
Figure: Charging parameters
1. Trickle charge voltage: Batteries below this voltage are either protected or over-discharged, and trickle charging is needed before this voltage.
2. Pre-charge voltage: If below this voltage, pre-charging is needed.
3. Pre-charge current.
4. Fast charge current.
5. Fast charge voltage: Once this voltage is reached, it enters normal charging mode.
6. Trickle current.
7. Termination current: Some batteries require a certain termination current to prevent leakage.
8. After configuring these parameters, press this button, and when it turns green, charging begins, while the right interface starts displaying the actual charging curve.
The above content can be referenced in conjunction with the charging curve section mentioned earlier.
Function Demonstration 2: Reverse Power Supply from Battery
Reverse power supply connection:
Figure: Battery supplying power outward
When both external power sources are turned off, the battery needs to supply power outward. First, turn off both inputs, and ensure that the battery is connected and above 3.8V; otherwise, the entire board will have no power, making control or supply impossible.
Figure: Both outputs disconnected
When reverse powering, ensure both inputs are turned off; otherwise, it will short-circuit and damage the components.
The reverse power supply configuration is on the second interface, and it is off by default; both VCC and VBUS interfaces can be configured for output.
Figure: Reverse output configuration
Figure: Reverse buck-boost output
Function Demonstration 3: Custom Control
According to the schematic diagram posted above, the official configuration software controls the BD99954 chip through the USB to I2C interface. If custom control is needed, users can use a master control chip to communicate via the I2C bus. Of course, most applications do not require such custom communication, as the chip itself has common detection and switching functions. This article merely demonstrates a possibility for users with advanced custom control needs.
Additionally, it is worth mentioning that the official GUI software provides scripting programming for custom control. However, due to it being an engineering test version, it has not successfully run on my computer. Nevertheless, this is not a major issue, as in practical applications, either no control is needed, and it works according to default settings, or an external master control is used to control it via I2C.
Figure: MCR running abnormally
The I2C device address of the BD99954 is 0x09, with a rate of 10KHz to 400KHz. Its read and write formats and waveforms are shown in the following figures:
Figure: Read word format
Figure: Write word format
Figure: Communication waveform diagram
As can be seen, its communication is no different from that of general I2C devices, and it can communicate via the I2C bus by following its command format. The chip command set has three sets: basic/extended/debug, which can be switched via the MAP_SET command:
Figure: Command set switching diagram
For specific commands, please refer to the data manual; they are not listed here one by one.
Here, an Arduino Uno development board is used for communication. The connection signals are on J47:
Figure: SCL/SDA signals on J47
Figure: BD99954 + Arduino Uno
Taking the reverse output configuration to 7V as an example, the code is as follows:
//Arduino Uno control the BD99954 chip.
//Author: [email protected]
#include
#define BD_ADDR 0x09
//Bit 14 Trigger VRBOOST
#define VIN_CTRL_SET 0x0A
#define VRBOOST_SET 0x19
#define CHIP_ID 0x38
#define CHIP_REV 0x39
#define MAP_SET 0x3F
void setup() {
Wire.begin(); // join i2c bus (address optional for master)
pinMode(LED_BUILTIN, OUTPUT);
pinMode(7, INPUT);
Serial.begin(115200);
}
void wr16(uint8_t cmd, uint16_t d16)
{
uint8_t dl = (uint8_t)d16;
uint8_t dh = (uint8_t)(d16>>8);
Wire.beginTransmission(BD_ADDR); // transmit to device
Wire.write(cmd);
Wire.write(dl);
Wire.write(dh);
Wire.endTransmission(); // stop transmitting]
}
uint16_t rd16(uint8_t cmd)
{
uint16_t ret16 = 0;
Wire.beginTransmission(BD_ADDR); // transmit to device
Wire.write(cmd);
Wire.endTransmission(); // stop transmitting
Wire.requestFrom(BD_ADDR, 2);
while (2 != Wire.available())
{
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
}
uint8_t dl = Wire.read();
uint8_t dh = Wire.read();
ret16 = ((uint16_t)dh << 8) + dl;
return ret16;
}
void loop() {
uint16_t map_set = rd16(MAP_SET);
Serial.println(“MAP_SET:”);
Serial.println(map_set, HEX);
uint16_t tmp = rd16(CHIP_ID);
Serial.println(“CHIP_ID:”);
Serial.println(tmp, HEX);
tmp = rd16(CHIP_REV);
Serial.println(“CHIP_REV:”);
Serial.println(tmp, HEX);
tmp = rd16(VRBOOST_SET);
Serial.println(“VRBOOST_SET:”);
Serial.println(tmp, HEX);
wr16(VRBOOST_SET, 7000);
tmp = rd16(VRBOOST_SET);
Serial.println(“VRBOOST_SET:”);
Serial.println(tmp, HEX);
tmp = rd16(VIN_CTRL_SET);
Serial.println(“VIN_CTRL_SET:”);
Serial.println(tmp, HEX);
delay(50000);
}
Output:
Figure: Controlling the development board output through I2C
Conclusion Summary and Reference Resource Download
BD99954 has a high integration level, encompassing most power management functions for applications in laptops, tablets, and smartphones, significantly reducing design burdens for engineers and improving product stability.