mirror of
https://github.com/meshtastic/firmware.git
synced 2025-04-24 17:32:18 +00:00
Fix Ublox M10 Setup (#4842)
There is no EXTINT pin available on the Tdeck, which uses the Ublox M10 GPS. Therefore our previous hack to use that pin makes the GPS not work. That workaround was implemented to fix sleep issues which have now since been fixed with the state machine. This patch restores the state prior to the hack, which is known-working. Additionaly, it was discovered that M10s hate it when you try and save to non-extistent eeprom/SPI flash. This patch creates a new SAVE command for the M10 that fixes this issue. Many thanks to @MisterC925 whose report and testing was essential for this fix. fixes https://github.com/meshtastic/firmware/issues/4625 Co-authored-by: Ken McGuire <kenm@paonia.com>
This commit is contained in:
parent
4fde1ca2a8
commit
b709d47832
@ -664,7 +664,7 @@ bool GPS::setup()
|
|||||||
// As the M10 has no flash, the best we can do to preserve the config is to set it in RAM and BBR.
|
// As the M10 has no flash, the best we can do to preserve the config is to set it in RAM and BBR.
|
||||||
// BBR will survive a restart, and power off for a while, but modules with small backup
|
// BBR will survive a restart, and power off for a while, but modules with small backup
|
||||||
// batteries or super caps will not retain the config for a long power off time.
|
// batteries or super caps will not retain the config for a long power off time.
|
||||||
msglen = makeUBXPacket(0x06, 0x09, sizeof(_message_SAVE), _message_SAVE);
|
msglen = makeUBXPacket(0x06, 0x09, sizeof(_message_SAVE_10), _message_SAVE_10);
|
||||||
_serial_gps->write(UBXscratch, msglen);
|
_serial_gps->write(UBXscratch, msglen);
|
||||||
if (getACK(0x06, 0x09, 2000) != GNSS_RESPONSE_OK) {
|
if (getACK(0x06, 0x09, 2000) != GNSS_RESPONSE_OK) {
|
||||||
LOG_WARN("Unable to save GNSS module configuration.\n");
|
LOG_WARN("Unable to save GNSS module configuration.\n");
|
||||||
|
@ -134,6 +134,7 @@ class GPS : private concurrency::OSThread
|
|||||||
static const uint8_t _message_GGA[];
|
static const uint8_t _message_GGA[];
|
||||||
static const uint8_t _message_PMS[];
|
static const uint8_t _message_PMS[];
|
||||||
static const uint8_t _message_SAVE[];
|
static const uint8_t _message_SAVE[];
|
||||||
|
static const uint8_t _message_SAVE_10[];
|
||||||
|
|
||||||
// VALSET Commands for M10
|
// VALSET Commands for M10
|
||||||
static const uint8_t _message_VALSET_PM[];
|
static const uint8_t _message_VALSET_PM[];
|
||||||
|
@ -323,6 +323,13 @@ const uint8_t GPS::_message_SAVE[] = {
|
|||||||
0x17 // deviceMask: BBR, Flash, EEPROM, and SPI Flash
|
0x17 // deviceMask: BBR, Flash, EEPROM, and SPI Flash
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const uint8_t GPS::_message_SAVE_10[] = {
|
||||||
|
0x00, 0x00, 0x00, 0x00, // clearMask: no sections cleared
|
||||||
|
0xFF, 0xFF, 0x00, 0x00, // saveMask: save all sections
|
||||||
|
0x00, 0x00, 0x00, 0x00, // loadMask: no sections loaded
|
||||||
|
0x01 // deviceMask: only save to BBR
|
||||||
|
};
|
||||||
|
|
||||||
// As the M10 has no flash, the best we can do to preserve the config is to set it in RAM and BBR.
|
// As the M10 has no flash, the best we can do to preserve the config is to set it in RAM and BBR.
|
||||||
// BBR will survive a restart, and power off for a while, but modules with small backup
|
// BBR will survive a restart, and power off for a while, but modules with small backup
|
||||||
// batteries or super caps will not retain the config for a long power off time.
|
// batteries or super caps will not retain the config for a long power off time.
|
||||||
@ -342,36 +349,36 @@ const uint8_t GPS::_message_SAVE[] = {
|
|||||||
// has details on low-power modes
|
// has details on low-power modes
|
||||||
|
|
||||||
/*
|
/*
|
||||||
CFG-PM2 has been replaced by many CFG-PM commands
|
OPERATEMODE E1 2 (0 | 1 | 2)
|
||||||
CFG-PMS has been removed
|
POSUPDATEPERIOD U4 5
|
||||||
|
ACQPERIOD U4 10
|
||||||
CFG-PM-OPERATEMODE E1 (0 | 1 | 2) -> 1 (PSMOO), because sporadic position updates are required instead of continous tracking <10s
|
GRIDOFFSET U4 0
|
||||||
(PSMCT) CFG-PM-POSUPDATEPERIOD U4 -> 0ms, no self-timed wakup because receiver power mode is controlled via "software standby
|
ONTIME U2 1
|
||||||
mode" by legacy UBX-RXM-PMREQ request CFG-PM-ACQPERIOD U4 -> 0ms, because receiver power mode is controlled via "software standby
|
MINACQTIME U1 0
|
||||||
mode" by legacy UBX-RXM-PMREQ request CFG-PM-ONTIME U4 -> 0ms, optional I guess CFG-PM-EXTINTBACKUP L -> 1, force receiver into
|
MAXACQTIME U1 0
|
||||||
BACKUP mode when EXTINT (should be connected to GPS_EN_PIN) pin is "low"
|
DONOTENTEROFF L 1
|
||||||
|
WAITTIMEFIX L 1
|
||||||
This is required because the receiver never enters low power mode if microcontroller is in deep-sleep.
|
UPDATEEPH L 1
|
||||||
Maybe the changing UART_RX levels trigger a wakeup but even with UBX-RXM-PMREQ[12] = 0x00 (all external wakeup sources disabled)
|
EXTINTWAKE L 0 no ext ints
|
||||||
the receivcer remains in aquisition state -> potentially a bug
|
EXTINTBACKUP L 0 no ext ints
|
||||||
|
EXTINTINACTIVE L 0 no ext ints
|
||||||
Workaround: Control the EXTINT pin by the GPS_EN_PIN signal
|
EXTINTACTIVITY U4 0 no ext ints
|
||||||
|
LIMITPEAKCURRENT L 1
|
||||||
As mentioned in the M10 operational issues down below, power save won't allow the use of BDS B1C.
|
|
||||||
CFG-SIGNAL-BDS_B1C_ENA L -> 0
|
|
||||||
|
|
||||||
// Ram layer config message:
|
// Ram layer config message:
|
||||||
// 01 01 00 00 01 00 D0 20 01 02 00 D0 40 00 00 00 00 03 00 D0 40 00 00 00 00 05 00 D0 30 00 00 0D 00 D0 10 01
|
// b5 62 06 8a 26 00 00 01 00 00 01 00 d0 20 02 02 00 d0 40 05 00 00 00 05 00 d0 30 01 00 08 00 d0 10 01 09 00 d0 10 01 10 00 d0
|
||||||
|
// 10 01 8b de
|
||||||
|
|
||||||
// BBR layer config message:
|
// BBR layer config message:
|
||||||
// 01 02 00 00 01 00 D0 20 01 02 00 D0 40 00 00 00 00 03 00 D0 40 00 00 00 00 05 00 D0 30 00 00 0D 00 D0 10 01
|
// b5 62 06 8a 26 00 00 02 00 00 01 00 d0 20 02 02 00 d0 40 05 00 00 00 05 00 d0 30 01 00 08 00 d0 10 01 09 00 d0 10 01 10 00 d0
|
||||||
|
// 10 01 8c 03
|
||||||
*/
|
*/
|
||||||
const uint8_t GPS::_message_VALSET_PM_RAM[] = {0x01, 0x01, 0x00, 0x00, 0x0F, 0x00, 0x31, 0x10, 0x00, 0x01, 0x00, 0xD0, 0x20, 0x01,
|
const uint8_t GPS::_message_VALSET_PM_RAM[] = {0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0xd0, 0x20, 0x02, 0x02, 0x00, 0xd0, 0x40,
|
||||||
0x02, 0x00, 0xD0, 0x40, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0xD0, 0x40, 0x00, 0x00,
|
0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0xd0, 0x30, 0x01, 0x00, 0x08, 0x00, 0xd0,
|
||||||
0x00, 0x00, 0x05, 0x00, 0xD0, 0x30, 0x00, 0x00, 0x0D, 0x00, 0xD0, 0x10, 0x01};
|
0x10, 0x01, 0x09, 0x00, 0xd0, 0x10, 0x01, 0x10, 0x00, 0xd0, 0x10, 0x01};
|
||||||
const uint8_t GPS::_message_VALSET_PM_BBR[] = {0x01, 0x02, 0x00, 0x00, 0x0F, 0x00, 0x31, 0x10, 0x00, 0x01, 0x00, 0xD0, 0x20, 0x01,
|
const uint8_t GPS::_message_VALSET_PM_BBR[] = {0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0xd0, 0x20, 0x02, 0x02, 0x00, 0xd0, 0x40,
|
||||||
0x02, 0x00, 0xD0, 0x40, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0xD0, 0x40, 0x00, 0x00,
|
0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0xd0, 0x30, 0x01, 0x00, 0x08, 0x00, 0xd0,
|
||||||
0x00, 0x00, 0x05, 0x00, 0xD0, 0x30, 0x00, 0x00, 0x0D, 0x00, 0xD0, 0x10, 0x01};
|
0x10, 0x01, 0x09, 0x00, 0xd0, 0x10, 0x01, 0x10, 0x00, 0xd0, 0x10, 0x01};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
CFG-ITFM replaced by 5 valset messages which can be combined into one for RAM and one for BBR
|
CFG-ITFM replaced by 5 valset messages which can be combined into one for RAM and one for BBR
|
||||||
|
Loading…
Reference in New Issue
Block a user