mirror of https://github.com/ARMmbed/mbed-os.git
				
				
				
			C030 Battery Charger Voltage Fix
							parent
							
								
									2e1c2a1cdf
								
							
						
					
					
						commit
						a40469e7c5
					
				| 
						 | 
					@ -0,0 +1,33 @@
 | 
				
			||||||
 | 
					/* mbed Microcontroller Library
 | 
				
			||||||
 | 
					 * Copyright (c) 2006-2017 ARM Limited
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					 * you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					 * You may obtain a copy of the License at
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					 * See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					 * limitations under the License.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "battery_charger_i2c.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					BatteryChargerI2c::BatteryChargerI2c(PinName sda, PinName scl):_i2c(), _hz(100000) {
 | 
				
			||||||
 | 
					    i2c_init(&_i2c, sda, scl);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool BatteryChargerI2c::read_from_i2c(int i2c_address, char* data_read, int length)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    int bytes_read = i2c_read(&_i2c, i2c_address, data_read, length, 1);
 | 
				
			||||||
 | 
					    return (length == bytes_read);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool BatteryChargerI2c::write_to_i2c(int i2c_address, const char* data_write, int length)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    int bytes_written = i2c_write(&_i2c, i2c_address, data_write, length, 1);
 | 
				
			||||||
 | 
					    return (length == bytes_written);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,27 @@
 | 
				
			||||||
 | 
					#ifndef BATTERY_CHARGER_I2C
 | 
				
			||||||
 | 
					#define BATTERY_CHARGER_I2C
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "hal/i2c_api.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef __cplusplus
 | 
				
			||||||
 | 
					extern"C"{
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class BatteryChargerI2c{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					    BatteryChargerI2c(PinName sda, PinName scl);
 | 
				
			||||||
 | 
					    bool read_from_i2c(int i2c_address, char *data_read, int length);
 | 
				
			||||||
 | 
					    bool write_to_i2c(int i2c_address, const char *data_write, int length);
 | 
				
			||||||
 | 
					    virtual ~BatteryChargerI2c() {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					private:
 | 
				
			||||||
 | 
					    i2c_t _i2c;
 | 
				
			||||||
 | 
					    int   _hz;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef __cplusplus
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif //BATTERY_CHARGER_I2C
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,48 @@
 | 
				
			||||||
 | 
					/* mbed Microcontroller Library
 | 
				
			||||||
 | 
					 * Copyright (c) 2006-2017 ARM Limited
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					 * you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					 * You may obtain a copy of the License at
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					 * See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					 * limitations under the License.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "min_battery_voltage.h"
 | 
				
			||||||
 | 
					#include "battery_charger_i2c.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** Defining HAL_MspInit strong function
 | 
				
			||||||
 | 
					 * in user defined file as described in documentation
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void HAL_MspInit(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						set_minimum_battery_voltage();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void set_minimum_battery_voltage()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    char data_write[2] = {0};
 | 
				
			||||||
 | 
					    char data_read;
 | 
				
			||||||
 | 
					    BatteryChargerI2c i2c_object(I2C_SDA_B, I2C_SCL_B);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (i2c_object.write_to_i2c(BQ24295_I2C_ADDRESS,&data_write[0] , 1)){
 | 
				
			||||||
 | 
					        i2c_object.read_from_i2c(BQ24295_I2C_ADDRESS, &data_read, 1);
 | 
				
			||||||
 | 
					        data_read = data_read & MIN_BATTERY_VOLTAGE_MASK;
 | 
				
			||||||
 | 
					        data_write[0] = 0x0;
 | 
				
			||||||
 | 
					        data_write[1] = data_read;
 | 
				
			||||||
 | 
					        if (i2c_object.write_to_i2c(BQ24295_I2C_ADDRESS,&data_write[0] , 2)){
 | 
				
			||||||
 | 
					            //Battery Voltage is set to 3880mV
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    else{
 | 
				
			||||||
 | 
					        // Minimum battery voltage could not be set.  This is not a critical error, no need to stop execution
 | 
				
			||||||
 | 
					        // It simply means that longer cabling or USB ports with lower output voltages may cause problems.
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,21 @@
 | 
				
			||||||
 | 
					#ifndef MIN_BATTERY_VOLTAGE_H
 | 
				
			||||||
 | 
					#define MIN_BATTERY_VOLTAGE_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef __cplusplus
 | 
				
			||||||
 | 
					extern"C"{
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define BQ24295_I2C_ADDRESS (0x6B << 1)
 | 
				
			||||||
 | 
					#define MIN_BATTERY_VOLTAGE_MASK (0x87)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** Initializes an instance of class BatteryChargerI2c which is using the STM HAL I2C APIs
 | 
				
			||||||
 | 
					 *  This allows longer USB cables or USB ports with lower output voltages to power the board correctly.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void set_minimum_battery_voltage(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef __cplusplus
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif	// MIN_BATTERY_VOLTAGE_H
 | 
				
			||||||
		Loading…
	
		Reference in New Issue