From 8b96b1a5f4ca41bba771b40b1fb7ab99a48e9a38 Mon Sep 17 00:00:00 2001 From: me-no-dev Date: Thu, 5 Jan 2017 13:54:40 +0200 Subject: [PATCH] update IDF libs and esptool.py adds autoreset after firmware upload --- cores/esp32/esp32-hal-i2c.c | 4 +- tools/esptool.py | 440 ++++++++++++------- tools/sdk/bin/bootloader.bin | Bin 4688 -> 5152 bytes tools/sdk/include/config/sdkconfig.h | 7 + tools/sdk/include/driver/driver/i2c.h | 514 +++++++++++++++++++++++ tools/sdk/include/driver/driver/i2s.h | 380 +++++++++++++++++ tools/sdk/include/esp32/soc/cpu.h | 9 + tools/sdk/include/esp32/soc/i2c_reg.h | 2 + tools/sdk/include/esp32/soc/i2c_struct.h | 6 +- tools/sdk/include/lwip/lwipopts.h | 2 +- tools/sdk/include/lwip/port/lwipopts.h | 2 +- tools/sdk/ld/esp32.common.ld | 24 +- tools/sdk/lib/libapp_update.a | Bin 31292 -> 31292 bytes tools/sdk/lib/libbootloader_support.a | Bin 96382 -> 98330 bytes tools/sdk/lib/libbt.a | Bin 7981170 -> 7981170 bytes tools/sdk/lib/libdriver.a | Bin 626624 -> 842502 bytes tools/sdk/lib/libesp32.a | Bin 421426 -> 423810 bytes tools/sdk/lib/libethernet.a | Bin 82840 -> 82840 bytes tools/sdk/lib/libexpat.a | Bin 1030628 -> 1030628 bytes tools/sdk/lib/libfreertos.a | Bin 500138 -> 500138 bytes tools/sdk/lib/libjson.a | Bin 183460 -> 183460 bytes tools/sdk/lib/liblog.a | Bin 21194 -> 21194 bytes tools/sdk/lib/liblwip.a | Bin 1634662 -> 1634662 bytes tools/sdk/lib/libmbedtls.a | Bin 3193590 -> 3193590 bytes tools/sdk/lib/libmicro-ecc.a | Bin 160248 -> 160248 bytes tools/sdk/lib/libnewlib.a | Bin 79748 -> 79514 bytes tools/sdk/lib/libnghttp.a | Bin 1281422 -> 1281422 bytes tools/sdk/lib/libnvs_flash.a | Bin 543400 -> 543400 bytes tools/sdk/lib/libopenssl.a | Bin 255072 -> 255072 bytes tools/sdk/lib/libspi_flash.a | Bin 91790 -> 91790 bytes tools/sdk/lib/libtcpip_adapter.a | Bin 69046 -> 69046 bytes tools/sdk/lib/libulp.a | Bin 21548 -> 21548 bytes tools/sdk/lib/libvfs.a | Bin 63414 -> 63414 bytes tools/sdk/lib/libwpa_supplicant.a | Bin 466236 -> 466236 bytes tools/sdk/lib/libxtensa-debug-module.a | Bin 12054 -> 12054 bytes 35 files changed, 1213 insertions(+), 177 deletions(-) create mode 100644 tools/sdk/include/driver/driver/i2c.h create mode 100644 tools/sdk/include/driver/driver/i2s.h diff --git a/cores/esp32/esp32-hal-i2c.c b/cores/esp32/esp32-hal-i2c.c index fd42db5a..b372e4d1 100644 --- a/cores/esp32/esp32-hal-i2c.c +++ b/cores/esp32/esp32-hal-i2c.c @@ -347,7 +347,7 @@ i2c_err_t i2cSetFrequency(i2c_t * i2c, uint32_t clk_speed) I2C_MUTEX_LOCK(); //the clock num during SCL is low level - i2c->dev->scl_low_period.scl_low_period = period; + i2c->dev->scl_low_period.period = period; //the clock num during SCL is high level i2c->dev->scl_high_period.period = period; @@ -375,7 +375,7 @@ uint32_t i2cGetFrequency(i2c_t * i2c) return 0; } - return APB_CLK_FREQ/(i2c->dev->scl_low_period.scl_low_period+i2c->dev->scl_high_period.period); + return APB_CLK_FREQ/(i2c->dev->scl_low_period.period+i2c->dev->scl_high_period.period); } /* diff --git a/tools/esptool.py b/tools/esptool.py index 4d847214..026d22ca 100755 --- a/tools/esptool.py +++ b/tools/esptool.py @@ -1,10 +1,9 @@ #!/usr/bin/env python -# NB: Before sending a PR to change the above line to '#!/usr/bin/env python2', please read https://github.com/themadinventor/esptool/issues/21 +# NB: Before sending a PR to change the above line to '#!/usr/bin/env python2', please read https://github.com/espressif/esptool/issues/21 # # ESP8266 & ESP32 ROM Bootloader Utility -# https://github.com/themadinventor/esptool -# # Copyright (C) 2014-2016 Fredrik Ahlberg, Angus Gratton, Espressif Systems (Shanghai) PTE LTD, other contributors as noted. +# https://github.com/espressif/esptool # # This program is free software; you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free Software @@ -28,10 +27,10 @@ import sys import time import base64 import zlib +import shlex __version__ = "2.0-dev" - MAX_UINT32 = 0xffffffff MAX_UINT24 = 0xffffff @@ -108,7 +107,7 @@ class ESPLoader(object): ESP_ERASE_FLASH = 0xD0 ESP_ERASE_REGION = 0xD1 ESP_READ_FLASH = 0xD2 - ESP_GET_FLASH_ID = 0xD3 + ESP_RUN_USER_CODE = 0xD3 # Maximum block sized for RAM and Flash writes, respectively. ESP_RAM_BLOCK = 0x1800 @@ -136,7 +135,7 @@ class ESPLoader(object): # The number of bytes in the UART response that signify command status STATUS_BYTES_LENGTH = 2 - def __init__(self, port=DEFAULT_PORT, baud=ESP_ROM_BAUD, do_connect=True): + def __init__(self, port=DEFAULT_PORT, baud=ESP_ROM_BAUD): """Base constructor for ESPLoader bootloader interaction Don't call this constructor, either instantiate ESP8266ROM @@ -151,34 +150,35 @@ class ESPLoader(object): if isinstance(port, serial.Serial): self._port = port else: - self._port = serial.Serial(port) + self._port = serial.serial_for_url(port) self._slip_reader = slip_reader(self._port) # setting baud rate in a separate step is a workaround for # CH341 driver on some Linux versions (this opens at 9600 then # sets), shouldn't matter for other platforms/drivers. See - # https://github.com/themadinventor/esptool/issues/44#issuecomment-107094446 + # https://github.com/espressif/esptool/issues/44#issuecomment-107094446 self._port.baudrate = baud - if do_connect: - self.connect() @staticmethod - def detect_chip(port=DEFAULT_PORT, baud=ESP_ROM_BAUD): - """Use serial access to detect the chip type. + def detect_chip(port=DEFAULT_PORT, baud=ESP_ROM_BAUD, connect_mode='default_reset'): + """ Use serial access to detect the chip type. We use the UART's datecode register for this, it's mapped at the same address on ESP8266 & ESP32 so we can use one memory read and compare to the datecode register for each chip type. + This routine automatically performs ESPLoader.connect() (passing + connect_mode parameter) as part of querying the chip. """ - detect_port = ESPLoader(port, baud, True) + detect_port = ESPLoader(port, baud) + detect_port.connect(connect_mode) sys.stdout.write('Detecting chip type... ') date_reg = detect_port.read_reg(ESPLoader.UART_DATA_REG_ADDR) for cls in [ESP8266ROM, ESP32ROM]: if date_reg == cls.DATE_REG_VALUE: # don't connect a second time - inst = cls(detect_port._port, baud, False) + inst = cls(detect_port._port, baud) print '%s' % inst.CHIP_NAME return inst print '' @@ -204,11 +204,14 @@ class ESPLoader(object): return state """ Send a request and read the response """ - def command(self, op=None, data="", chk=0): + def command(self, op=None, data="", chk=0, wait_response=True): if op is not None: pkt = struct.pack(' 0: flags |= SPI_USR_MISO @@ -630,6 +644,9 @@ class ESPLoader(object): wait_done() status = self.read_reg(SPI_W0_REG) + # restore some SPI controller registers + self.write_reg(SPI_USR_REG, old_spi_usr) + self.write_reg(SPI_USR2_REG, old_spi_usr2) return status def read_status(self, num_bytes=2): @@ -687,6 +704,32 @@ class ESPLoader(object): self.run_spiflash_command(SPIFLASH_WRDI) + def hard_reset(self): + self._port.setRTS(True) # EN->LOW + time.sleep(0.1) + self._port.setRTS(False) + + def soft_reset(self, stay_in_bootloader): + if not self.IS_STUB: + if stay_in_bootloader: + return # ROM bootloader is already in bootloader! + else: + # 'run user code' is as close to a soft reset as we can do + self.flash_begin(0, 0) + self.flash_finish(False) + else: + if stay_in_bootloader: + # soft resetting from the stub loader + # will re-load the ROM bootloader + self.flash_begin(0, 0) + self.flash_finish(True) + elif self.CHIP_NAME != "ESP8266": + raise FatalError("Soft resetting is currently only supported on ESP8266") + else: + # running user code from stub loader requires some hacks + # in the stub loader + self.command(self.ESP_RUN_USER_CODE, wait_response=False) + class ESP8266ROM(ESPLoader): """ Access class for ESP8266 ROM bootloader @@ -715,11 +758,20 @@ class ESP8266ROM(ESPLoader): '4MB-c1':0x60, '4MB-c2':0x70} + FLASH_HEADER_OFFSET = 0 + def flash_spi_attach(self, is_spi, is_legacy): - pass # not implemented in ROM, but OK to silently skip + if self.IS_STUB: + super(ESP8266ROM, self).flash_spi_attach(is_spi, is_legacy) + else: + # ESP8266 ROM has no flash_spi_attach command in serial protocol, + # but flash_begin will do it + self.flash_begin(0, 0) def flash_set_parameters(self, size): - pass # not implemented in ROM, but OK to silently skip + # not implemented in ROM, but OK to silently skip for ROM + if self.IS_STUB: + super(ESP8266ROM, self).flash_set_parameters(size) def chip_id(self): """ Read Chip ID from OTP ROM - see http://esp8266-re.foogod.com/wiki/System_get_chip_id_%28IoT_RTOS_SDK_0.9.9%29 """ @@ -775,6 +827,7 @@ class ESP8266StubLoader(ESP8266ROM): def get_erase_size(self, offset, size): return size # stub doesn't have same size bug as ROM loader + ESP8266ROM.STUB_CLASS = ESP8266StubLoader @@ -809,26 +862,22 @@ class ESP32ROM(ESPLoader): '16MB':0x40 } + FLASH_HEADER_OFFSET = 0x1000 + def read_efuse(self, n): """ Read the nth word of the ESP3x EFUSE region. """ return self.read_reg(self.EFUSE_REG_BASE + (4 * n)) def chip_id(self): - word16 = self.read_efuse(16) - word17 = self.read_efuse(17) + word16 = self.read_efuse(1) + word17 = self.read_efuse(2) return ((word17 & MAX_UINT24) << 24) | (word16 >> 8) & MAX_UINT24 def read_mac(self): """ Read MAC from EFUSE region """ - word16 = self.read_efuse(16) - word17 = self.read_efuse(17) - word18 = self.read_efuse(18) - word19 = self.read_efuse(19) - wifi_mac = (((word17 >> 16) & 0xff), ((word17 >> 8) & 0xff), ((word17 >> 0) & 0xff), - ((word16 >> 24) & 0xff), ((word16 >> 16) & 0xff), ((word16 >> 8) & 0xff)) - bt_mac = (((word19 >> 16) & 0xff), ((word19 >> 8) & 0xff), ((word19 >> 0) & 0xff), - ((word18 >> 24) & 0xff), ((word18 >> 16) & 0xff), ((word18 >> 8) & 0xff)) - return (wifi_mac,bt_mac) + words = [self.read_efuse(1), self.read_efuse(2)] + bitstring = struct.pack(">II", *words) + return tuple(ord(b) for b in bitstring[:6]) # trim 2 byte CRC def get_erase_size(self, offset, size): return size @@ -845,6 +894,7 @@ class ESP32StubLoader(ESP32ROM): self._port = rom_loader._port self.flush_input() # resets _slip_reader + ESP32ROM.STUB_CLASS = ESP32StubLoader @@ -1337,6 +1387,7 @@ def div_roundup(a, b): """ return (int(a) + int(b) - 1) / int(b) + def align_file_position(f, size): """ Align the position in the file to the next block of specified size """ align = (size - 1) - (f.tell() % size) @@ -1439,9 +1490,23 @@ def dump_mem(esp, args): print 'Done!' +def detect_flash_size(esp, args): + if args.flash_size == 'detect': + flash_id = esp.flash_id() + size_id = flash_id >> 16 + args.flash_size = {0x12: '256KB', 0x13: '512KB', 0x14: '1MB', 0x15: '2MB', 0x16: '4MB', 0x17: '8MB', 0x18: '16MB'}.get(size_id) + if args.flash_size is None: + print 'Warning: Could not auto-detect Flash size (FlashID=0x%x, SizeID=0x%x), defaulting to 4m' % (flash_id, size_id) + args.flash_size = '4m' + else: + print 'Auto-detected Flash size:', args.flash_size + + def write_flash(esp, args): """Write data to flash """ + detect_flash_size(esp, args) + flash_mode = {'qio':0, 'qout':1, 'dio':2, 'dout': 3}[args.flash_mode] flash_size_freq = esp.parse_flash_size_arg(args.flash_size) flash_size_freq += {'40m':0, '26m':1, '20m':2, '80m': 0xf}[args.flash_freq] @@ -1462,7 +1527,7 @@ def write_flash(esp, args): print 'Erasing flash...' image = argfile.read() # Update header with flash parameters - if address == 0 and image[0] == '\xe9': + if address == esp.FLASH_HEADER_OFFSET and image[0] == '\xe9': image = image[0:2] + flash_info + image[4:] calcmd5 = hashlib.md5(image).hexdigest() uncsize = len(image) @@ -1512,14 +1577,16 @@ def write_flash(esp, args): except NotImplementedInROMError: pass print '\nLeaving...' - if args.flash_mode == 'dio' and esp.CHIP_NAME == "ESP8266": - esp.flash_unlock_dio() - else: + + if esp.IS_STUB: + # skip sending flash_finish to ROM loader here, + # as it causes the loader to exit and run user code esp.flash_begin(0, 0) if args.compress: esp.flash_defl_finish(False) else: esp.flash_finish(False) + if args.verify: print 'Verifying just-written flash...' verify_flash(esp, args, header_block) @@ -1583,14 +1650,11 @@ def elf2image(args): def read_mac(esp, args): mac = esp.read_mac() + def print_mac(label, mac): print '%s: %s' % (label, ':'.join(map(lambda x: '%02x' % x, mac))) - print("%r" % (mac,)) - if len(mac) == 1: - print_mac("MAC", mac) - else: - print_mac("WiFi MAC", mac[0]) - print_mac("BT MAC", mac[1]) + print_mac("MAC", mac) + def chip_id(esp, args): chipid = esp.chip_id() @@ -1711,6 +1775,18 @@ def main(): type=arg_auto_int, default=os.environ.get('ESPTOOL_BAUD', ESPLoader.ESP_ROM_BAUD)) + parser.add_argument( + '--before', + help='What to do before connecting to the chip', + choices=['default_reset', 'no_reset', 'esp32r0'], + default=os.environ.get('ESPTOOL_BEFORE', 'default_reset')) + + parser.add_argument( + '--after', '-a', + help='What to do after esptool.py is finished', + choices=['hard_reset', 'soft_reset', 'no_reset'], + default=os.environ.get('ESPTOOL_AFTER', 'hard_reset')) + parser.add_argument( '--no-stub', help="Disable launching the flasher stub, only talk to ROM bootloader. Some features will not be available.", @@ -1744,7 +1820,7 @@ def main(): parser_write_mem.add_argument('value', help='Value', type=arg_auto_int) parser_write_mem.add_argument('mask', help='Mask of bits to write', type=arg_auto_int) - def add_spi_flash_subparsers(parent): + def add_spi_flash_subparsers(parent, auto_detect=False): """ Add common parser arguments for SPI flash properties """ parent.add_argument('--flash_freq', '-ff', help='SPI Flash frequency', choices=['40m', '26m', '20m', '80m'], @@ -1754,8 +1830,8 @@ def main(): default=os.environ.get('ESPTOOL_FM', 'qio')) parent.add_argument('--flash_size', '-fs', help='SPI Flash size in MegaBytes (1MB, 2MB, 4MB, 8MB, 16M)' ' plus ESP8266-only (256KB, 512KB, 2MB-c1, 4MB-c1, 4MB-2)', - action=FlashSizeAction, - default=os.environ.get('ESPTOOL_FS', '1MB')) + action=FlashSizeAction, auto_detect=auto_detect, + default=os.environ.get('ESPTOOL_FS', 'detect' if auto_detect else '1MB')) parent.add_argument('--ucIsHspi', '-ih', help='Config SPI PORT/PINS (Espressif internal feature)',action='store_true') parent.add_argument('--ucIsLegacy', '-il', help='Config SPI LEGACY (Espressif internal feature)',action='store_true') @@ -1764,7 +1840,7 @@ def main(): help='Write a binary blob to flash') parser_write_flash.add_argument('addr_filename', metavar='
', help='Address followed by binary filename, separated by space', action=AddrFilenamePairAction) - add_spi_flash_subparsers(parser_write_flash) + add_spi_flash_subparsers(parser_write_flash, auto_detect=True) parser_write_flash.add_argument('--no-progress', '-p', help='Suppress progress output', action="store_true") parser_write_flash.add_argument('--verify', help='Verify just-written data (only necessary if very cautious, data is already CRCed', action='store_true') parser_write_flash.add_argument('--compress', '-z', help='Compress data in transfer',action="store_true") @@ -1855,6 +1931,8 @@ def main(): for operation in subparsers.choices.keys(): assert operation in globals(), "%s should be a module function" % operation + expand_file_arguments() + args = parser.parse_args() print 'esptool.py v%s' % __version__ @@ -1866,12 +1944,15 @@ def main(): operation_args,_,_,_ = inspect.getargspec(operation_func) if operation_args[0] == 'esp': # operation function takes an ESPLoader connection object initial_baud = min(ESPLoader.ESP_ROM_BAUD, args.baud) # don't sync faster than the default baud rate - chip_constructor_fun = { - 'auto': ESPLoader.detect_chip, - 'esp8266': ESP8266ROM, - 'esp32': ESP32ROM, - }[args.chip] - esp = chip_constructor_fun(args.port, initial_baud) + if args.chip == 'auto': + esp = ESPLoader.detect_chip(args.port, initial_baud, args.before) + else: + chip_class = { + 'esp8266': ESP8266ROM, + 'esp32': ESP32ROM, + }[args.chip] + esp = chip_class(args.port, initial_baud) + esp.connect(args.before) if not args.no_stub: esp = esp.run_stub() @@ -1890,20 +1971,56 @@ def main(): esp.flash_spi_attach(0, 0) if hasattr(args, "flash_size"): print "Configuring flash size..." + detect_flash_size(esp, args) esp.flash_set_parameters(flash_size_bytes(args.flash_size)) operation_func(esp, args) + + # finish execution based on args.after + if args.after == 'hard_reset': + print 'Hard resetting...' + esp.hard_reset() + elif args.after == 'soft_reset': + print 'Soft resetting...' + # flash_finish will trigger a soft reset + esp.soft_reset(False) + else: + print 'Staying in bootloader.' + if esp.IS_STUB: + esp.soft_reset(True) # exit stub back to ROM loader + else: operation_func(args) +def expand_file_arguments(): + """ Any argument starting with "@" gets replaced with all values read from a text file. + Text file arguments can be split by newline or by space. + Values are added "as-is", as if they were specified in this order on the command line. + """ + new_args = [] + expanded = False + for arg in sys.argv: + if arg.startswith("@"): + expanded = True + with open(arg[1:],"r") as f: + for line in f.readlines(): + new_args += shlex.split(line) + else: + new_args.append(arg) + if expanded: + print "esptool.py %s" % (" ".join(new_args[1:])) + sys.argv = new_args + + class FlashSizeAction(argparse.Action): """ Custom flash size parser class to support backwards compatibility with megabit size arguments. (At next major relase, remove deprecated sizes and this can become a 'normal' choices= argument again.) """ - def __init__(self, option_strings, dest, nargs=1, **kwargs): + def __init__(self, option_strings, dest, nargs=1, auto_detect=False, **kwargs): super(FlashSizeAction, self).__init__(option_strings, dest, nargs, **kwargs) + self._auto_detect = auto_detect def __call__(self, parser, namespace, values, option_string=None): try: @@ -1925,6 +2042,8 @@ class FlashSizeAction(argparse.Action): known_sizes = dict(ESP8266ROM.FLASH_SIZES) known_sizes.update(ESP32ROM.FLASH_SIZES) + if self._auto_detect: + known_sizes['detect'] = 'detect' if value not in known_sizes: raise argparse.ArgumentError(self, '%s is not a known flash size. Known sizes: %s' % (value, ", ".join(known_sizes.keys()))) setattr(namespace, self.dest, value) @@ -1952,100 +2071,105 @@ class AddrFilenamePairAction(argparse.Action): pairs.append((address, argfile)) setattr(namespace, self.dest, pairs) + # Binary stub code (see flasher_stub dir for source & details) ESP8266ROM.STUB_CODE = eval(zlib.decompress(base64.b64decode(b""" -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\ -JlmuEgVGbP3zYv5L1xmpPPrX/wFeThnJ\ +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\ """))) ESP32ROM.STUB_CODE = eval(zlib.decompress(base64.b64decode(b""" -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\ """))) if __name__ == '__main__': diff --git a/tools/sdk/bin/bootloader.bin b/tools/sdk/bin/bootloader.bin index 570b509cf5f53c8e3f759e1af0db6372b7dd84bd..8a009baa78d71377173c64d9af27827c4b97b0a2 100644 GIT binary patch delta 2607 zcmai0eNa@_6~Ax4faL`i!KdM)+_z!Lf+ktluVNZ^*~$tII*U?Doj75E1vZrr0UK)5 zESHX}#x(+OqDUO`9=fgF$VAZ=HAAv%8j~j2G^CR{j-<|}Thr;-!LNidy!(3ZlQz?t z&h(G-&bjCO&bjB@d(PecV}WSxFJcS>#Xk^sGa2a}-p+1+x4*p&c6;l$`-IP#+%vBf z>CT?loq8@ox7w!d7pyzX7)GY_0coLR*ie#|WCXd%Iem zqv$U1|J+byNQljmKYSKmkdXt9~0U`=pvz8La8BNpF_Ob1)t&j zffGdfm=FMVa6{!zM>6p}@hWhpYUdoA2pu2Nl*49 zo0kyoB@`rdicrJ@z!!vbhB=3sP!FMH?^a2kC~(fgdyZM#Js~s678p@(Bm?nylwB-Z ze~~u>z$!1OI;NB!Q#@hlJO>liKwJZ_?@GK5CXBJy6zPaEt-qy1!_+UB0>GHam|`$7 z2x@kL1KJn$!S4W&I10pzFm_Op4l1ahBF!S`2f&rA2~`(nt#@YuFqo_j{irbT`}E6t z0EQNqTaTD4?C!LA*;TRGoeDe^rlxa`_xGW8S$=Wb)#CB*NQUK5ZA1CxTYer7Z&2 zXKOB}5C{pL{nkdY!9#Y9sW4Mi;J(RpFUn4SAOeC9no zeC+Vktcx$(%)9rmYfU3UahW^`vNY&d+>|1`!w@!C#=izc)B?^ z6JD!UP==)q7*0X@$^qc4%i<0(mSADiw}qtF=LHDPXE@JeHauaRHjtajM?5v{ zWsW}hHRD@JPY&X%j8uftZJAbWL|JMA902}gltE?03x#RViz} z&I2}e)WC)=B%ukRKK-4iGU?X8l%l2&9+fy3Zggp&`j{9}GvYMTU%r$MutU z-Q+LE$?VPV!N`%rQ7k&p=~Z1jWvNq+7cjFwEFk$5Q)jcJ%bTgc%#0t}LwCt! ze2fZhktM&3cnVRQuN0tWHUCB#7LULuOVyDYXpqU&?M>5Oxd}06vr;8 z8P@G(%p(9=O+`%N8wJ(Ke6_%2WaU)J169=TWODy7Bz&+1NSov_9-vKUZ5ioIN_gR{ IIwzrj0oW1-1ONa4 delta 2113 zcmY*a4{#LK8UJ?gPma4KIg)e1oH4ss4lfb(I0Pk%cR9i}v9TNhBV>@_qM_*Elpr%8 zh2FhXW36L5AfimJmFL5Te6j4(;%~<0w*Ey%oR424WGc@~N-&^8L zyEET@@B4lK-}~OK>ic+ce;sE@)ju|T<^l7$znLYj3?NY!+Uig~w~CKuqX3%@K`5E{ zcd&W-Mv%Nm2skMQv%x+5Y;bq+W)Oe_ib4;?NG(8?@)=4lZZ`NZr4CAmDHW8)vRcd6 zbQM;*%GP%5qyA}100B5>@KDf3{eE=}LZ4GvHq8dNQv%o%{3Yc_&9lMDd#oW|0#NDt z6H0%jL}>E)mf7G+N*$CE7Dco*#@`^-!NGz!94%xn;>8D#k4Un-?|vws_(#fk^qB5N>IUIN)rHbI19+`up!|_T7C# zI&pUMqL$TR&yp>5?xt|(603;@G+lnm@a9`89hZB4FSYNQi4@7IQ68OOwV>D7JFmi+ zs^&QKDwE{BB=8$jkf53O-{+)!H7|FQ<=yfB$4Y(FX-3;c1b6l2QVfz=?+dhB?P=0` z8$AH|VUNoDA6og%Mw{G4{DFkW1cDvKS%&4EWVDlfvW;BtBtxb`o-1mAo@W|rv44*5 zV?4)|z9gSjXMRc}@6+0fT^VE2U$FKi zp5l9}01#0wIYLca89auyKjSGA8pE_`Hr!B@o06}mugnTI^(7@SB&Dw4;g9gZ>&G7y z!t%N{Ir8(SXUo$nq%Ps%KPo>I7T1p9)LZz{l@C^Pf<5_@;Q~JUZsNk*`@~1e^76XW zh>{Xq54IUcd=eMs)_=;6YHzZf19Lgka->uN>VVXqF3x*uPVvVLGHi@ zXI|!wuUrhI?XGBauNdJnD~tlyV{H?bCM5Q80tjt)iLY|rfT3!}+Ik$iDxuq1tjH>= z_wROz3puaf(1&Pq&Dj4Z$@(o3kJ&=u#wU2|ophe+aH7kJ*5D&PI4*9a)%C;x)z1|; z$449Rh<(aR526;`%~XBdshhv%y6V}+)ZeVzlXDhyi}NF<56wts*fKjs?QHc;VBT`Ka;zdy>%^z3yb?>{#9BF?vY-i;B4-vH zcO=oY@qQf%&FZZGca=J)XYs%E;}>gtWRSno#hsjYp<(t9UHe*}6wz;4 z82Jn3$Ifc*1LYOxd-vK{mb1EcUPsR{rB#IP-|10L;jRm}i|?DgR;C})wVY0OA3dY& zU*L=L3_Gc7s$S$OrmSeI5%s8EGo5^)&MeR~TxO?ap8I2=*9`qJU8+w@_cR&`NKSA wK3n@9(sh%d9zE5=@F83OfJFI`ouI|_yiD)FIa^f)x4>I9V +#include "esp_err.h" +#include "esp_intr_alloc.h" +#include "freertos/FreeRTOS.h" +#include "freertos/semphr.h" +#include "freertos/xtensa_api.h" +#include "freertos/task.h" +#include "freertos/queue.h" +#include "freertos/ringbuf.h" +#include "driver/gpio.h" + +#define I2C_APB_CLK_FREQ APB_CLK_FREQ /*!< I2C source clock is APB clock, 80MHz */ +#define I2C_FIFO_LEN (32) /*!< I2C hardware fifo length */ +typedef enum{ + I2C_MODE_SLAVE = 0, /*!< I2C slave mode */ + I2C_MODE_MASTER, /*!< I2C master mode */ + I2C_MODE_MAX, +}i2c_mode_t; + +typedef enum { + I2C_MASTER_WRITE = 0, /*!< I2C write data */ + I2C_MASTER_READ, /*!< I2C read data */ +} i2c_rw_t; + +typedef enum { + I2C_DATA_MODE_MSB_FIRST = 0, /*!< I2C data msb first */ + I2C_DATA_MODE_LSB_FIRST = 1, /*!< I2C data lsb first */ + I2C_DATA_MODE_MAX +} i2c_trans_mode_t; + +typedef enum{ + I2C_CMD_RESTART = 0, /*!=0) The number of data bytes that pushed to the I2C slave buffer. + */ +int i2c_slave_write_buffer(i2c_port_t i2c_num, uint8_t* data, int size, portBASE_TYPE ticks_to_wait); + +/** + * @brief I2C slave read data from internal buffer. When I2C slave receive data, isr will copy received data + * from hardware rx fifo to internal ringbuffer. Then users can read from internal ringbuffer. + * @note + * Only call this function in I2C slave mode + * + * @param i2c_num I2C port number + * @param data data pointer to write into internal buffer + * @param max_size Maximum data size to read + * @param ticks_to_wait Maximum waiting ticks + * + * @return + * - ESP_FAIL(-1) Parameter error + * - Others(>=0) The number of data bytes that read from I2C slave buffer. + */ +int i2c_slave_read_buffer(i2c_port_t i2c_num, uint8_t* data, size_t max_size, portBASE_TYPE ticks_to_wait); + +/** + * @brief set I2C master clock period + * + * @param i2c_num I2C port number + * @param high_period clock cycle number during SCL is high level, high_period is a 14 bit value + * @param low_period clock cycle number during SCL is low level, low_period is a 14 bit value + * + * @return + * - ESP_OK Success + * - ESP_ERR_INVALID_ARG Parameter error + */ +esp_err_t i2c_set_period(i2c_port_t i2c_num, int high_period, int low_period); + +/** + * @brief get I2C master clock period + * + * @param i2c_num I2C port number + * @param high_period pointer to get clock cycle number during SCL is high level, will get a 14 bit value + * @param low_period pointer to get clock cycle number during SCL is low level, will get a 14 bit value + * + * @return + * - ESP_OK Success + * - ESP_ERR_INVALID_ARG Parameter error + */ +esp_err_t i2s_get_period(i2c_port_t i2c_num, int* high_period, int* low_period); + +/** + * @brief set I2C master start signal timing + * + * @param i2c_num I2C port number + * @param setup_time clock number between the falling-edge of SDA and rising-edge of SCL for start mark, it's a 10-bit value. + * @param hold_time clock num between the falling-edge of SDA and falling-edge of SCL for start mark, it's a 10-bit value. + * + * @return + * - ESP_OK Success + * - ESP_ERR_INVALID_ARG Parameter error + */ +esp_err_t i2c_set_start_timing(i2c_port_t i2c_num, int setup_time, int hold_time); + +/** + * @brief get I2C master start signal timing + * + * @param i2c_num I2C port number + * @param setup_time pointer to get setup time + * @param hold_time pointer to get hold time + * + * @return + * - ESP_OK Success + * - ESP_ERR_INVALID_ARG Parameter error + */ +esp_err_t i2c_get_start_timing(i2c_port_t i2c_num, int* setup_time, int* hold_time); + +/** + * @brief set I2C master stop signal timing + * + * @param i2c_num I2C port number + * @param setup_time clock num between the rising-edge of SCL and the rising-edge of SDA, it's a 10-bit value. + * @param hold_time clock number after the STOP bit's rising-edge, it's a 14-bit value. + * + * @return + * - ESP_OK Success + * - ESP_ERR_INVALID_ARG Parameter error + */ +esp_err_t i2c_set_stop_timing(i2c_port_t i2c_num, int setup_time, int hold_time); + +/** + * @brief get I2C master stop signal timing + * + * @param i2c_num I2C port number + * @param setup_time pointer to get setup time. + * @param hold_time pointer to get hold time. + * + * @return + * - ESP_OK Success + * - ESP_ERR_INVALID_ARG Parameter error + */ +esp_err_t i2c_get_stop_timing(i2c_port_t i2c_num, int* setup_time, int* hold_time); + +/** + * @brief set I2C data signal timing + * + * @param i2c_num I2C port number + * @param sample_time clock number I2C used to sample data on SDA after the rising-edge of SCL, it's a 10-bit value + * @param hold_time clock number I2C used to hold the data after the falling-edge of SCL, it's a 10-bit value + * + * @return + * - ESP_OK Success + * - ESP_ERR_INVALID_ARG Parameter error + */ +esp_err_t i2c_set_data_timing(i2c_port_t i2c_num, int sample_time, int hold_time); + +/** + * @brief get I2C data signal timing + * + * @param i2c_num I2C port number + * @param sample_time pointer to get sample time + * @param hold_time pointer to get hold time + * + * @return + * - ESP_OK Success + * - ESP_ERR_INVALID_ARG Parameter error + */ +esp_err_t i2c_get_data_timing(i2c_port_t i2c_num, int* sample_time, int* hold_time); + +/** + * @brief set I2C data transfer mode + * + * @param i2c_num I2C port number + * @param tx_trans_mode I2C sending data mode + * @param rx_trans_mode I2C receving data mode + * + * @return + * - ESP_OK Success + * - ESP_ERR_INVALID_ARG Parameter error + */ +esp_err_t i2c_set_data_mode(i2c_port_t i2c_num, i2c_trans_mode_t tx_trans_mode, i2c_trans_mode_t rx_trans_mode); + +/** + * @brief get I2C data transfer mode + * + * @param i2c_num I2C port number + * @param tx_trans_mode pointer to get I2C sending data mode + * @param rx_trans_mode pointer to get I2C receiving data mode + * + * @return + * - ESP_OK Success + * - ESP_ERR_INVALID_ARG Parameter error + */ +esp_err_t i2c_get_data_mode(i2c_port_t i2c_num, i2c_trans_mode_t *tx_trans_mode, i2c_trans_mode_t *rx_trans_mode); + +#ifdef __cplusplus +} +#endif + +#endif /*_DRIVER_I2C_H_*/ diff --git a/tools/sdk/include/driver/driver/i2s.h b/tools/sdk/include/driver/driver/i2s.h new file mode 100644 index 00000000..d44bb676 --- /dev/null +++ b/tools/sdk/include/driver/driver/i2s.h @@ -0,0 +1,380 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef _DRIVER_I2S_H_ +#define _DRIVER_I2S_H_ +#include "esp_err.h" +#include +#include "soc/gpio_reg.h" +#include "soc/soc.h" +#include "soc/i2s_struct.h" +#include "soc/i2s_reg.h" +#include "soc/rtc_io_reg.h" +#include "soc/io_mux_reg.h" +#include "rom/gpio.h" +#include "esp_attr.h" +#include "esp_intr_alloc.h" +#include "driver/periph_ctrl.h" +#include "freertos/semphr.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define I2S_PIN_NO_CHANGE (-1) + + +/** + * @brief I2S bit width per sample. + * + */ +typedef enum { + I2S_BITS_PER_SAMPLE_8BIT = 8, /*!< I2S bits per sample: 8-bits*/ + I2S_BITS_PER_SAMPLE_16BIT = 16, /*!< I2S bits per sample: 16-bits*/ + I2S_BITS_PER_SAMPLE_24BIT = 24, /*!< I2S bits per sample: 24-bits*/ + I2S_BITS_PER_SAMPLE_32BIT = 32, /*!< I2S bits per sample: 32-bits*/ +} i2s_bits_per_sample_t; + +/** + * @brief I2S communication standard format + * + */ +typedef enum { + I2S_COMM_FORMAT_I2S = 0x01, /*!< I2S communication format I2S*/ + I2S_COMM_FORMAT_I2S_MSB = 0x02, /*!< I2S format MSB*/ + I2S_COMM_FORMAT_I2S_LSB = 0x04, /*!< I2S format LSB*/ + I2S_COMM_FORMAT_PCM = 0x08, /*!< I2S communication format PCM*/ + I2S_COMM_FORMAT_PCM_SHORT = 0x10, /*!< PCM Short*/ + I2S_COMM_FORMAT_PCM_LONG = 0x20, /*!< PCM Long*/ +} i2s_comm_format_t; + + +/** + * @brief I2S channel format type + */ +typedef enum { + I2S_CHANNEL_FMT_RIGHT_LEFT = 0x00, + I2S_CHANNEL_FMT_ALL_RIGHT, + I2S_CHANNEL_FMT_ALL_LEFT, + I2S_CHANNEL_FMT_ONLY_RIGHT, + I2S_CHANNEL_FMT_ONLY_LEFT, +} i2s_channel_fmt_t; + +/** + * @brief PDM sample rate ratio, measured in Hz. + * + */ +typedef enum { + PDM_SAMPLE_RATE_RATIO_64, + PDM_SAMPLE_RATE_RATIO_128, +} pdm_sample_rate_ratio_t; + +/** + * @brief PDM PCM convter enable/disable. + * + */ +typedef enum { + PDM_PCM_CONV_ENABLE, + PDM_PCM_CONV_DISABLE, +} pdm_pcm_conv_t; + + +/** + * @brief I2S Peripheral, 0 & 1. + * + */ +typedef enum { + I2S_NUM_0 = 0x0, /*!< I2S 0*/ + I2S_NUM_1 = 0x1, /*!< I2S 1*/ + I2S_NUM_MAX, +} i2s_port_t; + +/** + * @brief I2S Mode, defaut is I2S_MODE_MASTER | I2S_MODE_TX + * + */ +typedef enum { + I2S_MODE_MASTER = 1, + I2S_MODE_SLAVE = 2, + I2S_MODE_TX = 4, + I2S_MODE_RX = 8, + I2S_MODE_DAC_BUILT_IN = 16 +} i2s_mode_t; + +/** + * @brief I2S configuration parameters for i2s_param_config function + * + */ +typedef struct { + i2s_mode_t mode; /*!< I2S work mode*/ + int sample_rate; /*!< I2S sample rate*/ + i2s_bits_per_sample_t bits_per_sample; /*!< I2S bits per sample*/ + i2s_channel_fmt_t channel_format; /*!< I2S channel format */ + i2s_comm_format_t communication_format; /*!< I2S communication format */ + int intr_alloc_flags; /*!< Flags used to allocate the interrupt. One or multiple (ORred) ESP_INTR_FLAG_* values. See esp_intr_alloc.h for more info */ + int dma_buf_count; /*!< I2S DMA Buffer Count */ + int dma_buf_len; /*!< I2S DMA Buffer Length */ +} i2s_config_t; + +/** + * @brief I2S event types + * + */ +typedef enum { + I2S_EVENT_DMA_ERROR, + I2S_EVENT_TX_DONE, /*!< I2S DMA finish sent 1 buffer*/ + I2S_EVENT_RX_DONE, /*!< I2S DMA finish received 1 buffer*/ + I2S_EVENT_MAX, /*!< I2S event max index*/ +} i2s_event_type_t; + +/** + * @brief Event structure used in I2S event queue + * + */ +typedef struct { + i2s_event_type_t type; /*!< I2S event type */ + size_t size; /*!< I2S data size for I2S_DATA event*/ +} i2s_event_t; + +/** + * @brief I2S pin number for i2s_set_pin + * + */ +typedef struct { + int bck_io_num; /*!< BCK in out pin*/ + int ws_io_num; /*!< WS in out pin*/ + int data_out_num; /*!< DATA out pin*/ + int data_in_num; /*!< DATA in pin*/ +} i2s_pin_config_t; + +typedef intr_handle_t i2s_isr_handle_t; +/** + * @brief Set I2S pin number + * + * @note + * Internal signal can be output to multiple GPIO pads + * Only one GPIO pad can connect with input signal + * + * @param i2s_num I2S_NUM_0 or I2S_NUM_1 + * + * @param pin I2S Pin struct, or NULL for 2-channels, 8-bits DAC pin configuration (GPIO25 & GPIO26) + * + * @return + * - ESP_OK Success + * - ESP_FAIL Parameter error + */ +esp_err_t i2s_set_pin(i2s_port_t i2s_num, const i2s_pin_config_t *pin); + +/** + * @brief i2s install and start driver + * + * @param i2s_num I2S_NUM_0, I2S_NUM_1 + * + * @param i2s_config I2S configurations - see i2s_config_t struct + * + * @param queue_size I2S event queue size/depth. + * + * @param i2s_queue I2S event queue handle, if set NULL, driver will not use an event queue. + * + * @return + * - ESP_OK Success + * - ESP_FAIL Parameter error + */ +esp_err_t i2s_driver_install(i2s_port_t i2s_num, const i2s_config_t *i2s_config, int queue_size, void* i2s_queue); + +/** + * @brief Uninstall I2S driver. + * + * @param i2s_num I2S_NUM_0, I2S_NUM_1 + * + * @return + * - ESP_OK Success + * - ESP_FAIL Parameter error + */ +esp_err_t i2s_driver_uninstall(i2s_port_t i2s_num); + +/** + * @brief i2s read data buffer to i2s dma buffer + * + * @param i2s_num I2S_NUM_0, I2S_NUM_1 + * + * @param src source address to write + * + * @param size size of data (size in bytes) + * + * @param ticks_to_wait Write timeout + * + * @return number of written bytes + */ +int i2s_write_bytes(i2s_port_t i2s_num, const char *src, size_t size, TickType_t ticks_to_wait); + +/** + * @brief i2s write data buffer to i2s dma buffer + * + * @param i2s_num I2S_NUM_0, I2S_NUM_1 + * + * @param dest destination address to read + * + * @param size size of data (size in bytes) + * + * @param ticks_to_wait Read timeout + * + * @return number of read bytes + */ +int i2s_read_bytes(i2s_port_t i2s_num, char* dest, size_t size, TickType_t ticks_to_wait); + +/** + * @brief i2s push 1 sample to i2s dma buffer, with the size parameter equal to one sample's size in bytes = bits_per_sample/8. + * + * @param i2s_num I2S_NUM_0, I2S_NUM_1 + * + * @param sample destination address to write (depend on bits_per_sample, size of sample (in bytes) = 2*bits_per_sample/8) + * + * @param ticks_to_wait Push timeout + * + * @return number of push bytes + */ +int i2s_push_sample(i2s_port_t i2s_num, const char *sample, TickType_t ticks_to_wait); + +/** + * @brief Pop 1 sample to i2s dma buffer, with the size parameter equal to one sample's size in bytes = bits_per_sample/8. + * + * @param i2s_num I2S_NUM_0, I2S_NUM_1 + * + * @param sample destination address to write (depend on bits_per_sample, size of sample (in bytes) = 2*bits_per_sample/8) + * + * @param ticks_to_wait Pop timeout + * + * @return number of pop bytes + */ +int i2s_pop_sample(i2s_port_t i2s_num, char *sample, TickType_t ticks_to_wait); + + +/** + * @brief Set clock rate used for I2S RX and TX + * + * @param i2s_num I2S_NUM_0, I2S_NUM_1 + * + * @param rate I2S clock (ex: 8000, 44100...) + * + * @return + * - ESP_OK Success + * - ESP_FAIL Parameter error + */ +esp_err_t i2s_set_sample_rates(i2s_port_t i2s_num, uint32_t rate); + +/** + * @brief Start driver + * + * @param i2s_num I2S_NUM_0, I2S_NUM_1 + * +* @return + * - ESP_OK Success + * - ESP_FAIL Parameter error + */ +esp_err_t i2s_start(i2s_port_t i2s_num); + +/** + * @brief Stop driver + * + * @param i2s_num I2S_NUM_0, I2S_NUM_1 + * + * @return + * - ESP_OK Success + * - ESP_FAIL Parameter error + */ +esp_err_t i2s_stop(i2s_port_t i2s_num); + +/** + * @brief Set the TX DMA buffer contents to all zeroes + * + * @param i2s_num I2S_NUM_0, I2S_NUM_1 + * + * @return + * - ESP_OK Success + * - ESP_FAIL Parameter error + */ +esp_err_t i2s_zero_dma_buffer(i2s_port_t i2s_num); + +/***************************EXAMPLE********************************** + * + * + * ----------------EXAMPLE OF I2S SETTING --------------------- + * @code{c} + * + * #include "freertos/queue.h" + * #define I2S_INTR_NUM 17 //choose one interrupt number from soc.h + * int i2s_num = 0; //i2s port number + * i2s_config_t i2s_config = { + * .mode = I2S_MODE_MASTER | I2S_MODE_TX, + * .sample_rate = 44100, + * .bits_per_sample = 16, //16, 32 + * .channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT, //format LEFT_RIGHT + * .communication_format = I2S_COMM_FORMAT_I2S | I2S_COMM_FORMAT_I2S_MSB, + * .intr_alloc_flags = ESP_INTR_FLAG_LEVEL1, + * .dma_buf_count = 8, + * .dma_buf_len = 64 + * }; + * + * i2s_pin_config_t pin_config = { + * .bck_io_num = 26, + * .ws_io_num = 25, + * .data_out_num = 22, + * .data_in_num = I2S_PIN_NO_CHANGE + * }; + * + * i2s_driver_install(i2s_num, &i2s_config, 0, NULL); //install and start i2s driver + * + * i2s_set_pin(i2s_num, &pin_config); + * + * i2s_set_sample_rates(i2s_num, 22050); //set sample rates + * + * + * i2s_driver_uninstall(i2s_num); //stop & destroy i2s driver + *@endcode + * + * ----------------EXAMPLE USING I2S WITH DAC --------------------- + * @code{c} + * + * #include "freertos/queue.h" + * #define I2S_INTR_NUM 17 //choose one interrupt number from soc.h + * int i2s_num = 0; //i2s port number + * i2s_config_t i2s_config = { + * .mode = I2S_MODE_MASTER | I2S_MODE_TX | I2S_MODE_DAC_BUILT_IN, + * .sample_rate = 44100, + * .bits_per_sample = 8, // Only 8-bit DAC support + * .channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT, // + * .communication_format = I2S_COMM_FORMAT_I2S_MSB, + * .intr_alloc_flags = ESP_INTR_FLAG_LEVEL1, + * .dma_buf_count = 8, + * .dma_buf_len = 64 + * }; + * + * + * i2s_driver_install(i2s_num, &i2s_config, 0, NULL); //install and start i2s driver + * + * i2s_set_pin(i2s_num, NULL); //for internal DAC + * + * i2s_set_sample_rates(i2s_num, 22050); //set sample rates + * + * i2s_driver_uninstall(i2s_num); //stop & destroy i2s driver + *@endcode + *-----------------------------------------------------------------------------* + ***************************END OF EXAMPLE**********************************/ + +#ifdef __cplusplus +} +#endif + +#endif /* _DRIVER_I2S_H_ */ diff --git a/tools/sdk/include/esp32/soc/cpu.h b/tools/sdk/include/esp32/soc/cpu.h index aa471a17..2e0ac7de 100644 --- a/tools/sdk/include/esp32/soc/cpu.h +++ b/tools/sdk/include/esp32/soc/cpu.h @@ -104,4 +104,13 @@ void esp_cpu_stall(int cpu_id); */ void esp_cpu_unstall(int cpu_id); +/** + * @brief Returns true if a JTAG debugger is attached to CPU + * OCD (on chip debug) port. + * + * @note If "Make exception and panic handlers JTAG/OCD aware" + * is disabled, this function always returns false. + */ +bool esp_cpu_in_ocd_debug_mode(); + #endif diff --git a/tools/sdk/include/esp32/soc/i2c_reg.h b/tools/sdk/include/esp32/soc/i2c_reg.h index d5c9858a..9693ca5b 100644 --- a/tools/sdk/include/esp32/soc/i2c_reg.h +++ b/tools/sdk/include/esp32/soc/i2c_reg.h @@ -261,6 +261,8 @@ #define I2C_RXFIFO_FULL_THRHD_V 0x1F #define I2C_RXFIFO_FULL_THRHD_S 0 +#define I2C_DATA_APB_REG(i) (0x60013000 + (i) * 0x14000 + 0x001c) + #define I2C_DATA_REG(i) (REG_I2C_BASE(i) + 0x001c) /* I2C_FIFO_RDATA : RO ;bitpos:[7:0] ;default: 8'b0 ; */ /*description: The register represent the byte data read from rxfifo when use apb fifo access*/ diff --git a/tools/sdk/include/esp32/soc/i2c_struct.h b/tools/sdk/include/esp32/soc/i2c_struct.h index a29a9c52..ea50d6be 100644 --- a/tools/sdk/include/esp32/soc/i2c_struct.h +++ b/tools/sdk/include/esp32/soc/i2c_struct.h @@ -16,7 +16,7 @@ typedef volatile struct { union { struct { - uint32_t scl_low_period:14; /*This register is used to configure the low level width of SCL clock.*/ + uint32_t period:14; /*This register is used to configure the low level width of SCL clock.*/ uint32_t reserved14: 18; }; uint32_t val; @@ -58,7 +58,7 @@ typedef volatile struct { } status_reg; union { struct { - uint32_t tout: 20; /*This register is used to configure the max clock number of receiving a data.*/ + uint32_t tout: 20; /*This register is used to configure the max clock number of receiving a data, unit: APB clock cycle.*/ uint32_t reserved20:12; }; uint32_t val; @@ -282,7 +282,7 @@ typedef volatile struct { uint32_t reserved_f4; uint32_t date; /**/ uint32_t reserved_fc; - uint32_t fifo_start_addr; /*This the start address for ram when use apb nonfifo access.*/ + uint32_t ram_data[32]; /*This the start address for ram when use apb nonfifo access.*/ } i2c_dev_t; extern i2c_dev_t I2C0; extern i2c_dev_t I2C1; diff --git a/tools/sdk/include/lwip/lwipopts.h b/tools/sdk/include/lwip/lwipopts.h index 9c2dee35..dd182923 100755 --- a/tools/sdk/include/lwip/lwipopts.h +++ b/tools/sdk/include/lwip/lwipopts.h @@ -440,7 +440,7 @@ /** * LWIP_SO_RCVBUF==1: Enable SO_RCVBUF processing. */ -#define LWIP_SO_RCVBUF 1 +#define LWIP_SO_RCVBUF CONFIG_LWIP_SO_RCVBUF /** * SO_REUSE==1: Enable SO_REUSEADDR option. diff --git a/tools/sdk/include/lwip/port/lwipopts.h b/tools/sdk/include/lwip/port/lwipopts.h index 9c2dee35..dd182923 100755 --- a/tools/sdk/include/lwip/port/lwipopts.h +++ b/tools/sdk/include/lwip/port/lwipopts.h @@ -440,7 +440,7 @@ /** * LWIP_SO_RCVBUF==1: Enable SO_RCVBUF processing. */ -#define LWIP_SO_RCVBUF 1 +#define LWIP_SO_RCVBUF CONFIG_LWIP_SO_RCVBUF /** * SO_REUSE==1: Enable SO_REUSEADDR option. diff --git a/tools/sdk/ld/esp32.common.ld b/tools/sdk/ld/esp32.common.ld index aafafbb4..09b76344 100644 --- a/tools/sdk/ld/esp32.common.ld +++ b/tools/sdk/ld/esp32.common.ld @@ -99,7 +99,7 @@ SECTIONS *(.sbss2.*) *(.gnu.linkonce.sb2.*) *(.dynbss) - KEEP(*(.bss)) + *(.bss) *(.bss.*) *(.share.mem) *(.gnu.linkonce.b.*) @@ -111,17 +111,17 @@ SECTIONS .dram0.data : { _data_start = ABSOLUTE(.); - KEEP(*(.data)) - KEEP(*(.data.*)) - KEEP(*(.gnu.linkonce.d.*)) - KEEP(*(.data1)) - KEEP(*(.sdata)) - KEEP(*(.sdata.*)) - KEEP(*(.gnu.linkonce.s.*)) - KEEP(*(.sdata2)) - KEEP(*(.sdata2.*)) - KEEP(*(.gnu.linkonce.s2.*)) - KEEP(*(.jcr)) + *(.data) + *(.data.*) + *(.gnu.linkonce.d.*) + *(.data1) + *(.sdata) + *(.sdata.*) + *(.gnu.linkonce.s.*) + *(.sdata2) + *(.sdata2.*) + *(.gnu.linkonce.s2.*) + *(.jcr) *(.dram1 .dram1.*) *libesp32.a:panic.o(.rodata .rodata.*) _data_end = ABSOLUTE(.); diff --git a/tools/sdk/lib/libapp_update.a b/tools/sdk/lib/libapp_update.a index 807a8374e6c99f05882666be137a61d3fdc70357..95efe756134031a56066f1d7be3a44356e916729 100644 GIT binary patch delta 29 gcmdnlap#tAZPW`-taMivv5jzL))-}zMn0Hc=*Z~y=R delta 29 gcmdnlap#tAZP2BsDUmL?OGjzL))-}zMn0HbvZZU6uP diff --git a/tools/sdk/lib/libbootloader_support.a b/tools/sdk/lib/libbootloader_support.a index 7c155cb405d1b5d3218d7ef0a00e4a198e99ed4d..b498f424c1ff6917daff215334e8fe04974a8137 100644 GIT binary patch delta 4776 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 E0hzCMl>h($ delta 2892 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 delta 2502 zcmZ9Nc}$d75WrJcML^l*+;3Uf3p^^v9^6NPiV8{<+_j)$1$TiWSVRQzs7FzJtr*3k ze1=%tpe3m$l(vDXn(79tCZ(Z760K>=V%H-*6a%%jYNT)9fouPm1$z#3dR{318^K`^l%lC~5)&ggqtwsHFcDER(QEuuO)M{wckE)X5|cE4}0> zvu!FC56Enr_B6%a0)^M7H5uKA0F$SAUWsM|2I4)v?l1-6P%y0YKK%{1HsAEtc~K=s zl(lCGXu#=>WjYKvXOwN?791o9nG1ZtTp&&KVH7o&N};(_Hj22LY-GM1KE5y8GjodT ztOiky&j;!LzLpQDOROlf6bPv6xG!`a_gg%V(R~iT9*2K$JW~Ou znJ3JT1L9Y5Gd_V8E-VYQd%i^O7QP^@4nH|uDh-s-5*Xq{vM9P?!iACi1OF#GTiuAO z5K#C@;2{(JRUACL7TA87DWc{vK5W;qpa%t<;KRz{{KKFY4JY_ya;Wr`kL~3Ir&bQz zTjlk?P!dn-4bocS>3l{&c2;=4h^6%6QB@}7OBB18yZH<7SAjwo$%(66VA`w52zDpv z;0XmBJP{o3&8fk>On`yUf;WeAf)gVLTYvDTjT59)ile71t#dgc(Q7J{sRAVlu5`+w zuR-Zi#|b&r$UjQSFek)E`eO*Nrb=)%zZ{%7q4oQi4-{Vuy->-N)@R{zNJ&%Olkx~S z3j$;;Rc*`S{`RA)UY3RgS7+ho`(2f*qvk|0NqHazm?&pd^WAsBn@l;SeVz_nn7zNA7ciHzYvuuCTw^u98Gr zpI5@)f5Lovo`o+wO}_D!B-6y!F%#K3W`V6^cEKpKAp5a7SYE|47wpF(hE!zlM)3#S zq39e$z&VJV?!%x%>7_uoFGs@d%TdWdLl{NZ06-}_q9J96zG;s;ZFCyCoyNhnjFIXN zT8%{?QD72rErrHBQ)6CCV_s}`Ufd|HlhGu)x)c>#;-J_P-@cyu<6-6cmD(N;YJ0-T zZJd&`4<#oCJZJkHAM#TmSyB?nl9ESbxf_{unyO@^sY(G&RjOAlwZwwq*VNHnOd&0W z(ygySx;0Ib%_$iJMW@qRk|~KJbwbiRX;{*+WMFw6%RDTZAiXpHDV~H;10(gWy9E`MIQbP z_INI?$lxKW7cFl8o+=5n1@u8VpbvT@Wt>r{4qP&Hi7BK!l{c64(TBo_ZzGfEZr!X2E4cylBG*Me<`M8C zCBT93ikfdZ!9IA>{8pipQxZ$wuI|;9!TId?Bi8~Ia3sGn`YQKu-A^gw2tr3Sh>Hnp<< zvBkEkT5&&H-1Bd3RX6>nZzO8!tb?Y`&AC4_3d8&B8|H8q@*MB}s@^A`6LQzicy4jj d@CD89ZkhDyOXknDTX!)ty(o}#Wb5qM{{V0=Ir9Jj diff --git a/tools/sdk/lib/libdriver.a b/tools/sdk/lib/libdriver.a index 080bc19015c575644022946da8f0aafafa4d8165..642784b9056a37e0be153132bd3d82471aeb691f 100644 GIT binary patch delta 188686 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

FvIE(n?$0%w%48E!;!xlEOeLoB)}LSGH~3~6&z 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 delta 943 zcmZqMW_)12+60+;15*n_BTEGZ0|gL3CKVJ+3=ECH!U_po3=9k#85sCKP#M>MU|?i* zp$IdvtzaM<*CT8G)55?6#LRjTbi?)JTE;5r!9WFEk75X$T?hjTu9ab6qXK46&tSlg z>v2iYR6M;PGe15vucRn`^C{+P#?5&g@!V1%LA`u^NP-8Fh9(xq;M`%p`Gv66*XdmW zEF!F6f%e4#EZY|cu*Ne&_}kfoSg(JDvLCy%oi}6ytFvg|QOUM_MEt|Q2i01Ag3}$U(z5-;CN3c6-hN^ekDUep9Vfbl diff --git a/tools/sdk/lib/libesp32.a b/tools/sdk/lib/libesp32.a index 597ba3e5902f34122df9401353b542a2b54bd084..cb5d1ddfc698d95a53934ed9dce097bb09833fae 100644 GIT binary patch delta 23616 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 e7Q7YyxXvi}n{x{WL?(001%WM%n-X delta 198 zcmaFz+3v|_y9qL^2BsE<#v2vAxgf0OLaz2gE=C|`0%B$$X4ziI#X5fnM0#=|mw3C* zVb<+BhuIFyfQYq!jAjR74j|?PVlE)&24Wr{=H31=nvZ<~MBQ|tI`Qor-t(000m!Mt}eS diff --git a/tools/sdk/lib/libfreertos.a b/tools/sdk/lib/libfreertos.a index 0c58a80e26b12f0a736502119c45e197a69e10e6..8bbc4ee7f93f3f30ed31419999c301c3a1265918 100644 GIT binary patch delta 309 zcmZ2=SZ>u}xd}3?W`-u_mKzm)g(0lT^3oEUyM_DNA>7UK()wO-8S%|osS>3~+}_Wg^Q_KQFjOygk} z-#&W>lk^*e4)ONOOPGO}W&7nNtml^?B*eDw^JM$dk1TNRCfgHUh=3W`vUAVbbW|Xg uZU4{B-YUAln1-w*)lQCmm= delta 312 zcmZ2=SZ>u}xd}3?2BsE<#v2uVg(0lT^3oEUyM_DNA>7UK()wO(U^S+b6{N*BXQfJ% zBJ=0n@(4!o#kVu-F+OL93T*#i%2+0ckQLkB6vAlX4>7rY|6<1N`xi6q7lA66#=|bY zefAC}={FDoGoXFq?U$D@12N0?%S%|#FF{C%ZQtj~_N5j&Cgi2KVxCcdk*Dqk9x!C^#A~R=MXah delta 48 ucmZ27lY7Zb?g=t%2BsE<#^xK9_OU>j&Cgi2KVxCcdk*Dqk9x!C^#A~PYY-R! diff --git a/tools/sdk/lib/liblog.a b/tools/sdk/lib/liblog.a index 582c0815a89e1f46e94d69fc6630c160de057f83..9376a7cfd972226431154d9411cfe35c1e80d4f8 100644 GIT binary patch delta 28 hcmX@Ll=0M3#tAa4W`-u_mJ=1%vVj?98?Sr|1OSeW3J(AP delta 28 hcmX@Ll=0M3#tAa42BsE<#uF9SvVj@q8?Sr|1OSb!3H$&6 diff --git a/tools/sdk/lib/liblwip.a b/tools/sdk/lib/liblwip.a index 71d7881e6c532e75514392850bb29ff0a6414a03..2d71df1443fb0badd948043b702235a246fba62e 100644 GIT binary patch delta 930 zcmYk5T}V@57{_Uw`&7@F)4gZI3#FT=Xh%1;vqp;aWpzyDFj!i=YQYNb+LoF1iqu8ntp^(4wS4g9fd4??-uY;61uB&R?yfaffB^gQ17Xt^c@f^kn7JmpQ*(;Ia-bX=Ep2=X*zMBu%k zE1nQU4$BBauXLmP1feknv%YjvkRwaTh2KZ?2cT<6A2V&lK=1-58m^fo=c9V^7+^kH zCw*eE8YZR+tRFSbT;v1@IT&SyLv^QVNqh|~ zJ+|}z2+c9pYrCw9ujp_#U$OP~vFpIqQ&t7W7j3wn0r0HYy6=f_YA_n9kM9zM8f<%9 zUm5vt;DS9(4LfeKkPh1J*kl8YO*ZcD;cy~kLQs0!7;$kxFCVU!8dI+Yq1N76sXW99 zsO|DEyO3!uyS;K|yO0TaXX0i57?zh>nb1imnNP^M1Q%ag?D!+ER|?A`IFm(Ad?zfo z!1u5AUOunR+64KcO#QUSxHTqUD-il^f6~nTaV(9Lq(N!|gXCDe&8Qcz50mXFrW{aA zHJj+lYO0quE=@O&mqi$9Q-QgME%&3GK-ld(H_KjpY%YamCtl#iUr(dlR(?K{MMcr^ t;U)A%lt|8Qw&7Db#5P=0eVELT{2T>TN%Q94%qVU+mQXJFxgi1A{}=MgFP#7Y delta 929 zcmYk5UuaTs6vs)O|L46<=kHGTu+d9Y+zD7^2dF3@YOf0pKi{>p%c1-ix%LSyio%G zMP2nIEeT*TBq9jD)=lhdE~%LHwNt$0ND+154-x$V7#P>bOwAYwUSOnO(@M@q_2g%O z`Dlyqnb!8>XR7boG2`qdMu3omQECb6J59^qc`0!_3j>?X2`-zK>nK_FnW5~nn2z!? zZEpQdOJPtWiaa@LMNrLIgog~g9JPK-vREAeLF0=xGr~!zKz#lNY`3Y8B4grw9V|n( z3;&5`k{Y&Mk$IP(zQp`@2e`{#uEI3pl; zi@%*bt?jbgFXp%MG$HRzZ0et3vDnEH+9k^gv6NuRR~9G!)T9%}`2zCbyCJb1etdHd zvwQWb7i2GG`j<1tv@vOyAo$1m)J-+~IF?0H(jc^fL2xbJ;dCu5qGUDWf@;QXaxpro zZZ6EY({&0Ibx#R$kJ=wZ8G(@3b8e2OwZl}FJa~ake>gLw>vj=B`9bRh%(8*zz-`W1r>w>sRm7)c?rKr zvM#9P$TEqdWY(b|D1E4!~Om1vEnzf zK66x&!{v62r!QBjR01fL7KDKjp2n`hn*|{XLvqT zv=LA!Ewm^(xLvIXoMlAT0MAoJqpA@K!i_l&^*W?Q1`&vvJk1 zM4yS0*6ySkx=~cdvyoIgz9nOX={p>2mnN;;;|__eR8%|5Hpx|G^#M)1g;*HTK(Fd}P;y{W0tn`(LZhEZH~ z<6n!ZhL8g3na$3NLzQXB(xsuwj04PpCD$r5PLT;aoKojl6fbta%RpvDwg=f>Wc#4| zoo!Z6@|<#UJhZLalF4(TJlx*MAKME$7$+G_|AtL%AU(qH?#z4}Q@~?eD#y?4@`i|lh<-W9vSH4aw*1x?p~zmK*I delta 1385 zcmY+EYe^S0s_ ziea-#aC>UqlVzW`sO3*Cx8xtxbIHo~#qA925R6>1<$P4bzSO?y_+GW_ z!EP?;MURq)OYMr-A*PT$z;{oPYFf_3*MsnR9@Ck^JxTIMBUO zhVKw>h>oeE{r|J5S1?togFPfGM&oKJ8rMYV*K}M1>G-M(^m6qQ^5!7*dX?!Yvp}8k zkeJHvQoyeLSr?UrH^|CD(H_YHdqn%yL=U$}+J=)%A>SJIxpl#vj9~XK$8{|uj9_Wy(I5BHDt0Y81Bn0Q@3^OXK zClic4G6YUAvPROP9>N8d8=0aa5bQ>~I^%1l189`6{8YVBlg!9@NPRHI=&c&b8KG~+ zk913v^bQo>r7w!w_|k=e$&5`A%v|Q^W!(a?`ErfhEaFxP;bGe*K7T(W@&Luy6&_+& zimcg;;?<^RiXwX%!4J68S^R`FiM;U3^m&W#J|mi1DY0ngMHg=Z7jJI9&M2-t_Q0&M zQvyi0shXwbBKTWTGVWjm7o<8$0_}|8tvSz?cn>myU(rx$DGZfbZa!rcw;lRpG5HCp zljNVOING)bMVU0(R=$xXu;oHq`93mYw^QmHQ}N=!^Kukc6l+neL$MwPp4(;(q|PZn zUmo^+vlWwlqB`8}ncudDbTUpdnPX|2#)wzrhEoL>?~oXw7+66S1Gk!nGeTI+Um4rKGBR%e%E-iA000tO4MG3_ delta 37 pcmezInDfVD&IvNC2BsEXYym+fe5k+Qd*_kIjH906 zzWcksbM86ko_pVY8=k+C`qC$e^U!Z#XY8D`q*;{(w@dNGade|J@p2QmV5_ zsn_28|Jrb!QvbQ7Qqg<*ePi@pCnpQwTqHEVKSh?(xmc`4L ztzBDIGqbubIS_77)ivf?L7w?S`4nB3+*Mvz<~T^6YD|VbzV>!5ij5Ba)w616#>_Ea zh0Zlaug^74ynaCk%!;(2KY#*c*~kKl+9(cGY=#d_H$#W=&|0*Wob|@-^u%$kl+G`} zlftR`z{6vdD%=WsCYD7hsz{+#4WMo=9*6FysB(#3?b`-yZ6{xBhb21j9Oj2HznJrN zQ+RVX2aJK)g)q5rZ+1edf;Z_rLbU~5)OL|Q)=42k7hzD26WdBRJNZQHd|FChpySD$ zzXpbpT0EHE5VBy3-QebfyUc?Dw7dpJ zdL*ejCe;P1>{Ie}%;TGAPFnU*w@lVdD`u~{De^efOsd;Xz^+?yC%DAF>{7Hb7rjQ$ zV8X~p72NV+cKuX9N(P!f@Q%c+T0f|g5=8|n{n%qx)!&6hal;cZU?hoRQZo~gwwO#J@DmSZLlOq??>&||?#&TGBj ztVhgRY4%qbgf}NPt`{@i9NxC^33t$#NPCsF z<|c-?A*!+xwrQ_%+e6f-sx`18V$E$TbYogNU_Z^PQW1|@R>;vZjH8_LMJUo2nx64> zX54dk%(1@}#0vc?Wz0hvvojV4eIcZVVU`T@aH77xOY3Z19mIj#vr8*qUhh26R#cnb zWYF|vr>+cp96(iCJL&-bBCZ1s7iAvj&`tK3VrDr^l@qJNgmZEel~Mh0zLQNw{+xVz zsB)-^{Kdgqp{7KY*NR1eWT9!*#Ex%ts=BV54g%O>;aPzO19mKsV?cztKwx!U8nT0@nNaiZ!Iz-r^hF+ zp0<3+%(s7{?WA%LY9b6>VS*7f_ADgzpF!^m`B`Wd8VgK)J$hHDUx*e*_l>CB_%7iZR{cC6d9)mXiSX7;;T34G2ec%PLn zv7uchEj%lz!w%1&u1zkn*x)t6N5-+?QxjgAiwkQ&y8a6C=)$ zhZX@mD*1_-E^Ic zDBWOXv$82oA2Q5Dvkay66g3sC5{0Umymr|F=2p+bvDSa<8fnQ0;4YZ)(5taP* zd;jz&(hx~wC6ot%xhhH#`SA`eCC05wneMT#_wWlmd?T=3FW5in;kSG2cRRfE#oj9u zEKE2^g#ETGWCTVoNQnQ{kfsF1)h&xCm%exZkN z@!$?(N#d&>-0QJ-z34~fGxoR;Bvv-;HiQw;F%6i*k9n7C?-QOS1`XD^94@@ZWPRK zMO^Shz^#H=kv74s!aBj+oehGUfx85^19$uIHgPrUFnCH7oxm>=OSyUlbCur`%<3H` zmNFg@Oq-t*OGV!nO#ULVRQHnLlm;kcKG&o=+^<#BFT8|A$bf#O@}OVX{-AeRrne zukbqu%XFn#@zHYqta$~`-R2se`%J^7S9Mokc2oz=%}W9Qcf(3uHJSYp{VP-5UtwnS zr|PkedUJn3_n4g^SM}$a(-<8#7y2voRTzd$U?5;_f{&rM2JTI29|+)w>6U>CKbNOW z^@5-|IuP)GSgO=|b7mmo=Q%Aip8(Cl2|HmX3`YF1Or_?Sw-yFXd@!K9O~+t`@5VH< zXRzG=0?zFQGyM6WIXf6g+dEyUJIV|Umin(ivC3BD4F%G6&%ipAi4K*fEzDLbKgF~H zK2@#MU$ogiRI1y}D?=52Ym!n8W+##w8VcwRa}C^naF*?8#&E#5zQ)WOF87}Vxx+Lx z2F;G)K<2(0jIbUa{VEe~Ebu>wAG?R4k7Ry~pI=9@rfJX>nk~@nvy|$!9a@)jNB@%~ J8NXb+^4~3+OvnHL delta 4926 zcma)=dvI079mjX?&CP=Z^0<+EFITs=EX=fafSv!c64j>VnkYRFP7i`~G)n>{Y6> zU8&x_|G&H!QR+WSrsLf6(plg74O_N#nIG!Qc6er>H<&u)nOv;rm;=$Er>Z)2F4~cX zT6Jliu1@VJomX;I8AzRJ?1^5j22&4qexv4UHRPRFJ;w|*CiJ-RKYeq$s#QxaUop#` z{=IqfaG}mI#fJl-FcL5cCCy8Ss6sqw<)-Oyz=!3kBJ;@y0dwYX5WPBeX)5E$rHte^ zwNg4nVHS$+2_L5;HWj})aO7Fem00MF+u)v)hB~Y$fmw9yCZKLE4&reZ8xYZVc(#M1 zJLyk25$T>s(LaX%3HH~kV_Ume;T%bHpAPkVuI}Lz9K4*(Rz~}eN6vi#<3g44$G?QmQu~IzQz&s>XL7v89^o0 z53B&J#1-#=GcVf?h@rIU*%FTm|I>qh4NM3PBFz7e%-_KIkHHn&&dfGE=R<3=!l}cv ziFyd3zk&z%p~>EdL>A^(mom^6UPWmOgQMB<`A87uEw((iy&D`wvu;LLr)LopbNlsy z@pa^G-OirB;fUcE*>BzTvV#*aKXvP<`wWWM*3BD5rki8iH{az{T2%BBkHsbqW{1Z; zEgI+Sn>egqeJ!Zzk0JxW=w}Ry_ee_uoha@=BreS$fR4oz&NrI7^ZwC z-y}BL4V)q{Y<|%kNG*Ckq62Di$UA94_QLE$C|?((*9Q02;WY}I`^O8-{``#ajXveg zWP5|(6F{J-T5?o_refz5^PT+AnwU$3wn< zQbnm!(@o?rg~=He`dWaCLL8yYb|pd${<$IBHS>BGmY9Pw1x2gXeDEDkQ=jYA`vI0Q z4@@TneAJ-W0#cpbP^UVSy5njKz%sV-#Y0!yVZTeAwu_H$l9V^vN zmvdk4KF>aS)cXA}RsZ6V^dy(TY51gN;(m0NMLz?k(NCU)LO&Nlqo0dmANsj3G~9j` zNAQfHw4$(`%!Sj?cZ!t(4$Q_K@}#KSJk~eWTrT*cTl+HuPbYY`SFu5i`?nBh9v3)s8I|@GeR{L5! zVOTnhf;%m;FUkVs=x(Vqs|708eEs$1^2OfsdWU&UM{pBara2@GcZJds{J@wx$In%1 zrUS-_bOb*zes3L3kX%BqZQ8Z`FJqh(l`O=Sg&RjzqmWnP$ut(qmz3#sf32b#$>_kT4 z`Ety%)0GoB&MNVQ&92jxv2xTli-)|GjE-G+vfz)YH!G%0YzKayO&F@(Tsa*Haf@J& zqxgmQS!`xpkMS)k?pf}n|g*7Ih04)LHOh~kviqlyyf!0 z@8WS6=cfkW9@Kb+M;8Tj*bJNtc*>Q@`|9K*-)G*5PL3CWogCNFFZrvdUwA3~lCxXs z7v{a}q^5;_NfYl`Ck33(NkNCgPB=^5Xtunw)qLgV;2PQOa`qCQO_tf`y4Z?bW@qG1 zRJCN8ossLTy%!7h6*g^R%-3NuN660QV)D$Ktc{wB=N z-M=ix%f*a&5gj9{17`^@0p|)cJ2wb(@1_cK@1nx%zzN|_@GRkb!BxUL!1ZLwVq;P& zT>T1RW_3MT(z{8RnjK_G^?kzh?~2@3%f zyM_}!E;DFS!*O3)T&V+Q5LAOqmKpCz+}Arzsb8C!Bk}YN6P0T5m`4u9^a=Cbk%XtK z!Wk7)AyK@qX|9JjN-S`WQ-+ruc;hMc*^IR*0ECGDg1Nf3G?7s+}Dn~;tBKYSX{T8 a0SMBH%-_dKk(lBOGwuIFN;O?rw&vd%c}?>G diff --git a/tools/sdk/lib/libnghttp.a b/tools/sdk/lib/libnghttp.a index fac1ba7af5ba585399fdf4fbf450a383e64bd486..dcbb58aba1b918d42c5b9ac85e573b2345e16575 100644 GIT binary patch delta 428 zcmeC1?bkQkZ-NY~nW2e=(MCm0BQVQwv%it^W(ae#zmfRnbx%uD*+6Ox%_j#KiM88# zGj6x@W}1=%Q8WF039Cf=`|V6X%)I^mc9z9OND|xEYq45;K?Jq~Rrb3g8MS@ZE>?+3 zWPx+WY)|e$1S~+7Z9gZ#z9kqcF#SUbtN8Z$DeS-Xpa#yL%+4&0BD;Sb`+plG5sB@0 zUbC-qLN;=d9*0OE)QLa?B(`6!=eR6^q(^-F;Tas=dMF~<$2pjdAtIJQhl#g$|Kb2* zP9Ww2Vs0Sj0b<_m-M{$QeGm%8+Sj@9Z(rvou)`KCXk-8m!=@I2?M*F$H7W=}@$J$p X1s4lK1;Bo7zr9Ov`|Vvqn=b(XXKaz& delta 428 zcmeC1?bkQkZ-NY~fvJU|*+xZ8BQVQ!v%it^W(ae#zmfRnbx%uD*+6Pc%_j#KiM88# zGj6x@W}1=%Q8WF039Cf=`|V6X%)I^mc9z9OND|xEYq45;K?Jq~Rrb3g8MS@ZE>?+3 zh=2vi?Cs}_*`C}%5fEVC5)2iX{-K0beEa+q_TPF?1Lsd>XO>2h-M^0gzYUUz#P&O{ z*;hFs8@Wi2LnILDM4$l@+b`F1T$Vu6BfkCc432I+6p`%X9L&ZL5lf&;#oN1oaR4zV z5OV=BHxTmxG4J;7UwrI7V1;G|;NV*4#=m`?o4^iRWWlBuf$dE#f;B1#LGkUkz{R0ov4?l?bcA$9t0SLQ2 vP=kz{R0ov4?l?bcA$9t0SLQ2 vP={%b diff --git a/tools/sdk/lib/libopenssl.a b/tools/sdk/lib/libopenssl.a index ff15d24a3e513cc6cbc8081821953dcfaeb3972a..19a0350a82c3ab691fa1c984505c78b8e3c4871b 100644 GIT binary patch delta 126 zcmaEGg8#t@{s}UyW`-sfMjI8`c_FOLy1c)YAk1c6gYCKojH}}z-0gS!8CPdO*}Xp) pABVGn^_oo9;}zT96Toyw8Y-Ea!?Za8S<>b#lh0?E&I8Psl>w>SCvyM* delta 126 zcmaEGg8#t@{s}Uy2BsEb#lh0?E&I8Psl>w(dCu#ry diff --git a/tools/sdk/lib/libspi_flash.a b/tools/sdk/lib/libspi_flash.a index dae5efec90a6a502f4673646d87fce1a437e3e12..9b0aa552fc10e3ecbc273faff885634c1f99a135 100644 GIT binary patch delta 86 zcmeA>%i4FAb%G45nW2e=(MH8UW(aFCzn#S9e&%W`2zN8Towo~=8Q(NH6RIe_Nn$hq Q8~GHt9`Ws70gNtU05FvpKmY&$ delta 86 zcmeA>%i4FAb%G45fvJU|*+#`cW(aFCzn#S9e&%W`2zN8Towo~=8Q(NH6RIe_Nn$hq Q8~GHt9`Ws70gNtU054G(IsgCw diff --git a/tools/sdk/lib/libtcpip_adapter.a b/tools/sdk/lib/libtcpip_adapter.a index dab642d11f302b42eca34f56cbcd3125c5a9922e..1b4e4759ffbfb5fc1a6a514a89db86ad907e3de4 100644 GIT binary patch delta 33 kcmdlsn`PT diff --git a/tools/sdk/lib/libvfs.a b/tools/sdk/lib/libvfs.a index 3274ce81ce73dbabbcdf32d84f2e72088773a967..e0ff0888149cb8b1c0945c293be246158bd435ec 100644 GIT binary patch delta 40 mcmdn?o_X7Q<_R*aW`-sfMjI6s86m9A?u^oNpv?5S{!su2Qw$*h delta 40 mcmdn?o_X7Q<_R*a2BsEh5nF%tiW`-sfMjI7Bb3j;=FII>zHsDl)^CUL=>eqWhxSKClu-hTYeBE|j zAI=rueB;>)St$45Gl}hUSs3G?=C?B{GHz#7WO9E6k)ICaOKeZ&W^T8J2yFl8#w;xd zWecV r1SGaw=CScZLu9&Q9vje$bJ@a8Au6^Xyu?h5nF%ti2BsEzHsDl)^CUL=>eqWhxSKClu-hTYeBE|j zAHtpf(T!PR^UY_=Ws&&X=dv)yLv3hhRAk)FsL1603aS9em)M@l&D?Gc5!eniL0S&V z7EEPUHbYhzIGfqt4Iv=Dea%B=i!hi#D~tFx3l%os5X&kfh`@HnR+ir` zF!m`H?no$GP?>eIB2*JljrjHhF02#UkOgv1vua4g1WvI?Y~T2d^?edd0HkG)CtHFF oRN&wxHi_+)d2IZ!Pyq|1&SeWXg{asL6sXrls21NE!~Q@904x7Y#^d??5Y}dEf!lHb&oT=0 delta 36 jcmbOhH!W_046A{ug`wF*#f1>Y#^d??5Y}dEf!lHb&f*I2