mirror of https://github.com/jeelabs/esp-link.git
parent
d20c343329
commit
41c4726edf
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,14 @@ |
||||
// Copyright (c) 2016-2017 by Danny Backx, see LICENSE.txt in the esp-link repo
|
||||
|
||||
#ifndef CGIMEGA_H |
||||
#define CGIMEGA_H |
||||
|
||||
#include <httpd.h> |
||||
|
||||
int ICACHE_FLASH_ATTR cgiMegaSync(HttpdConnData *connData); |
||||
int ICACHE_FLASH_ATTR cgiMegaData(HttpdConnData *connData); |
||||
int ICACHE_FLASH_ATTR cgiMegaRead(HttpdConnData *connData); |
||||
int ICACHE_FLASH_ATTR cgiMegaFuse(HttpdConnData *connData); |
||||
int ICACHE_FLASH_ATTR cgiMegaRebootMCU(HttpdConnData *connData); |
||||
|
||||
#endif |
@ -0,0 +1,114 @@ |
||||
//**** ATMEL AVR - A P P L I C A T I O N N O T E ************************
|
||||
//*
|
||||
//* Title: AVR068 - STK500 Communication Protocol
|
||||
//* Filename: command.h
|
||||
//* Version: 1.0
|
||||
//* Last updated: 31.01.2005
|
||||
//*
|
||||
//* Support E-mail: avr@atmel.com
|
||||
//*
|
||||
//**************************************************************************
|
||||
|
||||
// *****************[ STK message constants ]***************************
|
||||
|
||||
#define MESSAGE_START 0x1B //= ESC = 27 decimal
|
||||
#define TOKEN 0x0E |
||||
|
||||
// *****************[ STK general command constants ]**************************
|
||||
|
||||
#define CMD_SIGN_ON 0x01 |
||||
#define CMD_SET_PARAMETER 0x02 |
||||
#define CMD_GET_PARAMETER 0x03 |
||||
#define CMD_SET_DEVICE_PARAMETERS 0x04 |
||||
#define CMD_OSCCAL 0x05 |
||||
#define CMD_LOAD_ADDRESS 0x06 |
||||
#define CMD_FIRMWARE_UPGRADE 0x07 |
||||
|
||||
|
||||
// *****************[ STK ISP command constants ]******************************
|
||||
|
||||
#define CMD_ENTER_PROGMODE_ISP 0x10 |
||||
#define CMD_LEAVE_PROGMODE_ISP 0x11 |
||||
#define CMD_CHIP_ERASE_ISP 0x12 |
||||
#define CMD_PROGRAM_FLASH_ISP 0x13 |
||||
#define CMD_READ_FLASH_ISP 0x14 |
||||
#define CMD_PROGRAM_EEPROM_ISP 0x15 |
||||
#define CMD_READ_EEPROM_ISP 0x16 |
||||
#define CMD_PROGRAM_FUSE_ISP 0x17 |
||||
#define CMD_READ_FUSE_ISP 0x18 |
||||
#define CMD_PROGRAM_LOCK_ISP 0x19 |
||||
#define CMD_READ_LOCK_ISP 0x1A |
||||
#define CMD_READ_SIGNATURE_ISP 0x1B |
||||
#define CMD_READ_OSCCAL_ISP 0x1C |
||||
#define CMD_SPI_MULTI 0x1D |
||||
|
||||
// *****************[ STK PP command constants ]*******************************
|
||||
|
||||
#define CMD_ENTER_PROGMODE_PP 0x20 |
||||
#define CMD_LEAVE_PROGMODE_PP 0x21 |
||||
#define CMD_CHIP_ERASE_PP 0x22 |
||||
#define CMD_PROGRAM_FLASH_PP 0x23 |
||||
#define CMD_READ_FLASH_PP 0x24 |
||||
#define CMD_PROGRAM_EEPROM_PP 0x25 |
||||
#define CMD_READ_EEPROM_PP 0x26 |
||||
#define CMD_PROGRAM_FUSE_PP 0x27 |
||||
#define CMD_READ_FUSE_PP 0x28 |
||||
#define CMD_PROGRAM_LOCK_PP 0x29 |
||||
#define CMD_READ_LOCK_PP 0x2A |
||||
#define CMD_READ_SIGNATURE_PP 0x2B |
||||
#define CMD_READ_OSCCAL_PP 0x2C |
||||
|
||||
#define CMD_SET_CONTROL_STACK 0x2D |
||||
|
||||
// *****************[ STK HVSP command constants ]*****************************
|
||||
|
||||
#define CMD_ENTER_PROGMODE_HVSP 0x30 |
||||
#define CMD_LEAVE_PROGMODE_HVSP 0x31 |
||||
#define CMD_CHIP_ERASE_HVSP 0x32 |
||||
#define CMD_PROGRAM_FLASH_HVSP 0x33 |
||||
#define CMD_READ_FLASH_HVSP 0x34 |
||||
#define CMD_PROGRAM_EEPROM_HVSP 0x35 |
||||
#define CMD_READ_EEPROM_HVSP 0x36 |
||||
#define CMD_PROGRAM_FUSE_HVSP 0x37 |
||||
#define CMD_READ_FUSE_HVSP 0x38 |
||||
#define CMD_PROGRAM_LOCK_HVSP 0x39 |
||||
#define CMD_READ_LOCK_HVSP 0x3A |
||||
#define CMD_READ_SIGNATURE_HVSP 0x3B |
||||
#define CMD_READ_OSCCAL_HVSP 0x3C |
||||
|
||||
// *****************[ STK status constants ]***************************
|
||||
|
||||
// Success
|
||||
#define STATUS_CMD_OK 0x00 |
||||
|
||||
// Warnings
|
||||
#define STATUS_CMD_TOUT 0x80 |
||||
#define STATUS_RDY_BSY_TOUT 0x81 |
||||
#define STATUS_SET_PARAM_MISSING 0x82 |
||||
|
||||
// Errors
|
||||
#define STATUS_CMD_FAILED 0xC0 |
||||
#define STATUS_CKSUM_ERROR 0xC1 |
||||
#define STATUS_CMD_UNKNOWN 0xC9 |
||||
|
||||
// *****************[ STK parameter constants ]***************************
|
||||
#define PARAM_BUILD_NUMBER_LOW 0x80 |
||||
#define PARAM_BUILD_NUMBER_HIGH 0x81 |
||||
#define PARAM_HW_VER 0x90 |
||||
#define PARAM_SW_MAJOR 0x91 |
||||
#define PARAM_SW_MINOR 0x92 |
||||
#define PARAM_VTARGET 0x94 |
||||
#define PARAM_VADJUST 0x95 |
||||
#define PARAM_OSC_PSCALE 0x96 |
||||
#define PARAM_OSC_CMATCH 0x97 |
||||
#define PARAM_SCK_DURATION 0x98 |
||||
#define PARAM_TOPCARD_DETECT 0x9A |
||||
#define PARAM_STATUS 0x9C |
||||
#define PARAM_DATA 0x9D |
||||
#define PARAM_RESET_POLARITY 0x9E |
||||
#define PARAM_CONTROLLER_INIT 0x9F |
||||
|
||||
// *****************[ STK answer constants ]***************************
|
||||
|
||||
#define ANSWER_CKSUM_ERROR 0xB0 |
||||
|
@ -0,0 +1,111 @@ |
||||
#! /bin/bash |
||||
# |
||||
# Flash an Arduino Mega with STK500v2 using the esp-link built-in programmer |
||||
# Basically we first reset the AVR and get in sync, and then send the hex file |
||||
# |
||||
# ---------------------------------------------------------------------------- |
||||
# "THE BEER-WARE LICENSE" (Revision 42): |
||||
# Thorsten von Eicken wrote this file. As long as you retain |
||||
# this notice you can do whatever you want with this stuff. If we meet some day, |
||||
# and you think this stuff is worth it, you can buy me a beer in return. |
||||
# ---------------------------------------------------------------------------- |
||||
|
||||
show_help() { |
||||
cat <<EOT |
||||
Usage: ${0##*/} [-options...] hostname sketch.hex |
||||
Flash the Mega running optiboot attached to esp-link with the sketch. |
||||
Note : this is for stk500v2 MCUs, use avrflash for Arduino Uno etc instead. |
||||
-v Be verbose |
||||
-h show this help |
||||
|
||||
Example: ${0##*/} -v esp-link mysketch.hex |
||||
${0##*/} 192.168.4.1 mysketch.hex |
||||
EOT |
||||
} |
||||
|
||||
if ! which curl >/dev/null; then |
||||
echo "ERROR: Cannot find curl: it is required for this script." >&2 |
||||
exit 1 |
||||
fi |
||||
|
||||
start=`date +%s` |
||||
|
||||
# ===== Parse arguments |
||||
|
||||
verbose= |
||||
|
||||
while getopts "hvx:" opt; do |
||||
case "$opt" in |
||||
h) show_help; exit 0 ;; |
||||
v) verbose=1 ;; |
||||
x) foo="$OPTARG" ;; |
||||
'?') show_help >&2; exit 1 ;; |
||||
esac |
||||
done |
||||
|
||||
# Shift off the options and optional --. |
||||
shift "$((OPTIND-1))" |
||||
|
||||
# Get the fixed arguments |
||||
if [[ $# != 2 ]]; then |
||||
show_help >&2 |
||||
exit 1 |
||||
fi |
||||
hostname=$1 |
||||
hex=$2 |
||||
|
||||
re='[-A-Za-z0-9.]+' |
||||
if [[ ! "$hostname" =~ $re ]]; then |
||||
echo "ERROR: hostname ${hostname} is not a valid hostname or ip address" >&2 |
||||
exit 1 |
||||
fi |
||||
|
||||
if [[ ! -r "$hex" ]]; then |
||||
echo "ERROR: cannot read hex file ($hex)" >&2 |
||||
exit 1 |
||||
fi |
||||
|
||||
# ===== Get AVR in sync |
||||
|
||||
[[ -n "$verbose" ]] && echo "Resetting AVR with http://$hostname/pgmmega/sync" >&2 |
||||
v=; [[ -n "$verbose" ]] && v=-v |
||||
sync=`curl -m 10 $v -s -w '%{http_code}' -XPOST "http://$hostname/pgmmega/sync"` |
||||
if [[ $? != 0 || "$sync" != 204 ]]; then |
||||
echo "Error resetting AVR" >&2 |
||||
exit 1 |
||||
fi |
||||
|
||||
while true; do |
||||
sync=`curl -m 10 $v -s "http://$hostname/pgmmega/sync"` |
||||
if [[ $? != 0 ]]; then |
||||
echo "Error checking sync" >&2 |
||||
exit 1 |
||||
fi |
||||
case "$sync" in |
||||
SYNC*) |
||||
echo "AVR in $sync" >&2 |
||||
break;; |
||||
"NOT READY"*) |
||||
[[ -n "$verbose" ]] && echo " Waiting for sync..." >&2 |
||||
;; |
||||
*) |
||||
echo "Error checking sync: $sync" >&2 |
||||
exit 1 |
||||
;; |
||||
esac |
||||
sleep 0.1 |
||||
done |
||||
|
||||
# ===== Send HEX file |
||||
|
||||
[[ -n "$verbose" ]] && echo "Sending HEX file for programming" >&2 |
||||
sync=`curl -m 10 $v -s -g -d "@$hex" "http://$hostname/pgmmega/upload"` |
||||
echo $sync |
||||
if [[ $? != 0 || ! "$sync" =~ ^Success ]]; then |
||||
echo "Error programming AVR" >&2 |
||||
exit 1 |
||||
fi |
||||
|
||||
sec=$(( `date +%s` - $start )) |
||||
echo "Success, took $sec seconds" >&2 |
||||
exit 0 |
Loading…
Reference in new issue