This program reads the voltages on the board to ensure they are operating correctly and it implements a USB MSD card reader to verify USB and microSD connectivity.
Dependencies: USBDevice SDFileSystem max32630fthr mbed
Fork of FTHR_USBMSD_Demo by
main.cpp@8:4bb2ec578490, 2017-02-03 (annotated)
- Committer:
- switches
- Date:
- Fri Feb 03 22:43:55 2017 +0000
- Revision:
- 8:4bb2ec578490
- Parent:
- 7:62efbc5411c8
replaced dev library with official libarary
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
switches | 0:60a522ae2e35 | 1 | #include "mbed.h" |
switches | 1:464c8b3634dc | 2 | #include "max32630fthr.h" |
switches | 7:62efbc5411c8 | 3 | #include "SDFileSystem.h" |
switches | 7:62efbc5411c8 | 4 | #include "USBKeyboard.h" |
switches | 0:60a522ae2e35 | 5 | |
switches | 6:fa0134a8ac32 | 6 | MAX32630FTHR pegasus(MAX32630FTHR::VIO_3V3); |
switches | 3:7264c8044625 | 7 | |
switches | 4:1c6819a42db0 | 8 | // Hardware serial port over DAPLink |
switches | 4:1c6819a42db0 | 9 | Serial daplink(P2_1, P2_0); |
switches | 4:1c6819a42db0 | 10 | |
switches | 4:1c6819a42db0 | 11 | DigitalOut rLED(LED1, LED_ON); |
switches | 4:1c6819a42db0 | 12 | DigitalOut gLED(LED2, LED_OFF); |
switches | 4:1c6819a42db0 | 13 | DigitalOut bLED(LED3, LED_OFF); |
switches | 7:62efbc5411c8 | 14 | DigitalIn button(SW1, PullUp); |
switches | 4:1c6819a42db0 | 15 | AnalogIn monIn(AIN_0); |
switches | 4:1c6819a42db0 | 16 | AnalogIn vddbIn(AIN_6); |
switches | 4:1c6819a42db0 | 17 | AnalogIn vdd18In(AIN_7); |
switches | 4:1c6819a42db0 | 18 | AnalogIn vdd12In(AIN_8); |
switches | 4:1c6819a42db0 | 19 | AnalogIn vrtcIn(AIN_9); |
switches | 4:1c6819a42db0 | 20 | |
switches | 7:62efbc5411c8 | 21 | SDFileSystem sd(P0_5, P0_6, P0_4, P0_7, "sd"); // mosi, miso, sclk, cs |
switches | 7:62efbc5411c8 | 22 | USBKeyboard keyboard; |
switches | 7:62efbc5411c8 | 23 | |
switches | 7:62efbc5411c8 | 24 | #define BMI160_I2C_ADDR 0xD0 |
switches | 7:62efbc5411c8 | 25 | |
switches | 4:1c6819a42db0 | 26 | // Function to report failure |
switches | 4:1c6819a42db0 | 27 | void testFailed() |
switches | 4:1c6819a42db0 | 28 | { |
switches | 4:1c6819a42db0 | 29 | daplink.printf("\r\n! Test Failed !\r\n"); |
switches | 4:1c6819a42db0 | 30 | rLED = LED_ON; |
switches | 4:1c6819a42db0 | 31 | gLED = LED_OFF; |
switches | 4:1c6819a42db0 | 32 | bLED = LED_OFF; |
switches | 4:1c6819a42db0 | 33 | while(1) { |
switches | 8:4bb2ec578490 | 34 | wait_ms(500); |
switches | 4:1c6819a42db0 | 35 | gLED = !gLED; |
switches | 7:62efbc5411c8 | 36 | } |
switches | 4:1c6819a42db0 | 37 | } |
switches | 4:1c6819a42db0 | 38 | |
switches | 4:1c6819a42db0 | 39 | // Function to read monitor port |
switches | 7:62efbc5411c8 | 40 | float readMon(MAX14690::monCfg_t monCfg) |
switches | 7:62efbc5411c8 | 41 | { |
switches | 4:1c6819a42db0 | 42 | pegasus.max14690.monSet(monCfg, MAX14690::MON_DIV4); |
switches | 8:4bb2ec578490 | 43 | wait_ms(5); |
switches | 7:62efbc5411c8 | 44 | return (4.8f * monIn); |
switches | 4:1c6819a42db0 | 45 | } |
switches | 0:60a522ae2e35 | 46 | |
switches | 0:60a522ae2e35 | 47 | // main() runs in its own thread in the OS |
switches | 0:60a522ae2e35 | 48 | // (note the calls to Thread::wait below for delays) |
switches | 0:60a522ae2e35 | 49 | int main() |
switches | 0:60a522ae2e35 | 50 | { |
switches | 4:1c6819a42db0 | 51 | float aIn; |
switches | 7:62efbc5411c8 | 52 | char dataBuf[2]; |
switches | 7:62efbc5411c8 | 53 | int ledCnt = 0; |
switches | 7:62efbc5411c8 | 54 | |
switches | 4:1c6819a42db0 | 55 | daplink.printf("Initializing MAX32630FTHR\r\n"); |
switches | 6:fa0134a8ac32 | 56 | // pegasus.init(MAX32630FTHR::VIO_3V3); |
switches | 4:1c6819a42db0 | 57 | daplink.printf("Checking Supplies\r\n"); |
switches | 4:1c6819a42db0 | 58 | aIn = 2.4f * vdd12In; |
switches | 4:1c6819a42db0 | 59 | daplink.printf("vdd12 = %f\r\n", aIn); |
switches | 7:62efbc5411c8 | 60 | if ((aIn < 1.0f) || (aIn > 1.4f)) { |
switches | 7:62efbc5411c8 | 61 | testFailed(); |
switches | 7:62efbc5411c8 | 62 | } |
switches | 4:1c6819a42db0 | 63 | aIn = 2.4f * vdd18In; |
switches | 4:1c6819a42db0 | 64 | daplink.printf("vdd18 = %f\r\n", aIn); |
switches | 7:62efbc5411c8 | 65 | if ((aIn < 1.6f) || (aIn > 2.0f)) { |
switches | 7:62efbc5411c8 | 66 | testFailed(); |
switches | 7:62efbc5411c8 | 67 | } |
switches | 4:1c6819a42db0 | 68 | aIn = 4.8f * vddbIn; |
switches | 4:1c6819a42db0 | 69 | daplink.printf("vddb = %f\r\n", aIn); |
switches | 7:62efbc5411c8 | 70 | if ((aIn < 3.0f) || (aIn > 3.6f)) { |
switches | 7:62efbc5411c8 | 71 | testFailed(); |
switches | 7:62efbc5411c8 | 72 | } |
switches | 4:1c6819a42db0 | 73 | aIn = 2.4f * vrtcIn; |
switches | 4:1c6819a42db0 | 74 | daplink.printf("vrtc = %f\r\n", aIn); |
switches | 7:62efbc5411c8 | 75 | if ((aIn < 1.6f) || (aIn > 2.0f)) { |
switches | 7:62efbc5411c8 | 76 | testFailed(); |
switches | 7:62efbc5411c8 | 77 | } |
switches | 4:1c6819a42db0 | 78 | aIn = readMon(MAX14690::MON_SYS); |
switches | 4:1c6819a42db0 | 79 | daplink.printf("sys = %f\r\n", aIn); |
switches | 7:62efbc5411c8 | 80 | if ((aIn < 3.0f) || (aIn > 5.0f)) { |
switches | 7:62efbc5411c8 | 81 | testFailed(); |
switches | 7:62efbc5411c8 | 82 | } |
switches | 4:1c6819a42db0 | 83 | aIn = readMon(MAX14690::MON_BUCK1); |
switches | 4:1c6819a42db0 | 84 | daplink.printf("buck1 = %f\r\n", aIn); |
switches | 7:62efbc5411c8 | 85 | if ((aIn < 1.0f) || (aIn > 1.4f)) { |
switches | 7:62efbc5411c8 | 86 | testFailed(); |
switches | 7:62efbc5411c8 | 87 | } |
switches | 4:1c6819a42db0 | 88 | aIn = readMon(MAX14690::MON_BUCK2); |
switches | 4:1c6819a42db0 | 89 | daplink.printf("buck2 = %f\r\n", aIn); |
switches | 7:62efbc5411c8 | 90 | if ((aIn < 1.6f) || (aIn > 2.0f)) { |
switches | 7:62efbc5411c8 | 91 | testFailed(); |
switches | 7:62efbc5411c8 | 92 | } |
switches | 4:1c6819a42db0 | 93 | aIn = readMon(MAX14690::MON_LDO1); |
switches | 4:1c6819a42db0 | 94 | daplink.printf("ldo1 = %f\r\n", aIn); |
switches | 7:62efbc5411c8 | 95 | if ((aIn < 1.6f) || (aIn > 2.0f)) { |
switches | 7:62efbc5411c8 | 96 | testFailed(); |
switches | 7:62efbc5411c8 | 97 | } |
switches | 4:1c6819a42db0 | 98 | aIn = readMon(MAX14690::MON_LDO2); |
switches | 4:1c6819a42db0 | 99 | daplink.printf("ldo2 = %f\r\n", aIn); |
switches | 7:62efbc5411c8 | 100 | if ((aIn < 3.0f) || (aIn > 3.6f)) { |
switches | 7:62efbc5411c8 | 101 | testFailed(); |
switches | 7:62efbc5411c8 | 102 | } |
switches | 4:1c6819a42db0 | 103 | aIn = readMon(MAX14690::MON_LDO3); |
switches | 4:1c6819a42db0 | 104 | daplink.printf("ldo3 = %f\r\n", aIn); |
switches | 4:1c6819a42db0 | 105 | aIn = readMon(MAX14690::MON_LDO3); |
switches | 1:464c8b3634dc | 106 | |
switches | 7:62efbc5411c8 | 107 | bLED = LED_ON; |
switches | 1:464c8b3634dc | 108 | |
switches | 7:62efbc5411c8 | 109 | daplink.printf("Checking micro SD Card\r\n"); |
switches | 7:62efbc5411c8 | 110 | FILE *fp = fopen("/sd/myfile.txt", "r"); |
switches | 7:62efbc5411c8 | 111 | if(fp == NULL) { |
switches | 7:62efbc5411c8 | 112 | daplink.printf("Unable to open 'myfile.txt'\r\n"); |
switches | 7:62efbc5411c8 | 113 | testFailed(); |
switches | 7:62efbc5411c8 | 114 | } |
switches | 7:62efbc5411c8 | 115 | daplink.printf("micro SD Card present\r\n"); |
switches | 1:464c8b3634dc | 116 | rLED = LED_OFF; |
switches | 0:60a522ae2e35 | 117 | |
switches | 7:62efbc5411c8 | 118 | daplink.printf("Checking BMI160\r\n"); |
switches | 7:62efbc5411c8 | 119 | dataBuf[0] = 0x00; |
switches | 7:62efbc5411c8 | 120 | if (pegasus.i2c.write(BMI160_I2C_ADDR, dataBuf, 1, 1) != 0) testFailed(); |
switches | 7:62efbc5411c8 | 121 | if (pegasus.i2c.read(BMI160_I2C_ADDR, dataBuf, 1) != 0) testFailed(); |
switches | 7:62efbc5411c8 | 122 | if (dataBuf[0] != 0xD1) testFailed(); |
switches | 7:62efbc5411c8 | 123 | daplink.printf("BMI160 present\r\n"); |
switches | 7:62efbc5411c8 | 124 | gLED = LED_ON; |
switches | 7:62efbc5411c8 | 125 | |
switches | 7:62efbc5411c8 | 126 | |
switches | 7:62efbc5411c8 | 127 | |
switches | 4:1c6819a42db0 | 128 | daplink.printf("Self Test Passed\r\n"); |
switches | 7:62efbc5411c8 | 129 | rLED = LED_ON; |
switches | 7:62efbc5411c8 | 130 | gLED = LED_ON; |
switches | 7:62efbc5411c8 | 131 | bLED = LED_ON; |
switches | 7:62efbc5411c8 | 132 | |
switches | 0:60a522ae2e35 | 133 | while (true) { |
switches | 7:62efbc5411c8 | 134 | if (!button) { |
switches | 7:62efbc5411c8 | 135 | keyboard.mediaControl(KEY_MUTE); |
switches | 7:62efbc5411c8 | 136 | ledCnt++; |
switches | 8:4bb2ec578490 | 137 | gLED = (ledCnt & 1); |
switches | 8:4bb2ec578490 | 138 | bLED = (ledCnt & 2); |
switches | 8:4bb2ec578490 | 139 | rLED = gLED ^ bLED; |
switches | 8:4bb2ec578490 | 140 | wait_ms(500); |
switches | 7:62efbc5411c8 | 141 | } else { |
switches | 8:4bb2ec578490 | 142 | wait_ms(50); |
switches | 7:62efbc5411c8 | 143 | } |
switches | 0:60a522ae2e35 | 144 | } |
switches | 0:60a522ae2e35 | 145 | } |
switches | 0:60a522ae2e35 | 146 |