Paul Jeon / Mbed OS PICO_board_demo

Dependencies:   max32625pico SerialInterface USBDevice

Files at this revision

API Documentation at this revision

Comitter:
switches
Date:
Mon Dec 19 22:45:22 2016 +0000
Parent:
6:fa0134a8ac32
Child:
8:26dc73d09bd9
Commit message:
Updated self test to use USB HID keyboard instead of USB MSD to speed up test. Added checks for micro SD card, BMI160, and button.

Changed in this revision

SDFileSystem.lib Show annotated file Show diff for this revision Revisions of this file
USBMSD_SD.lib Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SDFileSystem.lib	Mon Dec 19 22:45:22 2016 +0000
@@ -0,0 +1,1 @@
+https://developer.mbed.org/teams/mbed/code/SDFileSystem/#8db0d3b02cec
--- a/USBMSD_SD.lib	Mon Dec 19 18:46:28 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-https://developer.mbed.org/users/switches/code/USBMSD_SD/#cce1e689c548
--- a/main.cpp	Mon Dec 19 18:46:28 2016 +0000
+++ b/main.cpp	Mon Dec 19 22:45:22 2016 +0000
@@ -1,6 +1,7 @@
 #include "mbed.h"
 #include "max32630fthr.h"
-#include "USBMSD_SD.h"
+#include "SDFileSystem.h"
+#include "USBKeyboard.h"
 
 MAX32630FTHR pegasus(MAX32630FTHR::VIO_3V3);
 
@@ -10,12 +11,18 @@
 DigitalOut rLED(LED1, LED_ON);
 DigitalOut gLED(LED2, LED_OFF);
 DigitalOut bLED(LED3, LED_OFF);
+DigitalIn button(SW1, PullUp);
 AnalogIn monIn(AIN_0);
 AnalogIn vddbIn(AIN_6);
 AnalogIn vdd18In(AIN_7);
 AnalogIn vdd12In(AIN_8);
 AnalogIn vrtcIn(AIN_9);
 
+SDFileSystem sd(P0_5, P0_6, P0_4, P0_7, "sd");  // mosi, miso, sclk, cs
+USBKeyboard keyboard;
+
+#define BMI160_I2C_ADDR 0xD0
+
 // Function to report failure
 void testFailed()
 {
@@ -26,14 +33,15 @@
     while(1) {
         Thread::wait(500);
         gLED = !gLED;
-    } 
+    }
 }
 
 // Function to read monitor port
