Sean Burford / i2c_pullup

Dependencies:   max32625pico maxim-dev mbed-rtos USBDevice

Fork of PICO_USB_I2C_SPI by Greg Steiert

Files at this revision

API Documentation at this revision

Comitter:
seanburford
Date:
Sat Dec 30 05:31:11 2017 +0000
Parent:
19:1a13f0c067b1
Commit message:
Start SWIN voltage measurement with startBatV()

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
max14750.lib Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Tue Nov 28 06:07:43 2017 +0000
+++ b/main.cpp	Sat Dec 30 05:31:11 2017 +0000
@@ -1,9 +1,7 @@
 #include "mbed.h"
-#include "rtos.h"
 
-#include "gpio_api.h"
 #include "max32625pico.h"
-#include "pwrman_regs.h"
+#include "max14750.h"
 
 #include "USBSerial.h"
 USBSerial serial;
@@ -12,86 +10,27 @@
 static DigitalOut gLED(LED2);
 static DigitalOut bLED(LED3);
 
-int gpioAlternatePullup(PinName name) {
-    // Enable high resistance pullups per AN6350 section 5.2.4.1
-    int result = E_NO_ERROR;
-    unsigned int port = PINNAME_TO_PORT(name);
-    unsigned int pin = PINNAME_TO_PIN(name);
-    MXC_IOMAN->wud_req0 |= ((1 << pin) << (port << 3));  // pinmask
-    if (MXC_IOMAN->wud_ack0 != MXC_IOMAN->wud_req0) {
-        result = E_BUSY;
-    }
-    if (result == E_NO_ERROR) {
-        MXC_PWRMAN->wud_ctrl = MXC_F_PWRMAN_WUD_CTRL_CTRL_ENABLE;
-        MXC_PWRMAN->wud_ctrl |= (port << 3) + pin;  // Pad select
-        MXC_PWRMAN->wud_ctrl &= ~(MXC_F_PWRMAN_WUD_CTRL_PAD_MODE);
-        MXC_PWRMAN->wud_ctrl |= (MXC_E_PWRMAN_PAD_MODE_WEAK_HI_LO <<
-                                 MXC_F_PWRMAN_WUD_CTRL_PAD_MODE_POS);
-        MXC_PWRMAN->wud_pulse0 = 1;
-    }
-    MXC_PWRMAN->wud_ctrl = 0;
-    MXC_IOMAN->wud_req0 = 0;
-    return result;
-}
 
