Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: max32625pico maxim-dev mbed-rtos USBDevice
Fork of PICO_USB_I2C_SPI by
Diff: main.cpp
- Revision:
- 17:43cc59f768af
- Parent:
- 16:847788f907eb
- Child:
- 19:1a13f0c067b1
--- a/main.cpp Fri Nov 24 05:37:12 2017 +0000 +++ b/main.cpp Tue Nov 28 05:56:36 2017 +0000 @@ -5,6 +5,9 @@ #include "max32625pico.h" #include "pwrman_regs.h" +#include "USBSerial.h" +USBSerial serial; + static DigitalOut rLED(LED1); static DigitalOut gLED(LED2); static DigitalOut bLED(LED3); @@ -20,7 +23,7 @@ } if (result == E_NO_ERROR) { MXC_PWRMAN->wud_ctrl = MXC_F_PWRMAN_WUD_CTRL_CTRL_ENABLE; - MXC_PWRMAN->wud_ctrl |= (port * 8) + pin; // Pad select + 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); @@ -31,6 +34,84 @@ return result; } +typedef enum { + UNKNOWN, + MAX14720A, + MAX14720B, + MAX14720C, + MAX14720D, + MAX14750A, + MAX14750B, + MAX14750C +} chip_t; + +void showRegisters(char* regs) { + int i; + for (i = 0; i < 0x20; i++) { + serial.printf("%02X ", regs[i]); + } + serial.printf("\r\n"); + if (regs[0] != 0x01) return; + chip_t chipType = UNKNOWN; + if (regs[6] == 0xC0) { + 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; + switch(regs[9]) { + case 0xA7: aOrB = true; break; + case 0x07: chipType = MAX14720C; break; + case 0x47: chipType = MAX14720D; break; + default: break; + } + if (aOrB) { + if (regs[0x0B] == 0x80) { + chipType = MAX14720A; + } else if (regs[0x0B] == 0xE1) { + chipType = MAX14720B; + } + } + } + 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)) { + 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"); + serial.printf("LEN: %s\r\n", regs[0x1B] & 1? "high": "low"); + } +} + +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; @@ -40,22 +121,18 @@ MAX32625PICO pico( MAX32625PICO::IOH_3V3, MAX32625PICO::VIO_IOH, MAX32625PICO::VIO_IOH); - gpioAlternatePullup(P1_6); - gpioAlternatePullup(P1_7); + gpioAlternatePullup(P3_4); + gpioAlternatePullup(P3_5); - I2C i2c(P1_6, P1_7); + I2C i2c(P3_4, P3_5); i2c.frequency(100000); rLED = LED_OFF; gLED = LED_OFF; - char dbuf[32]; while(1) { - Thread::wait(15); - if (i2c.read(0x55, dbuf, 8) == 0) { - gLED = !gLED; - } else { - rLED = !rLED; - } + char c = serial.getc(); + serial.printf("%c\r\n", c); + readMax14750Regs(&i2c); } } \ No newline at end of file