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.
Dependents: C027_BootTest_revb C027_EthernetSniffTest C027_M3_SerialEcho C027_HelloWorld_revb ... more
Fork of C027 by
C027.cpp
00001 /* Platform source file, for the u-blox C27-C20/U20/G35 00002 * mbed Internet of Things Starter Kit 00003 * http://mbed.org/platforms/u-blox-C027/ 00004 * 00005 */ 00006 00007 #include "C027.h" 00008 00009 void mbed_die(void) 00010 { 00011 DigitalOut led(LED); 00012 led = 0; 00013 // Send SOS in Morse Code: // "... --- ... " 00014 const char sos[] = "=.=.=...===.===.===...=.=.=......"; 00015 const int dot = 100; // length of the dot in milliseconds (typical: 50-100 ms) 00016 // lengths of symbols: 00017 // di = dot 00018 // dah = 3 dot 00019 // char space = 3 dot 00020 // word space = 6 dot 00021 for (int i = 0; /* nothing */; i = sos[i+1] ? i+1 : 0) 00022 { 00023 led = (sos[i] == '='); 00024 wait_ms(dot); 00025 } 00026 } 00027 00028 C027::C027(): 00029 mdmEn(MDMEN), mdmRst(MDMRST), mdmPwrOn(MDMPWRON), // MDM CTRL 00030 mdmLvlOe(MDMLVLOE), mdmILvlOe(MDMILVLOE), mdmUsbDet(MDMUSBDET), // MDM IF 00031 gpsEn(GPSEN), gpsRst(GPSRST) // GPS CTRL 00032 { 00033 DigitalOut led(LED); 00034 DigitalOut mdmRts(MDMRTS); 00035 led = 0; // LED1: 0=off 00036 mdmRts = 0; // RTS: 0=ready to send 00037 // we start with the gps disabled 00038 gpsEn = 0; // LDOEN: 1=on,0=off 00039 gpsRst = 0; // RESET: 0=reset,1=operating 00040 gpsIsEnabled = false; 00041 // we start with the modem disabled 00042 mdmLvlOe = 1; // LVLEN: 1=disabled (uart/gpio) 00043 mdmILvlOe = 1; // ILVLEN: 0=disabled (i2c) 00044 mdmUsbDet = 1; // USBDET: 0=disabled 00045 00046 00047 mdmPwrOn = 1; // PWRON: 1=idle, 0=action 00048 mdmEn = 0; // LDOEN: 1=on, 0=off 00049 mdmRst = 1; // RESET: 0=reset, 1=operating 00050 mdmIsEnabled = false; 00051 mdmUseUsb = false; 00052 00053 // The USB insertion and removal, and the Reset Button 00054 // can cause multiple resets to the device. Wait for 00055 // a period of time for this to settle before proceeding 00056 // with turning on various components on the board. 00057 wait_ms(3000); 00058 } 00059 00060 00061 // this is a test function designed to turn on all hardware that 00062 // might leak current into the LISA chip, while disabling the 00063 // LISA chip itself. This is intended to be as harsh as possible, 00064 // and is most relevant to REV B hardware. 00065 void C027::LeakageTest( void ) 00066 { 00067 mdmEn = 0; //disable 00068 gpsEn = 1; //enable 00069 mdmLvlOe = 0; //enable 00070 mdmILvlOe = 1; //enable 00071 mdmPwrOn = 1; //hi (no meaning this context) 00072 } 00073 00074 void C027::mdmPower(bool enable, bool use_mdmuart) 00075 { 00076 if (!mdmIsEnabled && enable) // enable modem 00077 { 00078 mdmUsbDet = ( use_mdmuart? 0:1 ); // USBDET: 0=enable uart, 1=USB Only 00079 wait_ms(10); 00080 mdmEn = 1; // LDOEN: 0=off -> 1=on 00081 wait_ms(50); // 00082 mdmPwrOn = 0; // PWRON: 0=turn on -> 1=idle 00083 wait_ms(300); // power on is triggered by asserting PwrOn 00084 mdmPwrOn = 1; // PWRON: 0=turn on -> 1=idle 00085 mdmIsEnabled = true; 00086 wait_ms(1000); 00087 mdmLvlOe = 0; // LVLEN: 0=enabled; 00088 } 00089 else if (mdmIsEnabled && !enable) // disable modem 00090 { 00091 mdmIsEnabled = false; 00092 // initiate power off sequence by setting PwnOn low for >1s 00093 mdmILvlOe = 0; // ILVLEN: 0=disabled (i2c) 00094 mdmLvlOe = 1; // LVLEN: 1=disabled (uart/gpio) 00095 mdmUsbDet = 0; // USBDET: 0=disabled 00096 mdmPwrOn = 0; // PWRON: 0=active 00097 wait_ms(1000); // send to sleep 00098 mdmPwrOn = 1; // PWRON: 0=active -> 1=idle 00099 // now we can savely switch off the ldo 00100 mdmRst = 0; // RESET: 1=operating -> 0=reset 00101 mdmEn = 0; // LDOEN: 1=on -> 0=off 00102 gpsEn = 0; // LDOEN(gps): 1=on -> 0=off 00103 } 00104 00105 } 00106 00107 void C027::mdmUsbEnable(bool enable) 00108 { 00109 mdmUseUsb = enable; 00110 if (mdmIsEnabled) 00111 mdmUsbDet = mdmUseUsb ? 1 : 0; 00112 } 00113 00114 void C027::mdmReset(void) 00115 { 00116 if (mdmIsEnabled) 00117 { 00118 mdmRst = 0; // RESET: 0=reset 00119 // power on sequence is triggered by reset low 00120 // LISA-U200 50ms 00121 // SARA-G350 50ms 00122 // LISA-C200 300ms 00123 wait_ms(300); 00124 mdmRst = 1; // RESET: 0=reset -> 1=operating 00125 } 00126 } 00127 00128 void C027::mdmWakeup(void) 00129 { 00130 if (mdmIsEnabled) 00131 { 00132 mdmPwrOn = 0; 00133 // wakeup the device by low pulse: 00134 // LISA-U200 50-80us 00135 // SARA-G350 5ms 00136 // LISA-C200 150ms 00137 wait_ms(150); 00138 mdmPwrOn = 1; 00139 } 00140 } 00141 00142 // delete this function? 00143 // pwr_on signal has no function once modem is powered on. 00144 void C027::mdmSleep(void) 00145 { 00146 if (mdmIsEnabled) 00147 { 00148 mdmPwrOn = 0; 00149 // going to sleep is triggerd by low pulse: 00150 // LISA-U200 1000ms 00151 // SARA-G350 n/a 00152 // LISA-C200 n/a 00153 wait_ms(1000); 00154 mdmPwrOn = 1; 00155 } 00156 } 00157 00158 // enable: enable the gps power 00159 // lisa_gps: connect GPS to the LISA chip 00160 void C027::gpsPower(bool enable, bool lisa_gps ) 00161 { 00162 if (!gpsIsEnabled && enable) // enable gps 00163 { 00164 gpsRst = 0; // RESET: 0=reset 00165 gpsEn = 1; // LDOEN: 0=off -> 1=on 00166 wait_ms(1); // wait until stable 00167 gpsRst = 1; // RESET: 0=reset -> 1=operating 00168 gpsIsEnabled = true; 00169 // the gps schould be fully ready after 50ms 00170 if (mdmIsEnabled && lisa_gps ) 00171 { 00172 mdmILvlOe = 0; // ILVLEN: 0=enabled (i2c) 00173 } 00174 else 00175 { 00176 mdmILvlOe = 1; // ILVLEN: 0=enabled (i2c) 00177 } 00178 } 00179 else if (gpsIsEnabled && !enable) // diasble gps 00180 { 00181 gpsIsEnabled = false; 00182 mdmILvlOe = 0; // ILVLEN: 0=disabled (i2c) 00183 gpsRst = 0; // RESET: 1=operating -> 0=reset 00184 gpsEn = 0; // LDOEN: 1=on -> 0=off 00185 } 00186 } 00187 00188 void C027::gpsReset(void) 00189 { 00190 if (gpsIsEnabled) 00191 { 00192 gpsRst = 0; // RESET: 0=reset,1=operating 00193 wait_ms(1); 00194 gpsRst = 1; // RESET: 1=operating,0=reset 00195 } 00196 }
Generated on Wed Jul 13 2022 08:50:56 by
1.7.2
