From 55937fb701a70645a3b32c4b0c032ba44ab7314f Mon Sep 17 00:00:00 2001 From: Tuan PM Date: Mon, 31 Aug 2015 12:10:45 +0700 Subject: [PATCH] update support sdk 1.3, not fully tested --- .gitmodules | 3 + Makefile | 4 +- tools/esptool | 1 + tools/esptool.py | 492 ---------------------------------------------- tools/makefile.sh | 11 -- tools/xxd.exe | Bin 70144 -> 0 bytes 6 files changed, 6 insertions(+), 505 deletions(-) create mode 100644 .gitmodules create mode 160000 tools/esptool delete mode 100755 tools/esptool.py delete mode 100644 tools/makefile.sh delete mode 100644 tools/xxd.exe diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..642970c --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "tools/esptool"] + path = tools/esptool + url = https://github.com/themadinventor/esptool.git diff --git a/Makefile b/Makefile index cae11fd..a698af0 100644 --- a/Makefile +++ b/Makefile @@ -9,7 +9,7 @@ # relative to the project directory BUILD_BASE = build FW_BASE = firmware -ESPTOOL = tools/esptool.py +ESPTOOL = tools/esptool/esptool.py # name for the target project @@ -54,7 +54,7 @@ ifeq ($(OS),Windows_NT) OBJCOPY = xtensa-lx106-elf-objcopy endif ESPPORT ?= com1 - SDK_BASE ?= c:/Espressif/ESP8266_SDK + SDK_BASE ?= C:\Espressif\esp_iot_sdk_v1.3.0 ifeq ($(PROCESSOR_ARCHITECTURE),AMD64) # ->AMD64 endif diff --git a/tools/esptool b/tools/esptool new file mode 160000 index 0000000..d0d6c5f --- /dev/null +++ b/tools/esptool @@ -0,0 +1 @@ +Subproject commit d0d6c5f6b9fbfb9725ced14f9f201b1be8b2e3d5 diff --git a/tools/esptool.py b/tools/esptool.py deleted file mode 100755 index 130e80f..0000000 --- a/tools/esptool.py +++ /dev/null @@ -1,492 +0,0 @@ -#!/usr/bin/env python -# -# ESP8266 ROM Bootloader Utility -# https://github.com/themadinventor/esptool -# -# Copyright (C) 2014 Fredrik Ahlberg -# -# 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 -# Foundation; either version 2 of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 Franklin -# Street, Fifth Floor, Boston, MA 02110-1301 USA. - -import sys -import struct -import serial -import math -import time -import argparse -import os -import subprocess - -class ESPROM: - - # These are the currently known commands supported by the ROM - ESP_FLASH_BEGIN = 0x02 - ESP_FLASH_DATA = 0x03 - ESP_FLASH_END = 0x04 - ESP_MEM_BEGIN = 0x05 - ESP_MEM_END = 0x06 - ESP_MEM_DATA = 0x07 - ESP_SYNC = 0x08 - ESP_WRITE_REG = 0x09 - ESP_READ_REG = 0x0a - - # Maximum block sized for RAM and Flash writes, respectively. - ESP_RAM_BLOCK = 0x1800 - ESP_FLASH_BLOCK = 0x100 - - # Default baudrate. The ROM auto-bauds, so we can use more or less whatever we want. - ESP_ROM_BAUD = 115200 - - # First byte of the application image - ESP_IMAGE_MAGIC = 0xe9 - - # Initial state for the checksum routine - ESP_CHECKSUM_MAGIC = 0xef - - # OTP ROM addresses - ESP_OTP_MAC0 = 0x3ff00050 - ESP_OTP_MAC1 = 0x3ff00054 - - def __init__(self, port = 0, baud = ESP_ROM_BAUD): - self._port = serial.Serial(port, baud) - - """ Read bytes from the serial port while performing SLIP unescaping """ - def read(self, length = 1): - b = '' - while len(b) < length: - c = self._port.read(1) - if c == '\xdb': - c = self._port.read(1) - if c == '\xdc': - b = b + '\xc0' - elif c == '\xdd': - b = b + '\xdb' - else: - raise Exception('Invalid SLIP escape') - else: - b = b + c - return b - - """ Write bytes to the serial port while performing SLIP escaping """ - def write(self, packet): - buf = '\xc0' - for b in packet: - if b == '\xc0': - buf += '\xdb\xdc' - elif b == '\xdb': - buf += '\xdb\xdd' - else: - buf += b - buf += '\xc0' - self._port.write(buf) - - """ Calculate checksum of a blob, as it is defined by the ROM """ - @staticmethod - def checksum(data, state = ESP_CHECKSUM_MAGIC): - for b in data: - state ^= ord(b) - return state - - """ Send a request and read the response """ - def command(self, op = None, data = None, chk = 0): - if op: - # Construct and send request - pkt = struct.pack(' 16: - raise Exception('Invalid firmware image') - - for i in xrange(segments): - (offset, size) = struct.unpack(' 0x40200000 or offset < 0x3ffe0000 or size > 65536: - raise Exception('Suspicious segment %x,%d' % (offset, size)) - self.segments.append((offset, size, f.read(size))) - - # Skip the padding. The checksum is stored in the last byte so that the - # file is a multiple of 16 bytes. - align = 15-(f.tell() % 16) - f.seek(align, 1) - - self.checksum = ord(f.read(1)) - - def add_segment(self, addr, data): - # Data should be aligned on word boundary - l = len(data) - if l % 4: - data += b"\x00" * (4 - l % 4) - self.segments.append((addr, len(data), data)) - - def save(self, filename): - f = file(filename, 'wb') - f.write(struct.pack(' 0: - esp.mem_block(data[0:esp.ESP_RAM_BLOCK], seq) - data = data[esp.ESP_RAM_BLOCK:] - seq += 1 - print 'done!' - - print 'All segments done, executing at %08x' % image.entrypoint - esp.mem_finish(image.entrypoint) - - elif args.operation == 'read_mem': - print '0x%08x = 0x%08x' % (args.address, esp.read_reg(args.address)) - - elif args.operation == 'write_mem': - esp.write_reg(args.address, args.value, args.mask, 0) - print 'Wrote %08x, mask %08x to %08x' % (args.value, args.mask, args.address) - - elif args.operation == 'dump_mem': - f = file(args.filename, 'wb') - for i in xrange(args.size/4): - d = esp.read_reg(args.address+(i*4)) - f.write(struct.pack(' 0: - print '\rWriting at 0x%08x... (%d %%)' % (address + seq*esp.ESP_FLASH_BLOCK, 100*(seq+1)/blocks), - sys.stdout.flush() - block = image[0:esp.ESP_FLASH_BLOCK] - block = block + '\xe0' * (esp.ESP_FLASH_BLOCK-len(block)) - esp.flash_block(block, seq) - image = image[esp.ESP_FLASH_BLOCK:] - seq += 1 - print - print '\nLeaving...' - esp.flash_finish(False) - - elif args.operation == 'run': - esp.run() - - elif args.operation == 'image_info': - image = ESPFirmwareImage(args.filename) - print ('Entry point: %08x' % image.entrypoint) if image.entrypoint != 0 else 'Entry point not set' - print '%d segments' % len(image.segments) - print - checksum = ESPROM.ESP_CHECKSUM_MAGIC - for (idx, (offset, size, data)) in enumerate(image.segments): - print 'Segment %d: %5d bytes at %08x' % (idx+1, size, offset) - checksum = ESPROM.checksum(data, checksum) - print - print 'Checksum: %02x (%s)' % (image.checksum, 'valid' if image.checksum == checksum else 'invalid!') - - elif args.operation == 'make_image': - image = ESPFirmwareImage() - if len(args.segfile) == 0: - raise Exception('No segments specified') - if len(args.segfile) != len(args.segaddr): - raise Exception('Number of specified files does not match number of specified addresses') - for (seg, addr) in zip(args.segfile, args.segaddr): - data = file(seg, 'rb').read() - image.add_segment(addr, data) - image.entrypoint = args.entrypoint - image.save(args.output) - - elif args.operation == 'elf2image': - if args.output is None: - args.output = args.input + '-' - e = ELFFile(args.input) - image = ESPFirmwareImage() - image.entrypoint = e.get_symbol_addr("call_user_start") - for section, start in ((".text", "_text_start"), (".data", "_data_start"), (".rodata", "_rodata_start")): - data = e.load_section(section) - image.add_segment(e.get_symbol_addr(start), data) - image.save(args.output + "0x00000.bin") - data = e.load_section(".irom0.text") - off = e.get_symbol_addr("_irom0_text_start") - 0x40200000 - assert off >= 0 - f = open(args.output + "0x%05x.bin" % off, "wb") - f.write(data) - f.close() - - elif args.operation == 'read_mac': - mac0 = esp.read_reg(esp.ESP_OTP_MAC0) - mac1 = esp.read_reg(esp.ESP_OTP_MAC1) - print 'MAC: 18:fe:34:%02x:%02x:%02x' % ((mac1 >> 8) & 0xff, mac1 & 0xff, (mac0 >> 24) & 0xff) diff --git a/tools/makefile.sh b/tools/makefile.sh deleted file mode 100644 index 5b35868..0000000 --- a/tools/makefile.sh +++ /dev/null @@ -1,11 +0,0 @@ - -# -# Generate the certificates and keys for encrypt. -# - -# set default cert for use in the client -xxd -i client.cer | sed -e \ - "s/client_cer/default_certificate/" > cert.h -# set default key for use in the server -xxd -i server.key_1024 | sed -e \ - "s/server_key_1024/default_private_key/" > private_key.h diff --git a/tools/xxd.exe b/tools/xxd.exe deleted file mode 100644 index d102b464d73958c80d1ddf9b1160ebdcdd7d413d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70144 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