Fork to support REVB hardware.

Dependents:   C027_BootTest_revb C027_EthernetSniffTest C027_M3_SerialEcho C027_HelloWorld_revb ... more

Fork of C027 by u-blox

Files at this revision

API Documentation at this revision

Comitter:
mazgch
Date:
Tue Nov 05 21:41:46 2013 +0000
Parent:
7:e3eab86f1de9
Child:
9:7e038529bfff
Commit message:
updating the support library

Changed in this revision

C027.cpp Show annotated file Show diff for this revision Revisions of this file
C027.h Show annotated file Show diff for this revision Revisions of this file
C027_PinNames.h Show annotated file Show diff for this revision Revisions of this file
--- a/C027.cpp	Fri Oct 25 08:46:43 2013 +0000
+++ b/C027.cpp	Tue Nov 05 21:41:46 2013 +0000
@@ -8,34 +8,33 @@
 
 void mbed_die(void)
 {
+    DigitalOut led(LED);
     for (;;)
     {
         // nothing to do here
-        
-        // we do not have fancy leds that 
-        // can be flashed on the C027
+        led = 0;
+        wait_ms(200);
+        led = 1;
+        wait_ms(200);
     }
 }
 
 C027::C027() :
-    mdmEn(MDMEN),
-#ifndef C027_REVA
-                  mdmRst(MDMRST),
-#endif                
-                                  mdmPwrOn(MDMPWRON), mdmRts(MDMRTS),
-    gpsEn(GPSEN), gpsRst(GPSRST)
+    mdmEn(MDMEN),   mdmRst(MDMRST),     mdmPwrOn(MDMPWRON),   // MDM CTRL
+    mdmRts(MDMRTS), mdmLvlOe(MDMLVLOE), mdmUsbDet(MDMUSBDET), // MDM IF
+    gpsEn(GPSEN),   gpsRst(GPSRST)                            // GPS CTRL
 {
     // we start with the gps disabled
-    gpsEn    = 0; // LDOEN: 1=on,0=off
-    gpsRst   = 0; // RESET: 0=reset,1=operating
+    gpsEn     = 0;  // LDOEN:  1=on,0=off
+    gpsRst    = 0;  // RESET:  0=reset,1=operating
     gpsIsEnabled = false;
     // we start with the modem disabled
-    mdmPwrOn = 1; // PWRON: 1=idle,0=action
-    mdmRts   = 0; // RTS.   0=ready to send 
-    mdmEn    = 0; // LDOEN: 1=on,0=off
-#ifndef C027_REVA
-    mdmRst   = 0; // RESET: 0=reset,1=operating
-#endif
+    mdmLvlOe  = 1;  // LVLEN:  1=disabled
+    mdmUsbDet = 0;  // USBDET: 0=disabled
+    mdmPwrOn  = 1;  // PWRON:  1=idle, 0=action
+    mdmRts    = 0;  // RTS.    0=ready to send 
+    mdmEn     = 0;  // LDOEN:  1=on, 0=off
+    mdmRst    = 0;  // RESET:  0=reset, 1=operating
     mdmIsEnabled = false;
 }
 
@@ -45,19 +44,20 @@
     {
 #ifdef C027_REVA
         // we need the gps ldo for the level shifters of the modem
-        gpsEn    = 1;   // LDOEN(gps): 0=off -> 1=on 
-#endif
-        mdmPwrOn = 1;   // PWRON: 1=idle
-        mdmEn    = 0;   // LDOEN: 0=off
-#ifndef C027_REVA
-        mdmRst   = 0;   // RESET: 0=reset
+        gpsEn     = 1;  // LDOEN(gps): 0=off -> 1=on 
 #endif
-        wait_ms(1);     //        wait until stable
-        mdmEn    = 1;   // LDOEN: 0=off -> 1=on
-        wait_ms(50);    //        power on sequence is triggered by keeping reset 50ms low
-#ifndef C027_REVA
-        mdmRst   = 1;   // RESET: 0=reset -> 1=operating
-#endif
+        mdmPwrOn  = 1;  // PWRON:  1=idle
+        mdmEn     = 0;  // LDOEN:  0=off
+        mdmRst    = 0;  // RESET:  0=reset
+        mdmLvlOe  = 1;  // LVLEN:  1=disabled
+        mdmUsbDet = 0;  // USBDET: 0=disabled
+        wait_ms( 10);   //         wait until supply switched off
+        mdmEn     = 1;  // LDOEN:  0=off -> 1=on
+        wait_ms( 10);   //         wait until supply stable and on
+        wait_ms(300);   //         power on sequence is triggered by keeping reset 50ms-300ms low
+        mdmRst    = 1;  // RESET:  0=reset -> 1=operating
+        mdmLvlOe  = 0;  // LVLEN:  0=enabled
+        mdmUsbDet = 1;  // USBDET: 1=enabled
         mdmIsEnabled = true;
         // the modem schould be fully ready after 3000ms
     }