-float readMon(MAX14690::monCfg_t monCfg){
+float readMon(MAX14690::monCfg_t monCfg)
+{
     pegasus.max14690.monSet(monCfg, MAX14690::MON_DIV4);
     Thread::wait(5);
-    return (4.8f * monIn);  
+    return (4.8f * monIn);
 }
 
 // main() runs in its own thread in the OS
@@ -41,57 +49,98 @@
 int main()
 {
     float aIn;
+    char dataBuf[2];
+    int ledCnt = 0;
+    
     daplink.printf("Initializing MAX32630FTHR\r\n");
 //    pegasus.init(MAX32630FTHR::VIO_3V3);
     daplink.printf("Checking Supplies\r\n");
     aIn = 2.4f * vdd12In;
     daplink.printf("vdd12 = %f\r\n", aIn);
-    if ((aIn < 1.0f) || (aIn > 1.4f)) { testFailed(); }
+    if ((aIn < 1.0f) || (aIn > 1.4f)) {
+        testFailed();
+    }
     aIn = 2.4f * vdd18In;
     daplink.printf("vdd18 = %f\r\n", aIn);
-    if ((aIn < 1.6f) || (aIn > 2.0f)) { testFailed(); }
+    if ((aIn < 1.6f) || (aIn > 2.0f)) {
+        testFailed();
+    }
     aIn = 4.8f * vddbIn;
     daplink.printf("vddb = %f\r\n", aIn);
-    if ((aIn < 3.0f) || (aIn > 3.6f)) { testFailed(); }
+    if ((aIn < 3.0f) || (aIn > 3.6f)) {
+        testFailed();
+    }
     aIn = 2.4f * vrtcIn;
     daplink.printf("vrtc = %f\r\n", aIn);
-    if ((aIn < 1.6f) || (aIn > 2.0f)) { testFailed(); }
+    if ((aIn < 1.6f) || (aIn > 2.0f)) {
+        testFailed();
+    }
     aIn = readMon(MAX14690::MON_SYS);
     daplink.printf("sys = %f\r\n", aIn);
-    if ((aIn < 3.0f) || (aIn > 5.0f)) { testFailed(); }
+    if ((aIn < 3.0f) || (aIn > 5.0f)) {
+        testFailed();
+    }
     aIn = readMon(MAX14690::MON_BUCK1);
     daplink.printf("buck1 = %f\r\n", aIn);
-    if ((aIn < 1.0f) || (aIn > 1.4f)) { testFailed(); }
+    if ((aIn < 1.0f) || (aIn > 1.4f)) {
+        testFailed();
+    }
     aIn = readMon(MAX14690::MON_BUCK2);
     daplink.printf("buck2 = %f\r\n", aIn);
-    if ((aIn < 1.6f) || (aIn > 2.0f)) { testFailed(); }
+    if ((aIn < 1.6f) || (aIn > 2.0f)) {
+        testFailed();
+    }
     aIn = readMon(MAX14690::MON_LDO1);
     daplink.printf("ldo1 = %f\r\n", aIn);
-    if ((aIn < 1.6f) || (aIn > 2.0f)) { testFailed(); }
+    if ((aIn < 1.6f) || (aIn > 2.0f)) {
+        testFailed();
+    }
     aIn = readMon(MAX14690::MON_LDO2);
     daplink.printf("ldo2 = %f\r\n", aIn);
-    if ((aIn < 3.0f) || (aIn > 3.6f)) { testFailed(); }
+    if ((aIn < 3.0f) || (aIn > 3.6f)) {
+        testFailed();
+    }
     aIn = readMon(MAX14690::MON_LDO3);
     daplink.printf("ldo3 = %f\r\n", aIn);
     aIn = readMon(MAX14690::MON_LDO3);
 
-    gLED = LED_ON;
+    bLED = LED_ON;
 
-    USBMSD_SD sd(P0_5, P0_6, P0_4, P0_7);  // mosi, miso, sclk, cs
+    daplink.printf("Checking micro SD Card\r\n");
+    FILE *fp = fopen("/sd/myfile.txt", "r");
+    if(fp == NULL) {
+        daplink.printf("Unable to open 'myfile.txt'\r\n");
+        testFailed();
+    }
+    daplink.printf("micro SD Card present\r\n");
     rLED = LED_OFF;
 
-    bLED = LED_ON;
+    daplink.printf("Checking BMI160\r\n");
+    dataBuf[0] = 0x00;
+    if (pegasus.i2c.write(BMI160_I2C_ADDR, dataBuf, 1, 1) != 0) testFailed();
+    if (pegasus.i2c.read(BMI160_I2C_ADDR, dataBuf, 1) != 0) testFailed();
+    if (dataBuf[0] != 0xD1) testFailed();
+    daplink.printf("BMI160 present\r\n");
+    gLED = LED_ON;
+
+    
+
     daplink.printf("Self Test Passed\r\n");
-        
+    rLED = LED_ON;
+    gLED = LED_ON;
+    bLED = LED_ON;
+
     while (true) {
-        Thread::wait(500);
-        rLED = LED_OFF;
-        gLED = LED_ON;
-        bLED = LED_OFF;
-        Thread::wait(500);
-        rLED = LED_ON;
-        gLED = LED_ON;
-        bLED = LED_ON;
+        if (!button) {
+            keyboard.mediaControl(KEY_MUTE);
+            ledCnt++;
+            rLED = (ledCnt & 1);
+            gLED = (ledCnt & 2);
+            bLED = (ledCnt & 4);
+            Thread::wait(500);
+        } else {
+            Thread::wait(50);
+        }
     }
 }