-typedef enum {
-    UNKNOWN,
-    MAX14720A,
-    MAX14720B,
-    MAX14720C,
-    MAX14720D,
-    MAX14750A,
-    MAX14750B,
-    MAX14750C
-} chip_t;
-
-void showRegisters(char* regs) {
-    // Datasheet table 28 "Register Default Values"
-    int i;
-    for (i = 0; i < 0x20; i++) {
-        serial.printf("%02X ", regs[i]);
+void readMax14750Regs(MAX14750* max14750) {
+    char regs[0x20] = {};
+    if (max14750->readRegs(regs) != E_NO_ERROR) return;
+    for (int i = 0; i < 32; i++) {
+        serial.printf("%02X:%02X ", i, (int)regs[i]);
     }
     serial.printf("\r\n");
-    if (regs[0] != 0x01) return;
-    chip_t chipType = UNKNOWN;
-    // regs[6] BoostCfg
-    if (regs[6] == 0xC0) {
-        // regs[7] BuckVSet
-        switch(regs[7]) {
-        case 0x08: chipType = MAX14750A; break;
-        case 0x20: chipType = MAX14750B; break;
-        case 0x0A: chipType = MAX14750C; break;
-        default: break;
-        }
-    } else if (regs[6] == 0xE0) {
-        bool aOrB = false;
-        // regs[9] BuckISet
-        switch(regs[9]) {
-        case 0xA7: aOrB = true; break;
-        case 0x07: chipType = MAX14720C; break;
-        case 0x47: chipType = MAX14720D; break;
-        default: break;
-        }
-        if (aOrB) {
-            // regs[B] LDOCfg
-            if (regs[0x0B] == 0x80) {
-                chipType = MAX14720A;
-            } else if (regs[0x0B] == 0xE1) {
-                chipType = MAX14720B;
-            }
-        }
+    MAX14750::chip_t chipType = max14750->identify(regs);
+    switch(chipType) {
+    case MAX14750::MAX14750A: serial.printf("MAX14750A\r\n"); break;
+    case MAX14750::MAX14750B: serial.printf("MAX14750B\r\n"); break;
+    case MAX14750::MAX14750C: serial.printf("MAX14750C\r\n"); break;
+    case MAX14750::MAX14720A: serial.printf("MAX14720A\r\n"); break;
+    case MAX14750::MAX14720B: serial.printf("MAX14720B\r\n"); break;
+    case MAX14750::MAX14720C: serial.printf("MAX14720C\r\n"); break;
+    case MAX14750::MAX14720D: serial.printf("MAX14720D\r\n"); break;
     }
-    switch(chipType) {
-    case MAX14750A: serial.printf("MAX14750A\r\n"); break;
-    case MAX14750B: serial.printf("MAX14750B\r\n"); break;
-    case MAX14750C: serial.printf("MAX14750C\r\n"); break;
-    case MAX14720A: serial.printf("MAX14720A\r\n"); break;
-    case MAX14720B: serial.printf("MAX14720B\r\n"); break;
-    case MAX14720C: serial.printf("MAX14720C\r\n"); break;
-    case MAX14720D: serial.printf("MAX14720D\r\n"); break;
-    }
-    if ((chipType == MAX14750A) || (chipType == MAX14750B) ||
-        (chipType == MAX14750C)) {
+    if ((chipType == MAX14750::MAX14750A) ||
+        (chipType == MAX14750::MAX14750B) ||
+        (chipType == MAX14750::MAX14750C)) {
         serial.printf("SWIN: %s\r\n", regs[0x1B] & 8? "high": "low");
         serial.printf("HVEN: %s\r\n", regs[0x1B] & 4? "high": "low");
         serial.printf("BEN:  %s\r\n", regs[0x1B] & 2? "high": "low");
@@ -99,24 +38,6 @@
     }
 }
 
-void readMax14750Regs(I2C* i2c) {
-    const int addr = 0x54;
-    char buf[0x20] = {};
-    // Request register 0.
-    buf[0] = 0x00;
-    bool writeFailed = i2c->write(addr, (char*)&buf, 1, false);
-    if (writeFailed) {
-        serial.printf("i2c write 0x54 failed\r\n");
-        return;
-    }
-    // Read 32 register values.
-    if (i2c->read(addr + 1, (char*)(&buf[0]), 0x20, false) != 0) {
-        serial.printf("i2c read 0x55 failed\r\n");
-        return;
-    }
-    showRegisters(buf);
-}
-
 int main()
 {
     rLED = LED_ON;
@@ -126,11 +47,8 @@
     MAX32625PICO pico(
         MAX32625PICO::IOH_3V3, MAX32625PICO::VIO_IOH, MAX32625PICO::VIO_IOH);
 
-    gpioAlternatePullup(P3_4);
-    gpioAlternatePullup(P3_5);
-
-    I2C i2c(P3_4, P3_5);
-    i2c.frequency(100000);
+    MAX14750 max14750;
+    max14750.init(P3_4, P3_5);
 
     rLED = LED_OFF;
     gLED = LED_OFF;
@@ -138,6 +56,10 @@
     while(1) {
         char c = serial.getc();
         serial.printf("%c\r\n", c);
-        readMax14750Regs(&i2c);
+        if (c == 'v') {
+            max14750.startBatV();
+        } else {
+            readMax14750Regs(&max14750);
+        }
     }
 }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/max14750.lib	Sat Dec 30 05:31:11 2017 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/seanburford/code/max14750/#3b5d9c4e6882