Skip to content
This repository was archived by the owner on Sep 16, 2024. It is now read-only.

Commit 47980f1

Browse files
author
iwahdan88
committed
Merge branch 'husigeza-OTA_update_to_v20'
2 parents f797e7c + a6d011d commit 47980f1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+1423
-345
lines changed

README.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,20 @@ After cloning, make sure to checkout all the submodules:
9191
Finally, before building, export the IDF_PATH variable
9292

9393
$ export IDF_PATH=~/pycom-esp-idf
94+
95+
This repository contains submodules! Clone using the --recursive option:
96+
97+
$ git clone --recursive https://github.com/pycom/pycom-micropython-sigfox.git
98+
99+
Alternatively checkout the modules manually:
100+
101+
$ cd pycom-micropython-sigfox
102+
$ git submodule update --init
103+
104+
``` text
105+
If you updated the repository from a previous revision and/or if switching between branches,<br>
106+
make sure to also update the submodules with the command above.
107+
```
94108

95109
Prior to building the main firmware, you need to build mpy-cross
96110

esp32/Makefile

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ OEM ?= 0
2222
BTYPE ?= release
2323

2424
BUILD = build/$(BOARD)/$(BTYPE)
25+
LTE_LOG_BUFF ?= 0
2526

2627
# by default Secure Boot and Flash Encryption are disabled
2728
SECURE ?= off
@@ -94,6 +95,19 @@ endif
9495
ifeq ($(BOARD), $(filter $(BOARD), SIPY))
9596
LIBS += sigfox/modsigfox_sipy.a
9697
endif
98+
# Enable or Disable LTE_LOG_BUFF
99+
ifeq ($(BOARD), $(filter $(BOARD), GPY FIPY))
100+
ifeq ($(LTE_LOG_BUFF),1)
101+
CFLAGS += -DLTE_LOG
102+
endif #ifeq ($(LTE_LOG_BUFF),1)
103+
endif #ifeq ($(BOARD), $(filter $(BOARD), GPY FIPY))
104+
105+
# Enable or Disable LTE_LOG_BUFF
106+
ifeq ($(BOARD), $(filter $(BOARD), GPY FIPY))
107+
ifeq ($(LTE_DEBUG_BUFF),1)
108+
CFLAGS += -DLTE_DEBUG_BUFF
109+
endif #ifeq ($(LTE_LOG_BUFF),1)
110+
endif #ifeq ($(BOARD), $(filter $(BOARD), GPY FIPY))
97111

98112
B_LIBS = -Lbootloader/lib -Lbootloader -L$(BUILD)/bootloader -L$(ESP_IDF_COMP_PATH)/esp32/ld \
99113
-L$(ESP_IDF_COMP_PATH)/esp32/lib -llog -lcore -lbootloader_support \

esp32/application.mk

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ APP_MODS_SRC_C = $(addprefix mods/,\
140140
machwdt.c \
141141
machrmt.c \
142142
lwipsocket.c \
143+
machtouch.c \
143144
)
144145

