1818#include " Common.h"
1919#include " Wire.h"
2020
21+ #define PMIC_ADDRESS 0x6B
22+ #define PMIC_REG00 0x00
23+ #define PMIC_REG01 0x01
24+ #define PMIC_REG02 0x02
25+ #define PMIC_REG04 0x04
26+ #define PMIC_REG05 0x05
27+
2128String mc::MotorController::getFWVersion () {
2229 char ret[5 ];
2330 getData (GET_VERSION, (uint8_t *)ret);
@@ -42,6 +49,14 @@ float mc::MotorController::getTemperature() {
4249
4350int mc::MotorController::begin () {
4451 Wire.begin ();
52+
53+ // PMIC initialization raw APIs: are sused to initialize the
54+ // PMIC when used with nano 33 iot
55+ #ifdef ARDUINO_SAMD_NANO_33_IOT
56+ Serial.println (" Board: Nano 33 IoT" );
57+ enable_battery_charging ();
58+ Serial.println (" Charging enabled...." );
59+ #endif
4560 String version = getFWVersion ();
4661 if (version.c_str ()[0 ] == ' 0' ) {
4762 return 1 ;
@@ -59,4 +74,27 @@ int mc::MotorController::getFreeRam() {
5974 int ret;
6075 getData (GET_FREE_RAM, (uint8_t *)&ret);
6176 return ret;
77+ }
78+
79+ void mc::MotorController::enable_battery_charging () {
80+ Wire.beginTransmission (PMIC_ADDRESS);
81+ Wire.write (PMIC_REG00);
82+ Wire.write (0x06 ); // min sys voltage 3.88V + max input current 2.0 A
83+ Wire.endTransmission ();
84+ Wire.beginTransmission (PMIC_ADDRESS);
85+ Wire.write (PMIC_REG01);
86+ Wire.write (0x1B ); // Charge Battery + Minimum System Voltage 3.5V
87+ Wire.endTransmission ();
88+ Wire.beginTransmission (PMIC_ADDRESS);
89+ Wire.write (PMIC_REG02);
90+ Wire.write (0x00 ); // Charge current 512 mA
91+ Wire.endTransmission ();
92+ Wire.beginTransmission (PMIC_ADDRESS);
93+ Wire.write (PMIC_REG04);
94+ Wire.write (0x9E ); // Charge Voltage Limit 4.128V
95+ Wire.endTransmission ();
96+ Wire.beginTransmission (PMIC_ADDRESS);
97+ Wire.write (PMIC_REG05);
98+ Wire.write (0x8A ); // Enable Battery Charge termination + disable watchdog
99+ Wire.endTransmission ();
62100}
0 commit comments