ME11B Sample Code in Maxim Integrated Team

Dependencies:   BMI160 max32630hsp3 MemoryLCD USBDevice

Fork of Host_Software_MAX32664GWEB_HR_EXTENDED by Seyhmus Cacina

Committer:
seyhmus.cacina
Date:
Mon Mar 18 10:21:53 2019 +0300
Revision:
0:ac4dea3e2894
ME11B Sample Code First Commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
seyhmus.cacina 0:ac4dea3e2894 1 /*******************************************************************************
seyhmus.cacina 0:ac4dea3e2894 2 * Copyright (C) 2018 Maxim Integrated Products, Inc., All Rights Reserved.
seyhmus.cacina 0:ac4dea3e2894 3 *
seyhmus.cacina 0:ac4dea3e2894 4 * Permission is hereby granted, free of charge, to any person obtaining a
seyhmus.cacina 0:ac4dea3e2894 5 * copy of this software and associated documentation files (the "Software"),
seyhmus.cacina 0:ac4dea3e2894 6 * to deal in the Software without restriction, including without limitation
seyhmus.cacina 0:ac4dea3e2894 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
seyhmus.cacina 0:ac4dea3e2894 8 * and/or sell copies of the Software, and to permit persons to whom the
seyhmus.cacina 0:ac4dea3e2894 9 * Software is furnished to do so, subject to the following conditions:
seyhmus.cacina 0:ac4dea3e2894 10 *
seyhmus.cacina 0:ac4dea3e2894 11 * The above copyright notice and this permission notice shall be included
seyhmus.cacina 0:ac4dea3e2894 12 * in all copies or substantial portions of the Software.
seyhmus.cacina 0:ac4dea3e2894 13 *
seyhmus.cacina 0:ac4dea3e2894 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
seyhmus.cacina 0:ac4dea3e2894 15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
seyhmus.cacina 0:ac4dea3e2894 16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
seyhmus.cacina 0:ac4dea3e2894 17 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
seyhmus.cacina 0:ac4dea3e2894 18 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
seyhmus.cacina 0:ac4dea3e2894 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
seyhmus.cacina 0:ac4dea3e2894 20 * OTHER DEALINGS IN THE SOFTWARE.
seyhmus.cacina 0:ac4dea3e2894 21 *
seyhmus.cacina 0:ac4dea3e2894 22 * Except as contained in this notice, the name of Maxim Integrated
seyhmus.cacina 0:ac4dea3e2894 23 * Products, Inc. shall not be used except as stated in the Maxim Integrated
seyhmus.cacina 0:ac4dea3e2894 24 * Products, Inc. Branding Policy.
seyhmus.cacina 0:ac4dea3e2894 25 *
seyhmus.cacina 0:ac4dea3e2894 26 * The mere transfer of this software does not imply any licenses
seyhmus.cacina 0:ac4dea3e2894 27 * of trade secrets, proprietary technology, copyrights, patents,
seyhmus.cacina 0:ac4dea3e2894 28 * trademarks, maskwork rights, or any other form of intellectual
seyhmus.cacina 0:ac4dea3e2894 29 * property whatsoever. Maxim Integrated Products, Inc. retains all
seyhmus.cacina 0:ac4dea3e2894 30 * ownership rights.
seyhmus.cacina 0:ac4dea3e2894 31 *******************************************************************************
seyhmus.cacina 0:ac4dea3e2894 32 */
seyhmus.cacina 0:ac4dea3e2894 33
seyhmus.cacina 0:ac4dea3e2894 34
seyhmus.cacina 0:ac4dea3e2894 35 #include "MAX20303.h"
seyhmus.cacina 0:ac4dea3e2894 36
seyhmus.cacina 0:ac4dea3e2894 37
seyhmus.cacina 0:ac4dea3e2894 38
seyhmus.cacina 0:ac4dea3e2894 39 //******************************************************************************
seyhmus.cacina 0:ac4dea3e2894 40 MAX20303::MAX20303(I2C *i2c):
seyhmus.cacina 0:ac4dea3e2894 41 m_i2c(i2c), m_writeAddress(MAX20303_SLAVE_WR_ADDR),
seyhmus.cacina 0:ac4dea3e2894 42 m_readAddress(MAX20303_SLAVE_RD_ADDR)
seyhmus.cacina 0:ac4dea3e2894 43 {
seyhmus.cacina 0:ac4dea3e2894 44 }
seyhmus.cacina 0:ac4dea3e2894 45
seyhmus.cacina 0:ac4dea3e2894 46
seyhmus.cacina 0:ac4dea3e2894 47 //******************************************************************************
seyhmus.cacina 0:ac4dea3e2894 48 MAX20303::~MAX20303(void)
seyhmus.cacina 0:ac4dea3e2894 49 {
seyhmus.cacina 0:ac4dea3e2894 50 //empty block
seyhmus.cacina 0:ac4dea3e2894 51 }
seyhmus.cacina 0:ac4dea3e2894 52
seyhmus.cacina 0:ac4dea3e2894 53
seyhmus.cacina 0:ac4dea3e2894 54 //******************************************************************************
seyhmus.cacina 0:ac4dea3e2894 55 int MAX20303::LDO1Config()
seyhmus.cacina 0:ac4dea3e2894 56 {
seyhmus.cacina 0:ac4dea3e2894 57 int32_t ret = 0;
seyhmus.cacina 0:ac4dea3e2894 58 uint8_t val;
seyhmus.cacina 0:ac4dea3e2894 59 // ret |= writeReg(MAX20303::REG_AP_CMDOUT, 0x40);
seyhmus.cacina 0:ac4dea3e2894 60 // ret |= writeReg(MAX20303::REG_AP_DATOUT0, 0x05);
seyhmus.cacina 0:ac4dea3e2894 61 // ret |= writeReg(MAX20303::REG_AP_DATOUT1, 0x34);
seyhmus.cacina 0:ac4dea3e2894 62 //
seyhmus.cacina 0:ac4dea3e2894 63 // readReg(MAX20303::REG_AP_CMDOUT, val);
seyhmus.cacina 0:ac4dea3e2894 64 // readReg(MAX20303::REG_AP_DATOUT0, val);
seyhmus.cacina 0:ac4dea3e2894 65 // readReg(MAX20303::REG_AP_DATOUT1, val);
seyhmus.cacina 0:ac4dea3e2894 66 appcmdoutvalue_ = 0x40;
seyhmus.cacina 0:ac4dea3e2894 67 appdatainoutbuffer_[0] = 0x05;
seyhmus.cacina 0:ac4dea3e2894 68 appdatainoutbuffer_[1] = 0x34;
seyhmus.cacina 0:ac4dea3e2894 69 AppWrite(2);
seyhmus.cacina 0:ac4dea3e2894 70
seyhmus.cacina 0:ac4dea3e2894 71 return ret;
seyhmus.cacina 0:ac4dea3e2894 72 }
seyhmus.cacina 0:ac4dea3e2894 73
seyhmus.cacina 0:ac4dea3e2894 74 //******************************************************************************
seyhmus.cacina 0:ac4dea3e2894 75 int MAX20303::LDO2Config()
seyhmus.cacina 0:ac4dea3e2894 76 {
seyhmus.cacina 0:ac4dea3e2894 77 int32_t ret = 0;
seyhmus.cacina 0:ac4dea3e2894 78 uint8_t val;
seyhmus.cacina 0:ac4dea3e2894 79 appcmdoutvalue_ = 0x42;
seyhmus.cacina 0:ac4dea3e2894 80 appdatainoutbuffer_[0] = 0x01;
seyhmus.cacina 0:ac4dea3e2894 81 appdatainoutbuffer_[1] = 0x15; // 0.9V + (0.1V * number) = 3V
seyhmus.cacina 0:ac4dea3e2894 82 AppWrite(2);
seyhmus.cacina 0:ac4dea3e2894 83
seyhmus.cacina 0:ac4dea3e2894 84 return ret;
seyhmus.cacina 0:ac4dea3e2894 85 }
seyhmus.cacina 0:ac4dea3e2894 86
seyhmus.cacina 0:ac4dea3e2894 87
seyhmus.cacina 0:ac4dea3e2894 88 //******************************************************************************
seyhmus.cacina 0:ac4dea3e2894 89 int MAX20303::writeReg(registers_t reg, uint8_t value)
seyhmus.cacina 0:ac4dea3e2894 90 {
seyhmus.cacina 0:ac4dea3e2894 91 int32_t ret;
seyhmus.cacina 0:ac4dea3e2894 92
seyhmus.cacina 0:ac4dea3e2894 93 char cmdData[2] = {reg, value};
seyhmus.cacina 0:ac4dea3e2894 94
seyhmus.cacina 0:ac4dea3e2894 95 ret = m_i2c->write(m_writeAddress, cmdData, sizeof(cmdData));
seyhmus.cacina 0:ac4dea3e2894 96 //printf("MAX20303 write reg[0x%X]=0x%X, ret=%d\r\n", (uint32_t)reg, value, ret)
seyhmus.cacina 0:ac4dea3e2894 97
seyhmus.cacina 0:ac4dea3e2894 98 if (ret != 0)
seyhmus.cacina 0:ac4dea3e2894 99 return MAX20303_ERROR;
seyhmus.cacina 0:ac4dea3e2894 100
seyhmus.cacina 0:ac4dea3e2894 101 return MAX20303_NO_ERROR;
seyhmus.cacina 0:ac4dea3e2894 102 }
seyhmus.cacina 0:ac4dea3e2894 103
seyhmus.cacina 0:ac4dea3e2894 104
seyhmus.cacina 0:ac4dea3e2894 105 //******************************************************************************
seyhmus.cacina 0:ac4dea3e2894 106 int MAX20303::readReg(registers_t reg, uint8_t &value)
seyhmus.cacina 0:ac4dea3e2894 107 {
seyhmus.cacina 0:ac4dea3e2894 108 int32_t ret;
seyhmus.cacina 0:ac4dea3e2894 109
seyhmus.cacina 0:ac4dea3e2894 110 char data = reg;
seyhmus.cacina 0:ac4dea3e2894 111
seyhmus.cacina 0:ac4dea3e2894 112 ret = m_i2c->write(m_writeAddress, &data, sizeof(data));
seyhmus.cacina 0:ac4dea3e2894 113 if (ret != 0) {
seyhmus.cacina 0:ac4dea3e2894 114 printf("%s - failed - ret: %d\n", __func__);
seyhmus.cacina 0:ac4dea3e2894 115 return MAX20303_ERROR;
seyhmus.cacina 0:ac4dea3e2894 116 }
seyhmus.cacina 0:ac4dea3e2894 117
seyhmus.cacina 0:ac4dea3e2894 118 ret = m_i2c->read(m_readAddress, &data, sizeof(data));
seyhmus.cacina 0:ac4dea3e2894 119 if (ret != 0) {
seyhmus.cacina 0:ac4dea3e2894 120 printf("%s - failed - ret: %d\n", __func__);
seyhmus.cacina 0:ac4dea3e2894 121 return MAX20303_ERROR;
seyhmus.cacina 0:ac4dea3e2894 122 }
seyhmus.cacina 0:ac4dea3e2894 123
seyhmus.cacina 0:ac4dea3e2894 124 value = data;
seyhmus.cacina 0:ac4dea3e2894 125 printf("MAX20303 read reg[0x%X]=0x%X, ret=%d\r\n", (uint32_t)reg, value, ret);
seyhmus.cacina 0:ac4dea3e2894 126 return MAX20303_NO_ERROR;
seyhmus.cacina 0:ac4dea3e2894 127 }
seyhmus.cacina 0:ac4dea3e2894 128
seyhmus.cacina 0:ac4dea3e2894 129 //******************************************************************************
seyhmus.cacina 0:ac4dea3e2894 130 int MAX20303::readRegMulti(registers_t reg, uint8_t *value, uint8_t len){
seyhmus.cacina 0:ac4dea3e2894 131 int32_t ret;
seyhmus.cacina 0:ac4dea3e2894 132 char data = reg;
seyhmus.cacina 0:ac4dea3e2894 133
seyhmus.cacina 0:ac4dea3e2894 134 ret = m_i2c->write(m_writeAddress, &data, sizeof(data));
seyhmus.cacina 0:ac4dea3e2894 135 if (ret != 0) {
seyhmus.cacina 0:ac4dea3e2894 136 printf("%s - failed - ret: %d\n", __func__);
seyhmus.cacina 0:ac4dea3e2894 137 return MAX20303_ERROR;
seyhmus.cacina 0:ac4dea3e2894 138 }
seyhmus.cacina 0:ac4dea3e2894 139
seyhmus.cacina 0:ac4dea3e2894 140 ret = m_i2c->read(m_readAddress, (char *)value, len);
seyhmus.cacina 0:ac4dea3e2894 141 if (ret != 0) {
seyhmus.cacina 0:ac4dea3e2894 142 printf("%s - failed - ret: %d\n", __func__);
seyhmus.cacina 0:ac4dea3e2894 143 return MAX20303_ERROR;
seyhmus.cacina 0:ac4dea3e2894 144 }
seyhmus.cacina 0:ac4dea3e2894 145
seyhmus.cacina 0:ac4dea3e2894 146 printf("MAX20303 read reg[0x%X]=0x%X, ret=%d\r\n", (uint32_t)reg, value, ret);
seyhmus.cacina 0:ac4dea3e2894 147 return MAX20303_NO_ERROR;
seyhmus.cacina 0:ac4dea3e2894 148 }
seyhmus.cacina 0:ac4dea3e2894 149
seyhmus.cacina 0:ac4dea3e2894 150 //******************************************************************************
seyhmus.cacina 0:ac4dea3e2894 151 int MAX20303::writeRegMulti(registers_t reg, uint8_t *value, uint8_t len){
seyhmus.cacina 0:ac4dea3e2894 152 int32_t ret;
seyhmus.cacina 0:ac4dea3e2894 153 i2cbuffer_[0] = reg;
seyhmus.cacina 0:ac4dea3e2894 154 memcpy(&i2cbuffer_[1], value, len);
seyhmus.cacina 0:ac4dea3e2894 155
seyhmus.cacina 0:ac4dea3e2894 156 ret = m_i2c->write(m_writeAddress, (char *)i2cbuffer_, (len+1));
seyhmus.cacina 0:ac4dea3e2894 157 //printf("MAX20303 write reg[0x%X]=0x%X, ret=%d\r\n", (uint32_t)reg, value, ret)
seyhmus.cacina 0:ac4dea3e2894 158
seyhmus.cacina 0:ac4dea3e2894 159 if (ret != 0)
seyhmus.cacina 0:ac4dea3e2894 160 return MAX20303_ERROR;
seyhmus.cacina 0:ac4dea3e2894 161
seyhmus.cacina 0:ac4dea3e2894 162 return MAX20303_NO_ERROR;
seyhmus.cacina 0:ac4dea3e2894 163 }
seyhmus.cacina 0:ac4dea3e2894 164 //******************************************************************************
seyhmus.cacina 0:ac4dea3e2894 165 int MAX20303::mv2bits(int mV)
seyhmus.cacina 0:ac4dea3e2894 166 {
seyhmus.cacina 0:ac4dea3e2894 167 int regBits;
seyhmus.cacina 0:ac4dea3e2894 168
seyhmus.cacina 0:ac4dea3e2894 169 if (( MAX20303_LDO_MIN_MV <= mV) && (mV <= MAX20303_LDO_MAX_MV)) {
seyhmus.cacina 0:ac4dea3e2894 170 regBits = (mV - MAX20303_LDO_MIN_MV) / MAX20303_LDO_STEP_MV;
seyhmus.cacina 0:ac4dea3e2894 171 } else {
seyhmus.cacina 0:ac4dea3e2894 172 return -1;
seyhmus.cacina 0:ac4dea3e2894 173 }
seyhmus.cacina 0:ac4dea3e2894 174
seyhmus.cacina 0:ac4dea3e2894 175 return regBits;
seyhmus.cacina 0:ac4dea3e2894 176 }
seyhmus.cacina 0:ac4dea3e2894 177 //******************************************************************************
seyhmus.cacina 0:ac4dea3e2894 178 int MAX20303::PowerOffthePMIC(){
seyhmus.cacina 0:ac4dea3e2894 179 int ret;
seyhmus.cacina 0:ac4dea3e2894 180 appdatainoutbuffer_[0] = 0xB2;
seyhmus.cacina 0:ac4dea3e2894 181 appcmdoutvalue_ = 0x80;
seyhmus.cacina 0:ac4dea3e2894 182 ret = AppWrite(1);
seyhmus.cacina 0:ac4dea3e2894 183
seyhmus.cacina 0:ac4dea3e2894 184 if(appcmdoutvalue_ != 0x80){
seyhmus.cacina 0:ac4dea3e2894 185 ret |= MAX20303_ERROR;
seyhmus.cacina 0:ac4dea3e2894 186 }
seyhmus.cacina 0:ac4dea3e2894 187
seyhmus.cacina 0:ac4dea3e2894 188 return ret;
seyhmus.cacina 0:ac4dea3e2894 189 }
seyhmus.cacina 0:ac4dea3e2894 190 //******************************************************************************
seyhmus.cacina 0:ac4dea3e2894 191 int MAX20303::PowerOffDelaythePMIC(){
seyhmus.cacina 0:ac4dea3e2894 192 int ret;
seyhmus.cacina 0:ac4dea3e2894 193 appdatainoutbuffer_[0] = 0xB2;
seyhmus.cacina 0:ac4dea3e2894 194 appcmdoutvalue_ = 0x84;
seyhmus.cacina 0:ac4dea3e2894 195 ret = AppWrite(1);
seyhmus.cacina 0:ac4dea3e2894 196
seyhmus.cacina 0:ac4dea3e2894 197 if(appcmdoutvalue_ != 0x80){
seyhmus.cacina 0:ac4dea3e2894 198 ret |= MAX20303_ERROR;
seyhmus.cacina 0:ac4dea3e2894 199 }
seyhmus.cacina 0:ac4dea3e2894 200
seyhmus.cacina 0:ac4dea3e2894 201 return ret;
seyhmus.cacina 0:ac4dea3e2894 202 }
seyhmus.cacina 0:ac4dea3e2894 203
seyhmus.cacina 0:ac4dea3e2894 204 //******************************************************************************
seyhmus.cacina 0:ac4dea3e2894 205 int MAX20303::SoftResetthePMIC(){
seyhmus.cacina 0:ac4dea3e2894 206 int ret;
seyhmus.cacina 0:ac4dea3e2894 207 appdatainoutbuffer_[0] = 0xB3;
seyhmus.cacina 0:ac4dea3e2894 208 appcmdoutvalue_ = 0x81;
seyhmus.cacina 0:ac4dea3e2894 209 ret = AppWrite(1);
seyhmus.cacina 0:ac4dea3e2894 210
seyhmus.cacina 0:ac4dea3e2894 211 if(appcmdoutvalue_ != 0x81){
seyhmus.cacina 0:ac4dea3e2894 212 ret |= MAX20303_ERROR;
seyhmus.cacina 0:ac4dea3e2894 213 }
seyhmus.cacina 0:ac4dea3e2894 214
seyhmus.cacina 0:ac4dea3e2894 215 return ret;
seyhmus.cacina 0:ac4dea3e2894 216 }
seyhmus.cacina 0:ac4dea3e2894 217 //******************************************************************************
seyhmus.cacina 0:ac4dea3e2894 218 int MAX20303::HardResetthePMIC(){
seyhmus.cacina 0:ac4dea3e2894 219 int ret;
seyhmus.cacina 0:ac4dea3e2894 220 appdatainoutbuffer_[0] = 0xB4;
seyhmus.cacina 0:ac4dea3e2894 221 appcmdoutvalue_ = 0x82;
seyhmus.cacina 0:ac4dea3e2894 222 ret = AppWrite(1);
seyhmus.cacina 0:ac4dea3e2894 223
seyhmus.cacina 0:ac4dea3e2894 224 if(appcmdoutvalue_ != 0x82){
seyhmus.cacina 0:ac4dea3e2894 225 ret |= MAX20303_ERROR;
seyhmus.cacina 0:ac4dea3e2894 226 }
seyhmus.cacina 0:ac4dea3e2894 227
seyhmus.cacina 0:ac4dea3e2894 228 return ret;
seyhmus.cacina 0:ac4dea3e2894 229 }
seyhmus.cacina 0:ac4dea3e2894 230
seyhmus.cacina 0:ac4dea3e2894 231 //******************************************************************************
seyhmus.cacina 0:ac4dea3e2894 232 int MAX20303::AppWrite(uint8_t dataoutlen){
seyhmus.cacina 0:ac4dea3e2894 233 int ret;
seyhmus.cacina 0:ac4dea3e2894 234
seyhmus.cacina 0:ac4dea3e2894 235 ret = writeRegMulti(MAX20303::REG_AP_DATOUT0, appdatainoutbuffer_, dataoutlen);
seyhmus.cacina 0:ac4dea3e2894 236 ret |= writeReg(MAX20303::REG_AP_CMDOUT, appcmdoutvalue_);
seyhmus.cacina 0:ac4dea3e2894 237 wait_ms(10);
seyhmus.cacina 0:ac4dea3e2894 238 ret |= readReg(MAX20303::REG_AP_RESPONSE, appcmdoutvalue_);
seyhmus.cacina 0:ac4dea3e2894 239
seyhmus.cacina 0:ac4dea3e2894 240 if(ret != 0)
seyhmus.cacina 0:ac4dea3e2894 241 return MAX20303_ERROR;
seyhmus.cacina 0:ac4dea3e2894 242
seyhmus.cacina 0:ac4dea3e2894 243 return MAX20303_NO_ERROR;
seyhmus.cacina 0:ac4dea3e2894 244 }
seyhmus.cacina 0:ac4dea3e2894 245
seyhmus.cacina 0:ac4dea3e2894 246
seyhmus.cacina 0:ac4dea3e2894 247 //******************************************************************************
seyhmus.cacina 0:ac4dea3e2894 248 int MAX20303::AppRead(uint8_t datainlen){
seyhmus.cacina 0:ac4dea3e2894 249 int ret;
seyhmus.cacina 0:ac4dea3e2894 250
seyhmus.cacina 0:ac4dea3e2894 251 ret = writeReg(MAX20303::REG_AP_CMDOUT, appcmdoutvalue_);
seyhmus.cacina 0:ac4dea3e2894 252 wait_ms(10);
seyhmus.cacina 0:ac4dea3e2894 253 ret |= readRegMulti(MAX20303::REG_AP_RESPONSE, i2cbuffer_, datainlen);
seyhmus.cacina 0:ac4dea3e2894 254 if(ret != 0)
seyhmus.cacina 0:ac4dea3e2894 255 return MAX20303_ERROR;
seyhmus.cacina 0:ac4dea3e2894 256
seyhmus.cacina 0:ac4dea3e2894 257 return MAX20303_NO_ERROR;
seyhmus.cacina 0:ac4dea3e2894 258 }
seyhmus.cacina 0:ac4dea3e2894 259
seyhmus.cacina 0:ac4dea3e2894 260 //******************************************************************************
seyhmus.cacina 0:ac4dea3e2894 261 char MAX20303::CheckPMICHWID(){
seyhmus.cacina 0:ac4dea3e2894 262 int ret;
seyhmus.cacina 0:ac4dea3e2894 263 uint8_t value = 0x00;
seyhmus.cacina 0:ac4dea3e2894 264
seyhmus.cacina 0:ac4dea3e2894 265 ret = readReg(MAX20303::REG_HARDWARE_ID, value);
seyhmus.cacina 0:ac4dea3e2894 266 if(ret != MAX20303_NO_ERROR)
seyhmus.cacina 0:ac4dea3e2894 267 return false;
seyhmus.cacina 0:ac4dea3e2894 268
seyhmus.cacina 0:ac4dea3e2894 269 if(value == 0x02)
seyhmus.cacina 0:ac4dea3e2894 270 return true;
seyhmus.cacina 0:ac4dea3e2894 271 else
seyhmus.cacina 0:ac4dea3e2894 272 return false;
seyhmus.cacina 0:ac4dea3e2894 273 }
seyhmus.cacina 0:ac4dea3e2894 274
seyhmus.cacina 0:ac4dea3e2894 275 //******************************************************************************
seyhmus.cacina 0:ac4dea3e2894 276 int MAX20303::CheckPMICStatusRegisters(unsigned char buf_results[5]){
seyhmus.cacina 0:ac4dea3e2894 277 int ret;
seyhmus.cacina 0:ac4dea3e2894 278 ret = readReg(MAX20303::REG_STATUS0, buf_results[0]);
seyhmus.cacina 0:ac4dea3e2894 279 ret |= readReg(MAX20303::REG_STATUS1, buf_results[1]);
seyhmus.cacina 0:ac4dea3e2894 280 ret |= readReg(MAX20303::REG_STATUS2, buf_results[2]);
seyhmus.cacina 0:ac4dea3e2894 281 ret |= readReg(MAX20303::REG_STATUS3, buf_results[3]);
seyhmus.cacina 0:ac4dea3e2894 282 ret |= readReg(MAX20303::REG_SYSTEM_ERROR, buf_results[4]);
seyhmus.cacina 0:ac4dea3e2894 283 return ret;
seyhmus.cacina 0:ac4dea3e2894 284 }
seyhmus.cacina 0:ac4dea3e2894 285
seyhmus.cacina 0:ac4dea3e2894 286 //******************************************************************************
seyhmus.cacina 0:ac4dea3e2894 287 int MAX20303::Max20303_BatteryGauge(unsigned char *batterylevel){
seyhmus.cacina 0:ac4dea3e2894 288 int ret;
seyhmus.cacina 0:ac4dea3e2894 289 char data[2];
seyhmus.cacina 0:ac4dea3e2894 290
seyhmus.cacina 0:ac4dea3e2894 291 data[0] = 0x04;
seyhmus.cacina 0:ac4dea3e2894 292 ret = m_i2c->write(MAX20303_I2C_ADDR_FUEL_GAUGE, data, 1);
seyhmus.cacina 0:ac4dea3e2894 293 if(ret != 0){
seyhmus.cacina 0:ac4dea3e2894 294 printf("Max20303_FuelGauge has failed\r\n");
seyhmus.cacina 0:ac4dea3e2894 295 }
seyhmus.cacina 0:ac4dea3e2894 296
seyhmus.cacina 0:ac4dea3e2894 297 ret = m_i2c->read(MAX20303_I2C_ADDR_FUEL_GAUGE | 1, data, 2);
seyhmus.cacina 0:ac4dea3e2894 298 if(ret != 0){
seyhmus.cacina 0:ac4dea3e2894 299 printf("Max20303_FuelGauge has failed\r\n");
seyhmus.cacina 0:ac4dea3e2894 300 }
seyhmus.cacina 0:ac4dea3e2894 301
seyhmus.cacina 0:ac4dea3e2894 302 // if the level is more than 100 assume the battery is not connected
seyhmus.cacina 0:ac4dea3e2894 303 if(data[0] > 100){
seyhmus.cacina 0:ac4dea3e2894 304 *batterylevel = 0;
seyhmus.cacina 0:ac4dea3e2894 305 } else{
seyhmus.cacina 0:ac4dea3e2894 306
seyhmus.cacina 0:ac4dea3e2894 307 *batterylevel = data[0];
seyhmus.cacina 0:ac4dea3e2894 308 }
seyhmus.cacina 0:ac4dea3e2894 309 return 0;
seyhmus.cacina 0:ac4dea3e2894 310 }
seyhmus.cacina 0:ac4dea3e2894 311
seyhmus.cacina 0:ac4dea3e2894 312
seyhmus.cacina 0:ac4dea3e2894 313 //******************************************************************************
seyhmus.cacina 0:ac4dea3e2894 314 int MAX20303::led0on(char enable) {
seyhmus.cacina 0:ac4dea3e2894 315
seyhmus.cacina 0:ac4dea3e2894 316 if(enable)
seyhmus.cacina 0:ac4dea3e2894 317 return writeReg(REG_LED0_DIRECT, 0x21);
seyhmus.cacina 0:ac4dea3e2894 318 else
seyhmus.cacina 0:ac4dea3e2894 319 return writeReg(REG_LED0_DIRECT, 0x01);
seyhmus.cacina 0:ac4dea3e2894 320 }
seyhmus.cacina 0:ac4dea3e2894 321
seyhmus.cacina 0:ac4dea3e2894 322 //******************************************************************************
seyhmus.cacina 0:ac4dea3e2894 323 int MAX20303::led1on(char enable) {
seyhmus.cacina 0:ac4dea3e2894 324 if(enable)
seyhmus.cacina 0:ac4dea3e2894 325 return writeReg(REG_LED1_DIRECT, 0x21);
seyhmus.cacina 0:ac4dea3e2894 326 else
seyhmus.cacina 0:ac4dea3e2894 327 return writeReg(REG_LED1_DIRECT, 0x01);
seyhmus.cacina 0:ac4dea3e2894 328 }
seyhmus.cacina 0:ac4dea3e2894 329
seyhmus.cacina 0:ac4dea3e2894 330 //******************************************************************************
seyhmus.cacina 0:ac4dea3e2894 331 int MAX20303::led2on(char enable) {
seyhmus.cacina 0:ac4dea3e2894 332 if(enable)
seyhmus.cacina 0:ac4dea3e2894 333 return writeReg(REG_LED2_DIRECT, 0x21);
seyhmus.cacina 0:ac4dea3e2894 334 else
seyhmus.cacina 0:ac4dea3e2894 335 return writeReg(REG_LED2_DIRECT, 0x01);
seyhmus.cacina 0:ac4dea3e2894 336 }
seyhmus.cacina 0:ac4dea3e2894 337
seyhmus.cacina 0:ac4dea3e2894 338
seyhmus.cacina 0:ac4dea3e2894 339 //******************************************************************************
seyhmus.cacina 0:ac4dea3e2894 340 int MAX20303::BoostEnable(void) {
seyhmus.cacina 0:ac4dea3e2894 341 writeReg(REG_AP_DATOUT3, 0x00); // 00 : 5V
seyhmus.cacina 0:ac4dea3e2894 342 writeReg(REG_AP_DATOUT0, 0x01); // Boost Enabled
seyhmus.cacina 0:ac4dea3e2894 343 writeReg(REG_AP_CMDOUT, 0x30);
seyhmus.cacina 0:ac4dea3e2894 344 return MAX20303_NO_ERROR;
seyhmus.cacina 0:ac4dea3e2894 345 }
seyhmus.cacina 0:ac4dea3e2894 346
seyhmus.cacina 0:ac4dea3e2894 347 //******************************************************************************
seyhmus.cacina 0:ac4dea3e2894 348 int MAX20303::BuckBoostEnable(void)
seyhmus.cacina 0:ac4dea3e2894 349 {
seyhmus.cacina 0:ac4dea3e2894 350 int ret = 0;
seyhmus.cacina 0:ac4dea3e2894 351
seyhmus.cacina 0:ac4dea3e2894 352 ret |= writeReg( REG_AP_DATOUT0, 0x00); // Reserved = 0x00
seyhmus.cacina 0:ac4dea3e2894 353 ret |= writeReg( REG_AP_DATOUT1, 0x04); // BBstlSet = 0b'100 Buck Boost Peak current Limit = 200mA
seyhmus.cacina 0:ac4dea3e2894 354 ret |= writeReg( REG_AP_DATOUT2, 0x19); // BBstVSet = 0b'11001 Buck Boost Output Voltage = 5V
seyhmus.cacina 0:ac4dea3e2894 355 ret |= writeReg( REG_AP_DATOUT3, 0x01); // BBstRipRed = 1 Ripple Reduction
seyhmus.cacina 0:ac4dea3e2894 356 // BBstAct = 1 Actively discharged in Hard-Reset or Enable Low
seyhmus.cacina 0:ac4dea3e2894 357 // BBstPas = 1 Passively discharged in Hard-Reset or Enable Low
seyhmus.cacina 0:ac4dea3e2894 358 // BBstMd = 1 Damping Enabled
seyhmus.cacina 0:ac4dea3e2894 359 // BBstInd = 0 Inductance is 4.7uH
seyhmus.cacina 0:ac4dea3e2894 360 // BBstEn = 0b'01 Enabled
seyhmus.cacina 0:ac4dea3e2894 361 ret |= writeReg( REG_AP_CMDOUT, 0x70);
seyhmus.cacina 0:ac4dea3e2894 362 if (ret != 0)
seyhmus.cacina 0:ac4dea3e2894 363 return MAX20303_ERROR;
seyhmus.cacina 0:ac4dea3e2894 364
seyhmus.cacina 0:ac4dea3e2894 365 return MAX20303_NO_ERROR;
seyhmus.cacina 0:ac4dea3e2894 366 }
seyhmus.cacina 0:ac4dea3e2894 367