145146
APP_MODS_LORA_SRC_C = $(addprefix mods/,\
@@ -167,6 +168,7 @@ APP_UTIL_SRC_C = $(addprefix util/,\
167168
mpirq.c \
168169
mpsleep.c \
169170
timeutils.c \
171+
esp32chipinfo.c \
170172
)
171173

172174
APP_FATFS_SRC_C = $(addprefix fatfs/src/,\

esp32/bootloader/bootloader.h

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,18 @@ typedef struct _boot_info_t
4141
uint32_t crc;
4242
} boot_info_t;
4343

44-
#define IMG_SIZE ((1024 + 512) * 1024)
44+
#define IMG_SIZE_8MB (1980 * 1024)
45+
#define IMG_UPDATE1_OFFSET_8MB (2112 * 1024) // taken from the partitions table
46+
#define OTA_DATA_ADDRESS_8MB (0x1FF000) // calculated from partitions table
47+
48+
#define IMG_SIZE_4MB (1720 * 1024)
49+
#define IMG_UPDATE1_OFFSET_4MB (1792 * 1024) // taken from the partitions table
50+
#define OTA_DATA_ADDRESS_4MB (0x1BE000) // calculated from partitions table
51+
4552
#define OTAA_DATA_SIZE (4 * 1024)
4653
#define OTA_DATA_INDEX 2
4754
#define IMG_FACTORY_OFFSET (64 * 1024)
48-
#define IMG_UPDATE1_OFFSET (1664 * 1024) // taken from the partitions table
55+
4956
#define IMG_UPDATE2_OFFSET (IMG_FACTORY_OFFSET)
5057

5158
#define IMG_STATUS_CHECK 0
@@ -58,7 +65,8 @@ typedef struct _boot_info_t
5865
#define BOOT_VERSION "V0.2"
5966
#define SPI_SEC_SIZE 0x1000
6067

61-
#define PARTITIONS_COUNT 7
68+
#define PARTITIONS_COUNT_8MB 5
69+
#define PARTITIONS_COUNT_4MB 7
6270

6371
#define PART_TYPE_APP 0x00
6472
#define PART_SUBTYPE_FACTORY 0x00

esp32/fatfs/src/drivers/sflash_diskio.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
#include "esp_spi_flash.h"
1616
#include "esp_flash_encrypt.h"
17+
#include "esp32chipinfo.h"
1718

1819
static uint8_t *sflash_block_cache;
1920
static bool sflash_cache_is_dirty;
@@ -43,7 +44,7 @@ static bool sflash_write (void) {
4344
DRESULT sflash_disk_init (void) {
4445
if (!sflash_init_done) {
4546
// this is how we diferentiate flash sizes in Pycom modules
46-
if (esp_get_revision() > 0) {
47+
if (esp32_get_chip_rev() > 0) {
4748
sflash_start_address = SFLASH_START_ADDR_8MB;
4849
sflash_fs_sector_count = SFLASH_FS_SECTOR_COUNT_8MB;
4950
} else {

esp32/frozen/LTE/sqnsupgrade.py

Lines changed: 96 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#!/usr/bin/env python
2-
VERSION = "1.2.3"
2+
VERSION = "1.2.5"
33

44
# Copyright (c) 2019, Pycom Limited.
55
#
@@ -67,6 +67,7 @@ def special_print(self, msg, flush=None, end='\n'):
6767
print(msg, flush=flush, end=end)
6868

6969
def read_rsp(self, size=None, timeout=-1):
70+
time.sleep(.25)
7071
if timeout < 0:
7172
timeout = 20000
7273
elif timeout is None:
@@ -338,15 +339,17 @@ def __get_wait_msg(self, load_fff=True):
338339

339340

340341

341-
def __run(self, file_path=None, baudrate=921600, port=None, resume=False, load_ffh=False, mirror=False, switch_ffh=False, bootrom=False, rgbled=0x050505, debug=False, pkgdebug=False, atneg=True, max_try=10, direct=True, atneg_only=False, info_only=False, expected_smod=None, verbose=False, load_fff=False):
342+
def __run(self, file_path=None, baudrate=921600, port=None, resume=False, load_ffh=False, mirror=False, switch_ffh=False, bootrom=False, rgbled=0x050505, debug=False, pkgdebug=False, atneg=True, max_try=10, direct=True, atneg_only=False, info_only=False, expected_smod=None, verbose=False, load_fff=False, mtools=False):
342343
self.__wait_msg = False
343344
mirror = True if atneg_only else mirror
344345
recover = True if atneg_only else load_ffh
345346
resume = True if mirror or recover or atneg_only or info_only else resume
346347
verbose = True if debug else verbose
347348
load_fff = False if bootrom and switch_ffh else load_fff
349+
target_baudrate = baudrate
348350
baudrate = self.__modem_speed if self.__speed_detected else baudrate
349351
if debug: print('mirror? {} recover? {} resume? {} direct? {} atneg_only? {} bootrom? {} load_fff? {}'.format(mirror, recover, resume, direct, atneg_only, bootrom, load_fff))
352+
if debug: print('baudrate: {} target_baudrate: {}'.format(baudrate, target_baudrate))
350353
abort = True
351354
external = False
352355
self.__serial = None
@@ -416,7 +419,7 @@ def __run(self, file_path=None, baudrate=921600, port=None, resume=False, load_f
416419
if not self.wakeup_modem(baudrate, port, 10, 1, debug):
417420
return False
418421

419-
if not resume:
422+
if (not resume) or mtools:
420423

421424
# bind to AT channel
422425
self.__serial.write(b"AT+BIND=AT\r\n")
@@ -430,17 +433,42 @@ def __run(self, file_path=None, baudrate=921600, port=None, resume=False, load_f
430433
response = self.read_rsp(size=100)
431434
if debug: print("ATE0 returned {}".format(response))
432435

433-
self.__serial.read(100)
436+
self.__serial.read()
434437
if debug: print('Entering upgrade mode...')
435438

439+
if verbose: print("Sending AT+SMLOG?")
440+
self.__serial.write(b'AT+SMLOG?\r\n')
441+
response = self.read_rsp(size=100)
442+
if verbose: print("AT+SMLOG? returned {}".format(response))
443+
436444
self.__serial.write(b"AT+SMOD?\r\n")
437445
response = self.return_pretty_response(self.read_rsp(size=7))
438-
self.__serial.read(100)
439446
if debug: print("AT+SMOD? returned {}".format(response))
440447

448+
if verbose: print('Sending AT+FSRDFILE="/fs/crashdump"')
449+
self.__serial.write(b'AT+FSRDFILE="/fs/crashdump"\r\n')
450+
response = self.read_rsp(size=100)
451+
if verbose: print('AT+FSRDFILE="/fs/crashdump" returned {}'.format(response))
452+
self.__serial.read()
453+
441454
self.__serial.write(b"AT+SQNSUPGRADENTF=\"started\"\r\n")
455+
response = self.read_rsp(size=100)
456+
if verbose: print('AT+SQNSUPGRADENTF="started" returned {}'.format(response))
442457
self.wait_for_modem()
443-
if not load_fff:
458+
459+
if verbose: print('Sending AT+SQNWL="sqndcc",2')
460+
self.__serial.write(b'AT+SQNWL="sqndcc",2\r\n')
461+
response = self.read_rsp(size=100)
462+
if verbose: print('AT+SQNWL="sqndcc",2 returned {}'.format(response))
463+
self.__serial.read(100)
464+
465+
if verbose: print("Sending AT+CFUN=4")
466+
self.__serial.write(b'AT+CFUN=4\r\n')
467+
response = self.read_rsp(size=100)
468+
if verbose: print("AT+CFUN=4 returned {}".format(response))
469+
self.__serial.read(100)
470+
471+
if not (load_fff or mtools):
444472
self.__serial.write(b"AT+SMSWBOOT=3,1\r\n")
445473
resp = self.read_rsp(100)
446474
if debug: print('AT+SMSWBOOT=3,1 returned: {}'.format(resp))
@@ -463,6 +491,23 @@ def __run(self, file_path=None, baudrate=921600, port=None, resume=False, load_f
463491
self.wait_for_modem()
464492
self.__serial.write(b"AT\r\n")
465493

494+
if verbose: print("Sending AT+CFUN=4")
495+
self.__serial.write(b'AT+CFUN=4\r\n')
496+
response = self.read_rsp(size=100)
497+
if verbose: print("AT+CFUN=4 returned {}".format(response))
498+
499+
if verbose: print("Sending AT+SMLOG?")
500+
self.__serial.write(b'AT+SMLOG?\r\n')
501+
response = self.read_rsp(size=100)
502+
if verbose: print("AT+SMLOG? returned {}".format(response))
503+
504+
if verbose: print('Sending AT+FSRDFILE="/fs/crashdump"')
505+
self.__serial.write(b'AT+FSRDFILE="/fs/crashdump"\r\n')
506+
response = self.read_rsp(size=100)
507+
if verbose: print('AT+FSRDFILE="/fs/crashdump" returned {}'.format(response))
508+
self.__serial.read()
509+
510+
466511
else:
467512
self.__serial.read(100)
468513
if debug: print('Entering recovery mode')
@@ -492,10 +537,6 @@ def __run(self, file_path=None, baudrate=921600, port=None, resume=False, load_f
492537
print('Starting STP ON_THE_FLY')
493538

494539
self.__serial.read(100)
495-
if verbose: print("Sending AT+CFUN=4")
496-
resonse = self.__serial.write(b'AT+CFUN=4\r\n')
497-
if verbose: print("AT+CFUN=4 returned {}".format(response))
498-
self.__serial.read(100)
499540

500541
if load_fff:
501542
if debug: print("Sending AT+SMSTPU")
@@ -512,8 +553,11 @@ def __run(self, file_path=None, baudrate=921600, port=None, resume=False, load_f
512553
self.__serial.read()
513554
elif recover and (not direct):
514555
if atneg:
515-
result = self.at_negotiation(baudrate, port, max_try, mirror, atneg_only, debug)
556+
result = self.at_negotiation(baudrate, port, max_try, mirror, atneg_only, debug, target_baudrate)
516557
if result:
558+
baudrate = target_baudrate
559+
self.__modem_speed = target_baudrate
560+
self.__speed_detected = True
517561
if atneg_only:
518562
return True
519563
if mirror:
@@ -671,7 +715,15 @@ def __run(self, file_path=None, baudrate=921600, port=None, resume=False, load_f
671715
time.sleep(0.5)
672716

673717
if 'success' in sqnup_result:
718+
if verbose: print('Sending AT+SQNSUPGRADENTF="success"')
674719
self.__serial.write(b"AT+SQNSUPGRADENTF=\"success\"\r\n")
720+
resonse = self.read_rsp(100)
721+
if verbose: print('AT+SQNSUPGRADENTF="success" returned {}'.format(response))
722+
time.sleep(.25)
723+
if verbose: print('Sending AT+FSRDFILE="/fs/crashdump"')
724+
self.__serial.write(b'AT+FSRDFILE="/fs/crashdump"\r\n')
725+
resonse = self.read_rsp(100)
726+
if verbose: print('AT+FSRDFILE="/fs/crashdump" returned {}'.format(response))
675727
self.__serial.read()
676728
return True
677729
elif sqnup_result is None:
@@ -712,7 +764,11 @@ def wakeup_modem(self, baudrate, port, max_try, delay, debug, msg='Attempting AT
712764
MAX_TRY = max_try
713765
count = 0
714766
if msg is not None:
715-
print(msg)
767+
if debug:
768+
print(msg + ' [{}]'.format(baudrate))
769+
else:
770+
print(msg)
771+
716772
self.__serial.read()
717773
self.__serial.write(b"AT\r\n")
718774
response = self.read_rsp(size=25)
@@ -729,10 +785,13 @@ def wakeup_modem(self, baudrate, port, max_try, delay, debug, msg='Attempting AT
729785
self.__serial = UART(1, baudrate=baudrate, pins=self.__pins, timeout_chars=100)
730786
return count < MAX_TRY
731787

732-
def at_negotiation(self, baudrate, port, max_try, mirror, atneg_only, debug):
788+
def at_negotiation(self, baudrate, port, max_try, mirror, atneg_only, debug, target_baudrate):
733789
MAX_TRY = max_try
734790
count = 0
735-
print('Attempting AT auto-negotiation...')
791+
if debug:
792+
print('Attempting AT auto-negotiation... with baudrate {} and target_baudrate {}'.format(baudrate, target_baudrate))
793+
else:
794+
print('Attempting AT auto-negotiation...')
736795
self.__serial.write(b"AT\r\n")
737796
response = self.read_rsp(size=20)
738797
if debug: print('{}'.format(response))
@@ -746,19 +805,21 @@ def at_negotiation(self, baudrate, port, max_try, mirror, atneg_only, debug):
746805
if debug: print('{}'.format(response))
747806
if b'OK' in response:
748807
self.__serial.read()
749-
cmd = "AT+IPR=%d\n"%baudrate
750-
if debug: print('Setting baudrate to {}'.format(baudrate))
808+
cmd = "AT+IPR=%d\n"%target_baudrate
809+
if debug: print('Setting baudrate to {}'.format(target_baudrate))
751810
self.__serial.write(cmd.encode())
752811
response = self.read_rsp(size=6)
753812
if debug: print('{}'.format(response))
754813
if b'OK' in response:
814+
self.__modem_speed = target_baudrate
815+
self.__speed_detected = True
755816
if atneg_only:
756817
return True
757818
if 'FiPy' in self.__sysname or 'GPy' in self.__sysname:
758-
self.__serial = UART(1, baudrate=baudrate, pins=self.__pins, timeout_chars=100)
819+
self.__serial = UART(1, baudrate=target_baudrate, pins=self.__pins, timeout_chars=100)
759820
else:
760821
self.__serial = None
761-
self.__serial = serial.Serial(port, baudrate, bytesize=serial.EIGHTBITS, timeout=0.1)
822+
self.__serial = serial.Serial(port, target_baudrate, bytesize=serial.EIGHTBITS, timeout=0.1)
762823
self.__serial.reset_input_buffer()
763824
self.__serial.reset_output_buffer()
764825
self.__serial.flush()
@@ -774,7 +835,7 @@ def at_negotiation(self, baudrate, port, max_try, mirror, atneg_only, debug):
774835
print('ERROR in AT+SMOD returned {}'.format(response))
775836
return False
776837
else:
777-
print('ERROR in AT+IPR={} returned {}'.format(baudrate, response))
838+
print('ERROR in AT+IPR={} returned {}'.format(target_baudrate, response))
778839
return False
779840
else:
780841
print('ERROR sending AT command... no response? {}'.format(response))
@@ -794,7 +855,7 @@ def success_message(self, port=None, verbose=False, debug=False):
794855
print("Here is the current firmware version:\n")
795856
self.show_info(port=port, verbose=verbose, debug=debug)
796857

797-
def upgrade(self, ffile, mfile=None, baudrate=921600, retry=False, resume=False, debug=False, pkgdebug=False, verbose=False, load_fff=True, load_only=False):
858+
def upgrade(self, ffile, mfile=None, baudrate=921600, retry=False, resume=False, debug=False, pkgdebug=False, verbose=False, load_fff=True, load_only=False, mtools=False):
798859
success = True
799860
if not retry and mfile is not None:
800861
if resume or self.__check_br(br_only=True, verbose=verbose, debug=debug):
@@ -819,7 +880,7 @@ def upgrade(self, ffile, mfile=None, baudrate=921600, retry=False, resume=False,
819880
print('Unable to upgrade bootrom.')
820881
if debug: print('Success2? {}'.format(success))
821882
if success:
822-
if self.__run(file_path=ffile, resume=True if mfile is not None else resume, baudrate=baudrate, direct=False, debug=debug, pkgdebug=pkgdebug, verbose=verbose, load_fff=False if mfile else load_fff):
883+
if self.__run(file_path=ffile, resume=True if mfile is not None else resume, baudrate=baudrate, direct=False, debug=debug, pkgdebug=pkgdebug, verbose=verbose, load_fff=False if mfile else load_fff, mtools=mtools):
823884
if self.__check_br(verbose=verbose, debug=debug):
824885
self.__run(bootrom=True, debug=debug, direct=False, pkgdebug=pkgdebug, verbose=verbose, load_fff=True)
825886
self.success_message(verbose=verbose, debug=debug)
@@ -839,8 +900,15 @@ def upgrade_uart(self, ffh_mode=False, mfile=None, retry=False, resume=False, co
839900
print('Preparing modem for upgrade...')
840901
if not retry and ffh_mode:
841902
success = False
842-
success = self.__run(bootrom=True, resume=resume, switch_ffh=True, direct=False, debug=debug, pkgdebug=pkgdebug, verbose=verbose)
843-
time.sleep(1)
903+
if self.__check_br(verbose=verbose, debug=debug):
904+
success = self.__run(bootrom=True, resume=resume, switch_ffh=True, direct=False, debug=debug, pkgdebug=pkgdebug, verbose=verbose)
905+
time.sleep(1)
906+
else:
907+
print('FFH mode is not necessary... ignoring!')
908+
print('Do not specify updater.elf when updating!')
909+
mfile = None
910+
ffh_mode = False
911+
success = True
844912
if success:
845913
if mfile is not None:
846914
success = False
@@ -904,6 +972,7 @@ def run(ffile, mfile=None, baudrate=921600, verbose=False, debug=False, load_fff
904972
print_welcome()
905973
retry = False
906974
resume = False
975+
mtools = False
907976
sqnup = sqnsupgrade()
908977
if sqnup.check_files(ffile, mfile, debug):
909978
state = sqnup.detect_modem_state(debug=debug, hangup=hangup)
@@ -916,11 +985,13 @@ def run(ffile, mfile=None, baudrate=921600, verbose=False, debug=False, load_fff
916985
print('Your modem is in recovery mode. Please specify updater.elf file')
917986
reconnect_uart()
918987
sys.exit(1)
919-
elif state == 4 or state == 1:
988+
elif state == 4:
920989
resume = True
990+
elif state == 1:
991+
mtools = True
921992
elif state == -1:
922993
detect_error()
923-
sqnup.upgrade(ffile=ffile, mfile=mfile, baudrate=baudrate, retry=retry, resume=resume, debug=debug, pkgdebug=False, verbose=verbose, load_fff=load_fff)
994+
sqnup.upgrade(ffile=ffile, mfile=mfile, baudrate=baudrate, retry=retry, resume=resume, debug=debug, pkgdebug=False, verbose=verbose, load_fff=load_fff, mtools=mtools)
924995
reconnect_uart()
925996

926997
def uart(ffh_mode=False, mfile=None, color=0x050505, verbose=False, debug=False, hangup=True):

0 commit comments

Comments
 (0)