Jerry Bradshaw / Mbed OS HSP_RPC_GUI_3_0_1

Dependencies:   USBDevice

Fork of HSP_RPC_GUI by Maxim Integrated

Committer:
jbradshaw
Date:
Tue Apr 25 10:47:10 2017 -0500
Revision:
3:8e9b9f5818aa
Parent:
1:9490836294ea
Removed Bulk Erasing, instead a small number of bytes are sampled from each and every page to determine if sector is "dirty", if so sector is erased
Prevents device from sleeping when the firmware detects a series of binary flash page RPC transfers, this increases flash page transfers by %450
when 200mS elapse with the last flash page transfer, normal sleep behaviour is resumed

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jbradshaw 0:e4a10ed6eb92 1 /*******************************************************************************
jbradshaw 0:e4a10ed6eb92 2 * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
jbradshaw 0:e4a10ed6eb92 3 *
jbradshaw 0:e4a10ed6eb92 4 * Permission is hereby granted, free of charge, to any person obtaining a
jbradshaw 0:e4a10ed6eb92 5 * copy of this software and associated documentation files (the "Software"),
jbradshaw 0:e4a10ed6eb92 6 * to deal in the Software without restriction, including without limitation
jbradshaw 0:e4a10ed6eb92 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
jbradshaw 0:e4a10ed6eb92 8 * and/or sell copies of the Software, and to permit persons to whom the
jbradshaw 0:e4a10ed6eb92 9 * Software is furnished to do so, subject to the following conditions:
jbradshaw 0:e4a10ed6eb92 10 *
jbradshaw 0:e4a10ed6eb92 11 * The above copyright notice and this permission notice shall be included
jbradshaw 0:e4a10ed6eb92 12 * in all copies or substantial portions of the Software.
jbradshaw 0:e4a10ed6eb92 13 *
jbradshaw 0:e4a10ed6eb92 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
jbradshaw 0:e4a10ed6eb92 15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
jbradshaw 0:e4a10ed6eb92 16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
jbradshaw 0:e4a10ed6eb92 17 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
jbradshaw 0:e4a10ed6eb92 18 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
jbradshaw 0:e4a10ed6eb92 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
jbradshaw 0:e4a10ed6eb92 20 * OTHER DEALINGS IN THE SOFTWARE.
jbradshaw 0:e4a10ed6eb92 21 *
jbradshaw 0:e4a10ed6eb92 22 * Except as contained in this notice, the name of Maxim Integrated
jbradshaw 0:e4a10ed6eb92 23 * Products, Inc. shall not be used except as stated in the Maxim Integrated
jbradshaw 0:e4a10ed6eb92 24 * Products, Inc. Branding Policy.
jbradshaw 0:e4a10ed6eb92 25 *
jbradshaw 0:e4a10ed6eb92 26 * The mere transfer of this software does not imply any licenses
jbradshaw 0:e4a10ed6eb92 27 * of trade secrets, proprietary technology, copyrights, patents,
jbradshaw 0:e4a10ed6eb92 28 * trademarks, maskwork rights, or any other form of intellectual
jbradshaw 0:e4a10ed6eb92 29 * property whatsoever. Maxim Integrated Products, Inc. retains all
jbradshaw 0:e4a10ed6eb92 30 * ownership rights.
jbradshaw 0:e4a10ed6eb92 31 *******************************************************************************
jbradshaw 0:e4a10ed6eb92 32 */
jbradshaw 0:e4a10ed6eb92 33
jbradshaw 0:e4a10ed6eb92 34 #include "MAX14720.h"
jbradshaw 0:e4a10ed6eb92 35
jbradshaw 0:e4a10ed6eb92 36 //******************************************************************************
jbradshaw 0:e4a10ed6eb92 37 MAX14720::MAX14720(PinName sda, PinName scl, int slaveAddress) :
jbradshaw 0:e4a10ed6eb92 38 slaveAddress(slaveAddress) {
jbradshaw 0:e4a10ed6eb92 39 i2c = new I2C(sda, scl);
jbradshaw 0:e4a10ed6eb92 40 isOwner = true;
jbradshaw 0:e4a10ed6eb92 41 clkDivEn = false;
jbradshaw 0:e4a10ed6eb92 42 clkDivSet = 0;
jbradshaw 0:e4a10ed6eb92 43 boostISet = BOOST_ISET_100mA;
jbradshaw 0:e4a10ed6eb92 44 boostMillivolts = 3300;
jbradshaw 0:e4a10ed6eb92 45 boostEn = BOOST_DISABLED;
jbradshaw 0:e4a10ed6eb92 46 boostEMI = false;
jbradshaw 0:e4a10ed6eb92 47 boostInd = false;
jbradshaw 0:e4a10ed6eb92 48 boostHysOff = false;
jbradshaw 0:e4a10ed6eb92 49 boostPasDsc = false;
jbradshaw 0:e4a10ed6eb92 50 boostActDsc = false;
jbradshaw 0:e4a10ed6eb92 51 buckMd = BUCK_BURST;
jbradshaw 0:e4a10ed6eb92 52 buckFst = false;
jbradshaw 0:e4a10ed6eb92 53 buckISet = BUCK_ISET_300mA;
jbradshaw 0:e4a10ed6eb92 54 buckCfg = false;
jbradshaw 0:e4a10ed6eb92 55 buckInd = false;
jbradshaw 0:e4a10ed6eb92 56 buckHysOff = true;
jbradshaw 0:e4a10ed6eb92 57 buckMinOT = true;
jbradshaw 0:e4a10ed6eb92 58 buckInteg = true;
jbradshaw 0:e4a10ed6eb92 59 buckPasDsc = false;
jbradshaw 0:e4a10ed6eb92 60 buckActDsc = false;
jbradshaw 0:e4a10ed6eb92 61 buckFScl = false;
jbradshaw 0:e4a10ed6eb92 62 }
jbradshaw 0:e4a10ed6eb92 63 //******************************************************************************
jbradshaw 0:e4a10ed6eb92 64 MAX14720::MAX14720(I2C *i2c, int slaveAddress) : slaveAddress(slaveAddress) {
jbradshaw 0:e4a10ed6eb92 65 this->i2c = i2c;
jbradshaw 0:e4a10ed6eb92 66 isOwner = false;
jbradshaw 0:e4a10ed6eb92 67 clkDivEn = false;
jbradshaw 0:e4a10ed6eb92 68 clkDivSet = 0;
jbradshaw 0:e4a10ed6eb92 69 boostISet = BOOST_ISET_100mA;
jbradshaw 0:e4a10ed6eb92 70 boostMillivolts = 3300;
jbradshaw 0:e4a10ed6eb92 71 boostEn = BOOST_DISABLED;
jbradshaw 0:e4a10ed6eb92 72 boostEMI = false;
jbradshaw 0:e4a10ed6eb92 73 boostInd = false;
jbradshaw 0:e4a10ed6eb92 74 boostHysOff = false;
jbradshaw 0:e4a10ed6eb92 75 boostPasDsc = false;
jbradshaw 0:e4a10ed6eb92 76 boostActDsc = false;
jbradshaw 0:e4a10ed6eb92 77 buckMd = BUCK_BURST;
jbradshaw 0:e4a10ed6eb92 78 buckFst = false;
jbradshaw 0:e4a10ed6eb92 79 buckISet = BUCK_ISET_300mA;
jbradshaw 0:e4a10ed6eb92 80 buckCfg = false;
jbradshaw 0:e4a10ed6eb92 81 buckInd = false;
jbradshaw 0:e4a10ed6eb92 82 buckHysOff = true;
jbradshaw 0:e4a10ed6eb92 83 buckMinOT = true;
jbradshaw 0:e4a10ed6eb92 84 buckInteg = true;
jbradshaw 0:e4a10ed6eb92 85 buckPasDsc = false;
jbradshaw 0:e4a10ed6eb92 86 buckActDsc = false;
jbradshaw 0:e4a10ed6eb92 87 buckFScl = false;
jbradshaw 0:e4a10ed6eb92 88 }
jbradshaw 0:e4a10ed6eb92 89 //******************************************************************************
jbradshaw 0:e4a10ed6eb92 90 MAX14720::~MAX14720() {
jbradshaw 0:e4a10ed6eb92 91 if (isOwner == true) {
jbradshaw 0:e4a10ed6eb92 92 delete i2c;
jbradshaw 0:e4a10ed6eb92 93 }
jbradshaw 0:e4a10ed6eb92 94 }
jbradshaw 0:e4a10ed6eb92 95
jbradshaw 0:e4a10ed6eb92 96 //******************************************************************************
jbradshaw 0:e4a10ed6eb92 97 int MAX14720::boostSetMode(boostEn_t mode) {
jbradshaw 0:e4a10ed6eb92 98 int result;
jbradshaw 0:e4a10ed6eb92 99 char data;
jbradshaw 0:e4a10ed6eb92 100 boostEn = mode;
jbradshaw 0:e4a10ed6eb92 101 data = (boostEn << 3) | (boostEMI << 1) | (boostInd);
jbradshaw 0:e4a10ed6eb92 102 result = writeReg(REG_BOOST_CFG, data);
jbradshaw 1:9490836294ea 103 if (result == MAX14720_ERROR) {
jbradshaw 1:9490836294ea 104 return result;
jbradshaw 1:9490836294ea 105 }
jbradshaw 0:e4a10ed6eb92 106 return 0;
jbradshaw 0:e4a10ed6eb92 107 }
jbradshaw 0:e4a10ed6eb92 108
jbradshaw 0:e4a10ed6eb92 109 //******************************************************************************
jbradshaw 0:e4a10ed6eb92 110 int MAX14720::boostSetVoltage(int mV) {
jbradshaw 0:e4a10ed6eb92 111 int result;
jbradshaw 0:e4a10ed6eb92 112 char data;
jbradshaw 1:9490836294ea 113 result = MAX14720_NO_ERROR;
jbradshaw 0:e4a10ed6eb92 114 if ((MAX14720_BOOST_MIN_MV <= mV) && (mV <= MAX14720_BOOST_MAX_MV)) {
jbradshaw 0:e4a10ed6eb92 115 boostMillivolts = mV;
jbradshaw 0:e4a10ed6eb92 116 data = (mV - MAX14720_BOOST_MIN_MV) / MAX14720_BOOST_STEP_MV;
jbradshaw 0:e4a10ed6eb92 117 } else {
jbradshaw 0:e4a10ed6eb92 118 return MAX14720_ERROR;
jbradshaw 0:e4a10ed6eb92 119 }
jbradshaw 0:e4a10ed6eb92 120 if (boostEn == BOOST_ENABLED) {
jbradshaw 0:e4a10ed6eb92 121 result = writeReg(REG_BOOST_CFG, 0x00);
jbradshaw 0:e4a10ed6eb92 122 }
jbradshaw 1:9490836294ea 123 if (result == MAX14720_ERROR) {
jbradshaw 1:9490836294ea 124 return result;
jbradshaw 1:9490836294ea 125 }
jbradshaw 0:e4a10ed6eb92 126 result = writeReg(REG_BOOST_VSET, data);
jbradshaw 1:9490836294ea 127 if (result == MAX14720_ERROR) {
jbradshaw 1:9490836294ea 128 return result;
jbradshaw 1:9490836294ea 129 }
jbradshaw 0:e4a10ed6eb92 130 if (boostEn == BOOST_ENABLED) {
jbradshaw 0:e4a10ed6eb92 131 data = (boostEn << 3) | (boostEMI << 1) | (boostInd);
jbradshaw 0:e4a10ed6eb92 132 result = writeReg(REG_BOOST_CFG, data);
jbradshaw 0:e4a10ed6eb92 133 }
jbradshaw 1:9490836294ea 134 if (result == MAX14720_ERROR) {
jbradshaw 1:9490836294ea 135 return result;
jbradshaw 1:9490836294ea 136 }
jbradshaw 0:e4a10ed6eb92 137 return 0;
jbradshaw 0:e4a10ed6eb92 138 }
jbradshaw 0:e4a10ed6eb92 139
jbradshaw 0:e4a10ed6eb92 140 //******************************************************************************
jbradshaw 0:e4a10ed6eb92 141 int MAX14720::init() {
jbradshaw 0:e4a10ed6eb92 142 int result;
jbradshaw 0:e4a10ed6eb92 143 char data;
jbradshaw 0:e4a10ed6eb92 144 data = (clkDivEn << 7) | (clkDivSet);
jbradshaw 0:e4a10ed6eb92 145 result = writeReg(REG_BOOST_CDIV, data);
jbradshaw 1:9490836294ea 146 if (result == MAX14720_ERROR) {
jbradshaw 1:9490836294ea 147 return result;
jbradshaw 1:9490836294ea 148 }
jbradshaw 0:e4a10ed6eb92 149 data = (boostISet);
jbradshaw 0:e4a10ed6eb92 150 result = writeReg(REG_BOOST_ISET, data);
jbradshaw 1:9490836294ea 151 if (result == MAX14720_ERROR) {
jbradshaw 1:9490836294ea 152 return result;
jbradshaw 1:9490836294ea 153 }
jbradshaw 0:e4a10ed6eb92 154 if ((MAX14720_BOOST_MIN_MV <= boostMillivolts) &&
jbradshaw 0:e4a10ed6eb92 155 (boostMillivolts <= MAX14720_BOOST_MAX_MV)) {
jbradshaw 0:e4a10ed6eb92 156 data = (boostMillivolts - MAX14720_BOOST_MIN_MV) / MAX14720_BOOST_STEP_MV;
jbradshaw 0:e4a10ed6eb92 157 } else {
jbradshaw 0:e4a10ed6eb92 158 return MAX14720_ERROR;
jbradshaw 0:e4a10ed6eb92 159 }
jbradshaw 0:e4a10ed6eb92 160 result = writeReg(REG_BOOST_VSET, data);
jbradshaw 1:9490836294ea 161 if (result == MAX14720_ERROR) {
jbradshaw 1:9490836294ea 162 return result;
jbradshaw 1:9490836294ea 163 }
jbradshaw 0:e4a10ed6eb92 164 data = (buckMd << 1) | (buckFst);
jbradshaw 0:e4a10ed6eb92 165 result = writeReg(REG_BUCK_CFG, data);
jbradshaw 1:9490836294ea 166 if (result == MAX14720_ERROR) {
jbradshaw 1:9490836294ea 167 return result;
jbradshaw 1:9490836294ea 168 }
jbradshaw 0:e4a10ed6eb92 169 data = (boostHysOff << 7) | (boostPasDsc << 6) | (boostActDsc << 5) |
jbradshaw 0:e4a10ed6eb92 170 (buckPasDsc << 2) | (buckActDsc << 1) | (buckFScl);
jbradshaw 0:e4a10ed6eb92 171 result = writeReg(REG_BBB_EXTRA, data);
jbradshaw 1:9490836294ea 172 if (result == MAX14720_ERROR) {
jbradshaw 1:9490836294ea 173 return result;
jbradshaw 1:9490836294ea 174 }
jbradshaw 0:e4a10ed6eb92 175 // Write Boost Enable Register Last
jbradshaw 0:e4a10ed6eb92 176 data = (boostEn << 3) | (boostEMI << 1) | (boostInd);
jbradshaw 0:e4a10ed6eb92 177 result = writeReg(REG_BOOST_CFG, data);
jbradshaw 1:9490836294ea 178 if (result == MAX14720_ERROR) {
jbradshaw 1:9490836294ea 179 return result;
jbradshaw 1:9490836294ea 180 }
jbradshaw 0:e4a10ed6eb92 181 return 0;
jbradshaw 0:e4a10ed6eb92 182 }
jbradshaw 0:e4a10ed6eb92 183
jbradshaw 0:e4a10ed6eb92 184 //******************************************************************************
jbradshaw 0:e4a10ed6eb92 185 int MAX14720::monSet(monCfg_t monCfg) {
jbradshaw 0:e4a10ed6eb92 186 int result;
jbradshaw 0:e4a10ed6eb92 187 result = writeReg(REG_MON_CFG, monCfg);
jbradshaw 1:9490836294ea 188 if (result == MAX14720_ERROR) {
jbradshaw 1:9490836294ea 189 return result;
jbradshaw 1:9490836294ea 190 }
jbradshaw 0:e4a10ed6eb92 191 return 0;
jbradshaw 0:e4a10ed6eb92 192 }
jbradshaw 0:e4a10ed6eb92 193
jbradshaw 0:e4a10ed6eb92 194 //******************************************************************************
jbradshaw 0:e4a10ed6eb92 195 int MAX14720::shutdown() {
jbradshaw 0:e4a10ed6eb92 196 int result;
jbradshaw 0:e4a10ed6eb92 197 result = writeReg(REG_PWR_OFF, 0xB2);
jbradshaw 1:9490836294ea 198 if (result == MAX14720_ERROR) {
jbradshaw 1:9490836294ea 199 return result;
jbradshaw 1:9490836294ea 200 }
jbradshaw 0:e4a10ed6eb92 201 return 0;
jbradshaw 0:e4a10ed6eb92 202 }
jbradshaw 0:e4a10ed6eb92 203
jbradshaw 0:e4a10ed6eb92 204 //******************************************************************************
jbradshaw 0:e4a10ed6eb92 205 int MAX14720::writeReg(registers_t reg, char value) {
jbradshaw 0:e4a10ed6eb92 206 int result;
jbradshaw 0:e4a10ed6eb92 207 char cmdData[2] = {(char)reg, value};
jbradshaw 0:e4a10ed6eb92 208 result = i2c->write(slaveAddress, cmdData, 2);
jbradshaw 1:9490836294ea 209 if (result != 0) {
jbradshaw 1:9490836294ea 210 return MAX14720_ERROR;
jbradshaw 1:9490836294ea 211 }
jbradshaw 0:e4a10ed6eb92 212 return MAX14720_NO_ERROR;
jbradshaw 0:e4a10ed6eb92 213 }
jbradshaw 0:e4a10ed6eb92 214
jbradshaw 0:e4a10ed6eb92 215 //******************************************************************************
jbradshaw 0:e4a10ed6eb92 216 int MAX14720::readReg(registers_t reg, char *value) {
jbradshaw 0:e4a10ed6eb92 217 int result;
jbradshaw 0:e4a10ed6eb92 218 char cmdData[1] = {(char)reg};
jbradshaw 0:e4a10ed6eb92 219
jbradshaw 0:e4a10ed6eb92 220 result = i2c->write(slaveAddress, cmdData, 1);
jbradshaw 1:9490836294ea 221 if (result != 0) {
jbradshaw 1:9490836294ea 222 return MAX14720_ERROR;
jbradshaw 1:9490836294ea 223 }
jbradshaw 0:e4a10ed6eb92 224 result = i2c->read(slaveAddress, value, 1);
jbradshaw 1:9490836294ea 225 if (result != 0) {
jbradshaw 1:9490836294ea 226 return MAX14720_ERROR;
jbradshaw 1:9490836294ea 227 }
jbradshaw 0:e4a10ed6eb92 228 return MAX14720_NO_ERROR;
jbradshaw 0:e4a10ed6eb92 229 }