@@ -65,14 +65,14 @@
     {
         mdmIsEnabled = false;
         // initiate power off sequence by setting PwnOn low for >1s
-        mdmPwrOn = 0;   // PWRON: 0=active
-        wait_ms(1000);  
-        mdmPwrOn = 1;   // PWRON: 0=active -> 1=idle
+        mdmLvlOe  = 1;  // LVLEN:  1=disabled
+        mdmUsbDet = 0;  // USBDET: 0=disabled
+        mdmPwrOn  = 0;  // PWRON:  0=active
+        wait_ms(1000);  //         send to sleep
+        mdmPwrOn  = 1;  // PWRON:  0=active -> 1=idle
         // now we can savely switch off the ldo
-#ifndef C027_REVA
-        mdmRst   = 0;   // RESET: 1=operating -> 0=reset
-#endif
-        mdmEn    = 0;   // LDOEN: 1=on -> 0=off
+        mdmRst    = 0;  // RESET:  1=operating -> 0=reset
+        mdmEn     = 0;  // LDOEN:  1=on -> 0=off
 #ifdef C027_REVA
         // the gps ldo may no longer be needed level shifters of the modem
         // so we switch it off if the gps is not enabled
@@ -84,15 +84,44 @@
 
 void C027::mdmReset(void)
 {
-#ifndef C027_REVA
+    if (mdmIsEnabled)
+    {
+        mdmRst   = 0;   // RESET: 0=reset
+        // power on sequence is triggered by reset low
+        // LISA-U200   50ms
+        // SARA-G350   50ms
+        // LISA-C200  300ms
+        wait_ms(300);
+        mdmRst   = 1;   // RESET: 0=reset -> 1=operating
+    }
+}
+
+void C027::mdmWakeup(void)
+{
     if (mdmIsEnabled)
     {
-        // power on sequence is triggered by 50ms reset low
-        mdmRst   = 0;    // RESET: 0=reset,1=operating
-        wait_ms(50);
-        mdmRst   = 1;    // RESET: 1=operating,0=reset
+        mdmPwrOn = 0;
+        // wakeup the device by low pulse: 
+        // LISA-U200 50-80us
+        // SARA-G350     5ms
+        // LISA-C200   150ms 
+        wait_ms(150);   
+        mdmPwrOn = 1;
     }
-#endif
+}
+
+void C027::mdmSleep(void)
+{
+    if (mdmIsEnabled)
+    {
+        mdmPwrOn = 0;
+        // going to sleep is triggerd by low pulse: 
+        // LISA-U200  1000ms
+        // SARA-G350     n/a
+        // LISA-C200     n/a
+        wait_ms(1000);  
+        mdmPwrOn = 1;
+    }
 }
 
 void C027::gpsPower(bool enable)
--- a/C027.h	Fri Oct 25 08:46:43 2013 +0000
+++ b/C027.h	Tue Nov 05 21:41:46 2013 +0000
@@ -22,21 +22,22 @@
 
     void mdmPower(bool enable);
     void mdmReset(void);
+    void mdmWakeup(void);
+    void mdmSleep(void);
     void gpsPower(bool enable);
     void gpsReset(void);
 
 private:
     // modem pins 
-    DigitalOut mdmEn;
-#ifndef C027_REVA
-    DigitalOut mdmRst;
-#endif
-    DigitalOut mdmPwrOn;
-    DigitalOut mdmRts;
-    bool mdmIsEnabled;
+    DigitalOut      mdmEn;
+    DigitalOut      mdmRst;
+    DigitalOut      mdmPwrOn;
+    DigitalOut      mdmRts;
+    DigitalOut      mdmLvlOe;
+    DigitalOut      mdmUsbDet;
+    bool            mdmIsEnabled;
     // gps pins
-    DigitalOut gpsEn;
-    DigitalOut gpsRst;
-    bool gpsIsEnabled;
+    DigitalOut      gpsEn;
+    DigitalOut      gpsRst;
+    bool            gpsIsEnabled;
 };
-
--- a/C027_PinNames.h	Fri Oct 25 08:46:43 2013 +0000
+++ b/C027_PinNames.h	Tue Nov 05 21:41:46 2013 +0000
@@ -41,11 +41,13 @@
 #define MDMUSBDP    (P0_29) // USB D+
 #define MDMUSBDN    (P0_30) // USB D-
 #define MDMUSBCON   (P2_9)  // USB Connect
+#define MDMUSBDET   (P0_7)  // USB Detect (n/a on REV.A board)
 // Control 
 #define MDMEN       (P2_5)  // Supply Control (high = enabled)
 #define MDMPWRON    (P2_6)  // 
 #define MDMGPIO1    (P2_7)  // GPIO1, Network status
 #define MDMRST      (P2_8)  // Reset (active low, set as open drain!)
+#define MDMLVLOE    (P0_8)  // Serial/GPIO Level Shifter Output Enable (n/a on REV.A board)
 
 // PIN header connector
 // for standard-based form factor with expansion board
@@ -82,6 +84,10 @@
 #define SDA         (P0_0) 
 #define SCL         (P0_1)
 
+// LED
+// -----------------------------------------------------------
+#define LED         (P3_25)  // RED LED (n/a on REV.A board)
+
 // CAN (TJA1040)
 // -----------------------------------------------------------
 #define CANRD       (P0_4)
@@ -115,9 +121,5 @@
 
 // Reserved / NC pins 
 // -----------------------------------------------------------
-#define RSVD1       (P0_7)
-#define RSVD2       (P0_8)
-#define RSVD3       (P0_9)
-#define RSVD4       (P3_25)
-#define RSVD5       (P3_26)
-
+#define RSVD1       (P0_9)
+#define RSVD2       (P3_26)