Board support library for C027

Dependents:   IoTWorkshopLCD IoTWorkshopBuzzer IoTWorkshopSensors C027_USSDTest ... more

Fork of C027 by u-blox

/media/uploads/ublox/c027_pinout_new.png

Committer:
mazgch
Date:
Wed Nov 06 10:23:53 2013 +0000
Revision:
10:bc9e2eb5daa8
Parent:
9:7e038529bfff
Child:
11:722101675ce4
need to wait after reset (avoid using USB too early on LISA-U)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mazgch 2:b7bd3660ff64 1 /* Platform source file, for the u-blox C27-C20/U20/G35
mazgch 2:b7bd3660ff64 2 * mbed Internet of Things Starter Kit
mazgch 2:b7bd3660ff64 3 * http://mbed.org/platforms/u-blox-C027/
mazgch 2:b7bd3660ff64 4 *
mazgch 2:b7bd3660ff64 5 */
mazgch 2:b7bd3660ff64 6
mazgch 2:b7bd3660ff64 7 #include "C027.h"
mazgch 2:b7bd3660ff64 8
mazgch 2:b7bd3660ff64 9 void mbed_die(void)
mazgch 2:b7bd3660ff64 10 {
mazgch 8:a356376db984 11 DigitalOut led(LED);
mazgch 2:b7bd3660ff64 12 for (;;)
mazgch 2:b7bd3660ff64 13 {
mazgch 2:b7bd3660ff64 14 // nothing to do here
mazgch 8:a356376db984 15 led = 0;
mazgch 8:a356376db984 16 wait_ms(200);
mazgch 8:a356376db984 17 led = 1;
mazgch 8:a356376db984 18 wait_ms(200);
mazgch 2:b7bd3660ff64 19 }
mazgch 2:b7bd3660ff64 20 }
mazgch 2:b7bd3660ff64 21
mazgch 6:e11bf54dd344 22 C027::C027() :
mazgch 10:bc9e2eb5daa8 23 mdmEn(MDMEN), mdmRst(MDMRST), mdmPwrOn(MDMPWRON), // MDM CTRL
mazgch 8:a356376db984 24 mdmRts(MDMRTS), mdmLvlOe(MDMLVLOE), mdmUsbDet(MDMUSBDET), // MDM IF
mazgch 8:a356376db984 25 gpsEn(GPSEN), gpsRst(GPSRST) // GPS CTRL
mazgch 6:e11bf54dd344 26 {
mazgch 7:e3eab86f1de9 27 // we start with the gps disabled
mazgch 8:a356376db984 28 gpsEn = 0; // LDOEN: 1=on,0=off
mazgch 8:a356376db984 29 gpsRst = 0; // RESET: 0=reset,1=operating
mazgch 6:e11bf54dd344 30 gpsIsEnabled = false;
mazgch 7:e3eab86f1de9 31 // we start with the modem disabled
mazgch 8:a356376db984 32 mdmLvlOe = 1; // LVLEN: 1=disabled
mazgch 8:a356376db984 33 mdmUsbDet = 0; // USBDET: 0=disabled
mazgch 8:a356376db984 34 mdmPwrOn = 1; // PWRON: 1=idle, 0=action
mazgch 8:a356376db984 35 mdmRts = 0; // RTS. 0=ready to send
mazgch 8:a356376db984 36 mdmEn = 0; // LDOEN: 1=on, 0=off
mazgch 8:a356376db984 37 mdmRst = 0; // RESET: 0=reset, 1=operating
mazgch 6:e11bf54dd344 38 mdmIsEnabled = false;
mazgch 6:e11bf54dd344 39 }
mazgch 6:e11bf54dd344 40
mazgch 6:e11bf54dd344 41 void C027::mdmPower(bool enable)
mazgch 6:e11bf54dd344 42 {
mazgch 7:e3eab86f1de9 43 if (!mdmIsEnabled && enable) // enable modem
mazgch 6:e11bf54dd344 44 {
mazgch 7:e3eab86f1de9 45 #ifdef C027_REVA
mazgch 7:e3eab86f1de9 46 // we need the gps ldo for the level shifters of the modem
mazgch 8:a356376db984 47 gpsEn = 1; // LDOEN(gps): 0=off -> 1=on
mazgch 7:e3eab86f1de9 48 #endif
mazgch 8:a356376db984 49 mdmPwrOn = 1; // PWRON: 1=idle
mazgch 8:a356376db984 50 mdmEn = 0; // LDOEN: 0=off
mazgch 8:a356376db984 51 mdmRst = 0; // RESET: 0=reset
mazgch 8:a356376db984 52 mdmLvlOe = 1; // LVLEN: 1=disabled
mazgch 8:a356376db984 53 mdmUsbDet = 0; // USBDET: 0=disabled
mazgch 8:a356376db984 54 wait_ms( 10); // wait until supply switched off
mazgch 8:a356376db984 55 mdmEn = 1; // LDOEN: 0=off -> 1=on
mazgch 8:a356376db984 56 wait_ms( 10); // wait until supply stable and on
mazgch 8:a356376db984 57 wait_ms(300); // power on sequence is triggered by keeping reset 50ms-300ms low
mazgch 8:a356376db984 58 mdmRst = 1; // RESET: 0=reset -> 1=operating
mazgch 8:a356376db984 59 mdmLvlOe = 0; // LVLEN: 0=enabled
mazgch 8:a356376db984 60 mdmUsbDet = 1; // USBDET: 1=enabled
mazgch 7:e3eab86f1de9 61 mdmIsEnabled = true;
mazgch 10:bc9e2eb5daa8 62 // the interfaces of the modem should be fully ready after a certain period
mazgch 10:bc9e2eb5daa8 63 // LISA-U200 5000ms
mazgch 10:bc9e2eb5daa8 64 // SARA-G350 3000ms
mazgch 10:bc9e2eb5daa8 65 // LISA-C200
mazgch 10:bc9e2eb5daa8 66 wait_ms(1000);
mazgch 7:e3eab86f1de9 67 }
mazgch 7:e3eab86f1de9 68 else if (mdmIsEnabled && !enable) // disable modem
mazgch 7:e3eab86f1de9 69 {
mazgch 7:e3eab86f1de9 70 mdmIsEnabled = false;
mazgch 7:e3eab86f1de9 71 // initiate power off sequence by setting PwnOn low for >1s
mazgch 8:a356376db984 72 mdmLvlOe = 1; // LVLEN: 1=disabled
mazgch 8:a356376db984 73 mdmUsbDet = 0; // USBDET: 0=disabled
mazgch 8:a356376db984 74 mdmPwrOn = 0; // PWRON: 0=active
mazgch 8:a356376db984 75 wait_ms(1000); // send to sleep
mazgch 8:a356376db984 76 mdmPwrOn = 1; // PWRON: 0=active -> 1=idle
mazgch 7:e3eab86f1de9 77 // now we can savely switch off the ldo
mazgch 8:a356376db984 78 mdmRst = 0; // RESET: 1=operating -> 0=reset
mazgch 8:a356376db984 79 mdmEn = 0; // LDOEN: 1=on -> 0=off
mazgch 7:e3eab86f1de9 80 #ifdef C027_REVA
mazgch 7:e3eab86f1de9 81 // the gps ldo may no longer be needed level shifters of the modem
mazgch 7:e3eab86f1de9 82 // so we switch it off if the gps is not enabled
mazgch 7:e3eab86f1de9 83 if (!gpsIsEnabled)
mazgch 7:e3eab86f1de9 84 gpsEn = 0; // LDOEN(gps): 1=on -> 0=off
mazgch 7:e3eab86f1de9 85 #endif
mazgch 6:e11bf54dd344 86 }
mazgch 6:e11bf54dd344 87 }
mazgch 6:e11bf54dd344 88
mazgch 6:e11bf54dd344 89 void C027::mdmReset(void)
mazgch 6:e11bf54dd344 90 {
mazgch 8:a356376db984 91 if (mdmIsEnabled)
mazgch 8:a356376db984 92 {
mazgch 8:a356376db984 93 mdmRst = 0; // RESET: 0=reset
mazgch 8:a356376db984 94 // power on sequence is triggered by reset low
mazgch 8:a356376db984 95 // LISA-U200 50ms
mazgch 8:a356376db984 96 // SARA-G350 50ms
mazgch 8:a356376db984 97 // LISA-C200 300ms
mazgch 8:a356376db984 98 wait_ms(300);
mazgch 8:a356376db984 99 mdmRst = 1; // RESET: 0=reset -> 1=operating
mazgch 8:a356376db984 100 }
mazgch 8:a356376db984 101 }
mazgch 8:a356376db984 102
mazgch 8:a356376db984 103 void C027::mdmWakeup(void)
mazgch 8:a356376db984 104 {
mazgch 6:e11bf54dd344 105 if (mdmIsEnabled)
mazgch 6:e11bf54dd344 106 {
mazgch 8:a356376db984 107 mdmPwrOn = 0;
mazgch 8:a356376db984 108 // wakeup the device by low pulse:
mazgch 8:a356376db984 109 // LISA-U200 50-80us
mazgch 8:a356376db984 110 // SARA-G350 5ms
mazgch 8:a356376db984 111 // LISA-C200 150ms
mazgch 8:a356376db984 112 wait_ms(150);
mazgch 8:a356376db984 113 mdmPwrOn = 1;
mazgch 6:e11bf54dd344 114 }
mazgch 8:a356376db984 115 }
mazgch 8:a356376db984 116
mazgch 8:a356376db984 117 void C027::mdmSleep(void)
mazgch 8:a356376db984 118 {
mazgch 8:a356376db984 119 if (mdmIsEnabled)
mazgch 8:a356376db984 120 {
mazgch 8:a356376db984 121 mdmPwrOn = 0;
mazgch 8:a356376db984 122 // going to sleep is triggerd by low pulse:
mazgch 8:a356376db984 123 // LISA-U200 1000ms
mazgch 8:a356376db984 124 // SARA-G350 n/a
mazgch 8:a356376db984 125 // LISA-C200 n/a
mazgch 8:a356376db984 126 wait_ms(1000);
mazgch 8:a356376db984 127 mdmPwrOn = 1;
mazgch 8:a356376db984 128 }
mazgch 7:e3eab86f1de9 129 }
mazgch 7:e3eab86f1de9 130
mazgch 7:e3eab86f1de9 131 void C027::gpsPower(bool enable)
mazgch 7:e3eab86f1de9 132 {
mazgch 7:e3eab86f1de9 133 if (!gpsIsEnabled && enable) // enable gps
mazgch 7:e3eab86f1de9 134 {
mazgch 7:e3eab86f1de9 135 gpsRst = 0; // RESET: 0=reset
mazgch 7:e3eab86f1de9 136 gpsEn = 1; // LDOEN: 0=off -> 1=on
mazgch 7:e3eab86f1de9 137 wait_ms(1); // wait until stable
mazgch 7:e3eab86f1de9 138 gpsRst = 1; // RESET: 0=reset -> 1=operating
mazgch 7:e3eab86f1de9 139 gpsIsEnabled = true;
mazgch 7:e3eab86f1de9 140 // the gps schould be fully ready after 50ms
mazgch 7:e3eab86f1de9 141 }
mazgch 7:e3eab86f1de9 142 else if (gpsIsEnabled && !enable) // diasble gps
mazgch 7:e3eab86f1de9 143 {
mazgch 7:e3eab86f1de9 144 gpsIsEnabled = false;
mazgch 7:e3eab86f1de9 145 gpsRst = 0; // RESET: 1=operating -> 0=reset
mazgch 7:e3eab86f1de9 146 #ifdef C027_REVA
mazgch 7:e3eab86f1de9 147 // the gps ldo may have to remain enabled for the level shifters of the modem
mazgch 7:e3eab86f1de9 148 if (!mdmIsEnabled)
mazgch 7:e3eab86f1de9 149 gpsEn = 0; // LDOEN: 1=on -> 0=off
mazgch 7:e3eab86f1de9 150 #else
mazgch 7:e3eab86f1de9 151 gpsEn = 0; // LDOEN: 1=on -> 0=off
mazgch 7:e3eab86f1de9 152 #endif
mazgch 7:e3eab86f1de9 153 }
mazgch 6:e11bf54dd344 154 }
mazgch 6:e11bf54dd344 155
mazgch 6:e11bf54dd344 156 void C027::gpsReset(void)
mazgch 6:e11bf54dd344 157 {
mazgch 6:e11bf54dd344 158 if (gpsIsEnabled)
mazgch 6:e11bf54dd344 159 {
mazgch 6:e11bf54dd344 160 gpsRst = 0; // RESET: 0=reset,1=operating
mazgch 6:e11bf54dd344 161 wait_ms(1);
mazgch 6:e11bf54dd344 162 gpsRst = 1; // RESET: 1=operating,0=reset
mazgch 6:e11bf54dd344 163 }
mazgch 6:e11bf54dd344 164 }