Commit 9cab7513 authored by Vowstar's avatar Vowstar
Browse files

Merge pull request #1 from MarsTechHAN/master

Update to MarsTechHAN's nodemcu-firmware
parents a2d1e5ff ad1ec8fb
/*
* custom_at.h
*
* This file is part of Espressif's AT+ command set program.
* Copyright (C) 2013 - 2016, Espressif Systems
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of version 3 of the GNU General Public License as
* published by the Free Software Foundation.
*
* 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, see <http://www.gnu.org/licenses/>.
*/
#ifndef CUSTOM_AT_H_
#define CUSTOM_AT_H_
#include "c_types.h"
typedef struct
{
char *at_cmdName;
int8_t at_cmdLen;
void (*at_testCmd)(uint8_t id);
void (*at_queryCmd)(uint8_t id);
void (*at_setupCmd)(uint8_t id, char *pPara);
void (*at_exeCmd)(uint8_t id);
}at_funcationType;
/**
* @brief Response "OK" to uart.
* @param None
* @retval None
*/
void at_response_ok(void);
/**
* @brief Response "ERROR" to uart.
* @param events: no used
* @retval None
*/
void at_response_error(void);
/**
* @brief Task of process command or txdata.
* @param custom_at_cmd_array: the array of at cmd that custom defined
* cmd_num : the num of at cmd that custom defined
* @retval None
*/
void at_cmd_array_regist(at_funcationType *custom_at_cmd_array,uint32 cmd_num);
/**
* @brief get digit form at cmd line.the maybe alter pSrc
* @param p_src: at cmd line string
* result:the buffer to be placed result
* err : err num
* @retval TRUE:
* FALSE:
*/
bool at_get_next_int_dec(char **p_src,int*result,int* err);
/**
* @brief get string form at cmd line.the maybe alter pSrc
* @param p_dest: the buffer to be placed result
* p_src: at cmd line string
* max_len :max len of string excepted to get
* @retval None
*/
int32 at_data_str_copy(char *p_dest, char **p_src, int32 max_len);
/**
* @brief initialize at module
* @param None
* @retval None
*/
void at_init(void);
/**
* @brief print string to at port
* @param string
* @retval None
*/
void at_port_print(const char *str);
#endif
...@@ -16,6 +16,7 @@ typedef unsigned long uint32_t; ...@@ -16,6 +16,7 @@ typedef unsigned long uint32_t;
typedef signed long sint32_t; typedef signed long sint32_t;
typedef signed long int32_t; typedef signed long int32_t;
typedef signed long long sint64_t; typedef signed long long sint64_t;
typedef signed long long int64_t;
typedef unsigned long long uint64_t; typedef unsigned long long uint64_t;
typedef unsigned long long u_int64_t; typedef unsigned long long u_int64_t;
typedef float real32_t; typedef float real32_t;
...@@ -78,6 +79,7 @@ typedef enum { ...@@ -78,6 +79,7 @@ typedef enum {
#ifdef ICACHE_FLASH #ifdef ICACHE_FLASH
#define ICACHE_FLASH_ATTR __attribute__((section(".irom0.text"))) #define ICACHE_FLASH_ATTR __attribute__((section(".irom0.text")))
#define ICACHE_RODATA_ATTR __attribute__((section(".irom.text")))
#else #else
#define ICACHE_FLASH_ATTR #define ICACHE_FLASH_ATTR
#endif /* ICACHE_FLASH */ #endif /* ICACHE_FLASH */
......
...@@ -91,6 +91,7 @@ struct espconn { ...@@ -91,6 +91,7 @@ struct espconn {
enum espconn_option{ enum espconn_option{
ESPCONN_REUSEADDR = 1, ESPCONN_REUSEADDR = 1,
ESPCONN_NODELAY,
ESPCONN_END ESPCONN_END
}; };
...@@ -371,5 +372,21 @@ sint8 espconn_igmp_join(ip_addr_t *host_ip, ip_addr_t *multicast_ip); ...@@ -371,5 +372,21 @@ sint8 espconn_igmp_join(ip_addr_t *host_ip, ip_addr_t *multicast_ip);
*******************************************************************************/ *******************************************************************************/
sint8 espconn_igmp_leave(ip_addr_t *host_ip, ip_addr_t *multicast_ip); sint8 espconn_igmp_leave(ip_addr_t *host_ip, ip_addr_t *multicast_ip);
/******************************************************************************
* FunctionName : espconn_recv_hold
* Description : hold tcp receive
* Parameters : espconn -- espconn to hold
* Returns : none
*******************************************************************************/
sint8 espconn_recv_hold(struct espconn *pespconn);
/******************************************************************************
* FunctionName : espconn_recv_unhold
* Description : unhold tcp receive
* Parameters : espconn -- espconn to unhold
* Returns : none
*******************************************************************************/
sint8 espconn_recv_unhold(struct espconn *pespconn);
#endif #endif
...@@ -52,6 +52,11 @@ struct ip_info { ...@@ -52,6 +52,11 @@ struct ip_info {
#define ip4_addr3_16(ipaddr) ((uint16)ip4_addr3(ipaddr)) #define ip4_addr3_16(ipaddr) ((uint16)ip4_addr3(ipaddr))
#define ip4_addr4_16(ipaddr) ((uint16)ip4_addr4(ipaddr)) #define ip4_addr4_16(ipaddr) ((uint16)ip4_addr4(ipaddr))
/** 255.255.255.255 */
#define IPADDR_NONE ((uint32)0xffffffffUL)
/** 0.0.0.0 */
#define IPADDR_ANY ((uint32)0x00000000UL)
uint32 ipaddr_addr(const char *cp); uint32 ipaddr_addr(const char *cp);
#define IP2STR(ipaddr) ip4_addr1_16(ipaddr), \ #define IP2STR(ipaddr) ip4_addr1_16(ipaddr), \
......
...@@ -44,5 +44,14 @@ ...@@ -44,5 +44,14 @@
#define os_sprintf ets_sprintf #define os_sprintf ets_sprintf
#define os_update_cpu_frequency ets_update_cpu_frequency #define os_update_cpu_frequency ets_update_cpu_frequency
#ifdef USE_OPTIMIZE_PRINTF
#define os_printf(fmt, ...) do { \
static const char flash_str[] ICACHE_RODATA_ATTR = fmt; \
os_printf_plus(flash_str, ##__VA_ARGS__); \
} while(0)
#else
#define os_printf os_printf_plus
#endif
#endif #endif
#ifndef __PING_H__
#define __PING_H__
typedef void (* ping_recv_function)(void* arg, void *pdata);
typedef void (* ping_sent_function)(void* arg, void *pdata);
struct ping_option{
uint32 count;
uint32 ip;
uint32 coarse_time;
ping_recv_function recv_function;
ping_sent_function sent_function;
void* reverse;
};
struct ping_resp{
uint32 total_count;
uint32 resp_time;
uint32 seqno;
uint32 timeout_count;
uint32 bytes;
uint32 total_bytes;
uint32 total_time;
sint8 ping_err;
};
bool ping_start(struct ping_option *ping_opt);
bool ping_regist_recv(struct ping_option *ping_opt, ping_recv_function ping_recv);
bool ping_regist_sent(struct ping_option *ping_opt, ping_sent_function ping_sent);
#endif /* __PING_H__ */
/*
* Copyright (C) 2015 -2018 Espressif System
*
*/
#ifndef __SMARTCONFIG_H__
#define __SMARTCONFIG_H__
typedef void (*sc_callback_t)(void *data);
typedef enum {
SC_STATUS_FIND_CHANNEL = 0,
SC_STATUS_GETTING_SSID_PSWD,
SC_STATUS_GOT_SSID_PSWD,
SC_STATUS_LINK,
} sc_status;
typedef enum {
SC_TYPE_ESPTOUCH = 0,
SC_TYPE_AIRKISS,
} sc_type;
sc_status smartconfig_get_status(void);
const char *smartconfig_get_version(void);
bool smartconfig_start(sc_type type, sc_callback_t cb);
bool smartconfig_stop(void);
#endif
...@@ -24,8 +24,6 @@ typedef struct{ ...@@ -24,8 +24,6 @@ typedef struct{
#define SPI_FLASH_SEC_SIZE 4096 #define SPI_FLASH_SEC_SIZE 4096
uint32 spi_flash_get_id(void); uint32 spi_flash_get_id(void);
SpiFlashOpResult spi_flash_read_status(uint32 *status);
SpiFlashOpResult spi_flash_write_status(uint32 status_value);
SpiFlashOpResult spi_flash_erase_sector(uint16 sec); SpiFlashOpResult spi_flash_erase_sector(uint16 sec);
SpiFlashOpResult spi_flash_write(uint32 des_addr, uint32 *src_addr, uint32 size); SpiFlashOpResult spi_flash_write(uint32 des_addr, uint32 *src_addr, uint32 size);
SpiFlashOpResult spi_flash_read(uint32 src_addr, uint32 *des_addr, uint32 size); SpiFlashOpResult spi_flash_read(uint32 src_addr, uint32 *des_addr, uint32 size);
......
/* /*
* Copyright (C) 2013 -2014 Espressif System * Copyright (C) 2013 -2014 Espressif System
* *
*/ */
#ifndef __USER_INTERFACE_H__ #ifndef __USER_INTERFACE_H__
#define __USER_INTERFACE_H__ #define __USER_INTERFACE_H__
#include "os_type.h" #include "os_type.h"
#ifdef LWIP_OPEN_SRC #ifdef LWIP_OPEN_SRC
#include "lwip/ip_addr.h" #include "lwip/ip_addr.h"
#else #else
#include "ip_addr.h" #include "ip_addr.h"
#endif #endif
#include "queue.h" #include "queue.h"
#include "user_config.h" #include "user_config.h"
#include "spi_flash.h" #include "spi_flash.h"
#ifndef MAC2STR #ifndef MAC2STR
#define MAC2STR(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5] #define MAC2STR(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
#define MACSTR "%02x:%02x:%02x:%02x:%02x:%02x" #define MACSTR "%02x:%02x:%02x:%02x:%02x:%02x"
#endif #endif
enum rst_reason { enum rst_reason {
DEFAULT_RST_FLAG = 0, DEFAULT_RST_FLAG = 0,
WDT_RST_FLAG = 1, WDT_RST_FLAG = 1,
EXP_RST_FLAG = 2 EXP_RST_FLAG = 2
}; };
struct rst_info{ struct rst_info{
uint32 flag; uint32 flag;
uint32 exccause; uint32 exccause;
uint32 epc1; uint32 epc1;
uint32 epc2; uint32 epc2;
uint32 epc3; uint32 epc3;
uint32 excvaddr; uint32 excvaddr;
uint32 depc; uint32 depc;
}; };
#define UPGRADE_FW_BIN1 0x00 #define UPGRADE_FW_BIN1 0x00
#define UPGRADE_FW_BIN2 0x01 #define UPGRADE_FW_BIN2 0x01
void system_restore(void); void system_restore(void);
void system_restart(void); void system_restart(void);
void system_deep_sleep(uint32 time_in_us);
uint8 system_upgrade_userbin_check(void); bool system_deep_sleep_set_option(uint8 option);
void system_upgrade_reboot(void); void system_deep_sleep(uint32 time_in_us);
uint8 system_upgrade_flag_check();
void system_upgrade_flag_set(uint8 flag); uint8 system_upgrade_userbin_check(void);
void system_timer_reinit(void); void system_upgrade_reboot(void);
uint32 system_get_time(void); uint8 system_upgrade_flag_check();
void system_upgrade_flag_set(uint8 flag);
/* user task's prio must be 0/1/2 !!!*/
enum { void system_timer_reinit(void);
USER_TASK_PRIO_0 = 0, uint32 system_get_time(void);
USER_TASK_PRIO_1,
USER_TASK_PRIO_2, /* user task's prio must be 0/1/2 !!!*/
USER_TASK_PRIO_MAX enum {
}; USER_TASK_PRIO_0 = 0,
USER_TASK_PRIO_1,
void system_os_task(os_task_t task, uint8 prio, os_event_t *queue, uint8 qlen); USER_TASK_PRIO_2,
void system_os_post(uint8 prio, os_signal_t sig, os_param_t par); USER_TASK_PRIO_MAX
};
void system_print_meminfo(void);
uint32 system_get_free_heap_size(void); bool system_os_task(os_task_t task, uint8 prio, os_event_t *queue, uint8 qlen);
bool system_os_post(uint8 prio, os_signal_t sig, os_param_t par);
void system_set_os_print(uint8 onoff);
void system_print_meminfo(void);
uint64 system_mktime(uint32 year, uint32 mon, uint32 day, uint32 hour, uint32 min, uint32 sec); uint32 system_get_free_heap_size(void);
uint32 system_get_chip_id(void); void system_set_os_print(uint8 onoff);
uint8 system_get_os_print();
typedef void (* init_done_cb_t)(void);
uint64 system_mktime(uint32 year, uint32 mon, uint32 day, uint32 hour, uint32 min, uint32 sec);
void system_init_done_cb(init_done_cb_t cb);
uint32 system_get_chip_id(void);
uint32 system_rtc_clock_cali_proc(void);
uint32 system_get_rtc_time(void); typedef void (* init_done_cb_t)(void);
bool system_rtc_mem_read(uint8 src_addr, void *des_addr, uint16 load_size); void system_init_done_cb(init_done_cb_t cb);
bool system_rtc_mem_write(uint8 des_addr, const void *src_addr, uint16 save_size);
uint32 system_rtc_clock_cali_proc(void);
void system_uart_swap(void); uint32 system_get_rtc_time(void);
uint16 system_adc_read(void); bool system_rtc_mem_read(uint8 src_addr, void *des_addr, uint16 load_size);
bool system_rtc_mem_write(uint8 des_addr, const void *src_addr, uint16 save_size);
const char *system_get_sdk_version(void);
void system_uart_swap(void);
#define NULL_MODE 0x00
#define STATION_MODE 0x01 uint16 system_adc_read(void);
#define SOFTAP_MODE 0x02
#define STATIONAP_MODE 0x03 const char *system_get_sdk_version(void);
uint8 wifi_get_opmode(void); #define NULL_MODE 0x00
bool wifi_set_opmode(uint8 opmode); #define STATION_MODE 0x01
#define SOFTAP_MODE 0x02
struct bss_info { #define STATIONAP_MODE 0x03
STAILQ_ENTRY(bss_info) next;
typedef enum _auth_mode {
uint8 bssid[6]; AUTH_OPEN = 0,
uint8 ssid[32]; AUTH_WEP,
uint8 channel; AUTH_WPA_PSK,
sint8 rssi; AUTH_WPA2_PSK,
uint8 authmode; AUTH_WPA_WPA2_PSK,
uint8 is_hidden; AUTH_MAX
}; } AUTH_MODE;
typedef struct _scaninfo { uint8 wifi_get_opmode(void);
STAILQ_HEAD(, bss_info) *pbss; bool wifi_set_opmode(uint8 opmode);
struct espconn *pespconn;
uint8 totalpage; struct bss_info {
uint8 pagenum; STAILQ_ENTRY(bss_info) next;
uint8 page_sn;
uint8 data_cnt; uint8 bssid[6];
} scaninfo; uint8 ssid[32];
uint8 channel;
typedef void (* scan_done_cb_t)(void *arg, STATUS status); sint8 rssi;
AUTH_MODE authmode;
struct station_config { uint8 is_hidden;
uint8 ssid[32]; };
uint8 password[64];
uint8 bssid_set; typedef struct _scaninfo {
uint8 bssid[6]; STAILQ_HEAD(, bss_info) *pbss;
}; struct espconn *pespconn;
uint8 totalpage;
bool wifi_station_get_config(struct station_config *config); uint8 pagenum;
bool wifi_station_set_config(struct station_config *config); uint8 page_sn;
uint8 data_cnt;
bool wifi_station_connect(void); } scaninfo;
bool wifi_station_disconnect(void);
typedef void (* scan_done_cb_t)(void *arg, STATUS status);
struct scan_config {
uint8 *ssid; struct station_config {
uint8 *bssid; uint8 ssid[32];
uint8 channel; uint8 password[64];
uint8 show_hidden; uint8 bssid_set; // Note: If bssid_set is 1, station will just connect to the router
}; // with both ssid[] and bssid[] matched. Please check about this.
uint8 bssid[6];
bool wifi_station_scan(struct scan_config *config, scan_done_cb_t cb); };
uint8 wifi_station_get_auto_connect(void); bool wifi_station_get_config(struct station_config *config);
bool wifi_station_set_auto_connect(uint8 set); bool wifi_station_set_config(struct station_config *config);
enum { bool wifi_station_connect(void);
STATION_IDLE = 0, bool wifi_station_disconnect(void);
STATION_CONNECTING,
STATION_WRONG_PASSWORD, struct scan_config {
STATION_NO_AP_FOUND, uint8 *ssid; // Note: ssid == NULL, don't filter ssid.
STATION_CONNECT_FAIL, uint8 *bssid; // Note: bssid == NULL, don't filter bssid.
STATION_GOT_IP uint8 channel; // Note: channel == 0, scan all channels, otherwise scan set channel.
}; uint8 show_hidden; // Note: show_hidden == 1, can get hidden ssid routers' info.
};
enum dhcp_status {
DHCP_STOPPED, bool wifi_station_scan(struct scan_config *config, scan_done_cb_t cb);
DHCP_STARTED
}; uint8 wifi_station_get_auto_connect(void);
bool wifi_station_set_auto_connect(uint8 set);
uint8 wifi_station_get_connect_status(void);
enum {
uint8 wifi_station_get_current_ap_id(void); STATION_IDLE = 0,
bool wifi_station_ap_change(uint8 current_ap_id); STATION_CONNECTING,
bool wifi_station_ap_number_set(uint8 ap_number); STATION_WRONG_PASSWORD,
STATION_NO_AP_FOUND,
bool wifi_station_dhcpc_start(void); STATION_CONNECT_FAIL,
bool wifi_station_dhcpc_stop(void); STATION_GOT_IP
enum dhcp_status wifi_station_dhcpc_status(void); };
typedef enum _auth_mode { enum dhcp_status {
AUTH_OPEN = 0, DHCP_STOPPED,
AUTH_WEP, DHCP_STARTED
AUTH_WPA_PSK, };
AUTH_WPA2_PSK,
AUTH_WPA_WPA2_PSK uint8 wifi_station_get_connect_status(void);
} AUTH_MODE;
uint8 wifi_station_get_current_ap_id(void);
struct softap_config { bool wifi_station_ap_change(uint8 current_ap_id);
uint8 ssid[32]; bool wifi_station_ap_number_set(uint8 ap_number);
uint8 password[64];
uint8 ssid_len; bool wifi_station_dhcpc_start(void);
uint8 channel; bool wifi_station_dhcpc_stop(void);
uint8 authmode; enum dhcp_status wifi_station_dhcpc_status(void);
uint8 ssid_hidden;
uint8 max_connection; struct softap_config {
}; uint8 ssid[32];
uint8 password[64];
bool wifi_softap_get_config(struct softap_config *config); uint8 ssid_len; // Note: Recommend to set it according to your ssid
bool wifi_softap_set_config(struct softap_config *config); uint8 channel; // Note: support 1 ~ 13
AUTH_MODE authmode; // Note: Don't support AUTH_WEP in softAP mode.
struct station_info { uint8 ssid_hidden; // Note: default 0
STAILQ_ENTRY(station_info) next; uint8 max_connection; // Note: default 4, max 4
uint16 beacon_interval; // Note: support 100 ~ 60000 ms, default 100
uint8 bssid[6]; };
struct ip_addr ip;
}; bool wifi_softap_get_config(struct softap_config *config);
bool wifi_softap_set_config(struct softap_config *config);
struct dhcps_lease {
uint32 start_ip; struct station_info {
uint32 end_ip; STAILQ_ENTRY(station_info) next;
};
uint8 bssid[6];
struct station_info * wifi_softap_get_station_info(void); struct ip_addr ip;
void wifi_softap_free_station_info(void); };
uint8 wifi_station_get_ap_info(struct station_config config[]);
struct dhcps_lease {
bool wifi_softap_dhcps_start(void); uint32 start_ip;
bool wifi_softap_dhcps_stop(void); uint32 end_ip;
bool wifi_softap_set_dhcps_lease(struct dhcps_lease *please); };
enum dhcp_status wifi_softap_dhcps_status(void);
struct station_info * wifi_softap_get_station_info(void);
#define STATION_IF 0x00 void wifi_softap_free_station_info(void);
#define SOFTAP_IF 0x01 uint8 wifi_station_get_ap_info(struct station_config config[]);
bool wifi_get_ip_info(uint8 if_index, struct ip_info *info); bool wifi_softap_dhcps_start(void);
bool wifi_set_ip_info(uint8 if_index, struct ip_info *info); bool wifi_softap_dhcps_stop(void);
bool wifi_get_macaddr(uint8 if_index, uint8 *macaddr); bool wifi_softap_set_dhcps_lease(struct dhcps_lease *please);
bool wifi_set_macaddr(uint8 if_index, uint8 *macaddr); enum dhcp_status wifi_softap_dhcps_status(void);
uint8 wifi_get_channel(void); #define STATION_IF 0x00
bool wifi_set_channel(uint8 channel); #define SOFTAP_IF 0x01
void wifi_status_led_install(uint8 gpio_id, uint32 gpio_name, uint8 gpio_func); bool wifi_get_ip_info(uint8 if_index, struct ip_info *info);
bool wifi_set_ip_info(uint8 if_index, struct ip_info *info);
/** Get the absolute difference between 2 u32_t values (correcting overflows) bool wifi_get_macaddr(uint8 if_index, uint8 *macaddr);
* 'a' is expected to be 'higher' (without overflow) than 'b'. */ bool wifi_set_macaddr(uint8 if_index, uint8 *macaddr);
#define ESP_U32_DIFF(a, b) (((a) >= (b)) ? ((a) - (b)) : (((a) + ((b) ^ 0xFFFFFFFF) + 1)))
uint8 wifi_get_channel(void);
void wifi_promiscuous_enable(uint8 promiscuous); bool wifi_set_channel(uint8 channel);
typedef void (* wifi_promiscuous_cb_t)(uint8 *buf, uint16 len); void wifi_status_led_install(uint8 gpio_id, uint32 gpio_name, uint8 gpio_func);
void wifi_status_led_uninstall();
void wifi_set_promiscuous_rx_cb(wifi_promiscuous_cb_t cb);
/** Get the absolute difference between 2 u32_t values (correcting overflows)
enum phy_mode { * 'a' is expected to be 'higher' (without overflow) than 'b'. */
PHY_MODE_11B = 1, #define ESP_U32_DIFF(a, b) (((a) >= (b)) ? ((a) - (b)) : (((a) + ((b) ^ 0xFFFFFFFF) + 1)))
PHY_MODE_11G = 2,
PHY_MODE_11N = 3 void wifi_promiscuous_enable(uint8 promiscuous);
};
typedef void (* wifi_promiscuous_cb_t)(uint8 *buf, uint16 len);
enum phy_mode wifi_get_phy_mode(void);
bool wifi_set_phy_mode(enum phy_mode mode); void wifi_set_promiscuous_rx_cb(wifi_promiscuous_cb_t cb);
enum sleep_type { enum phy_mode {
NONE_SLEEP_T = 0, PHY_MODE_11B = 1,
LIGHT_SLEEP_T, PHY_MODE_11G = 2,
MODEM_SLEEP_T PHY_MODE_11N = 3
}; };
bool wifi_set_sleep_type(enum sleep_type type); enum phy_mode wifi_get_phy_mode(void);
enum sleep_type wifi_get_sleep_type(void); bool wifi_set_phy_mode(enum phy_mode mode);
#endif enum sleep_type {
NONE_SLEEP_T = 0,
LIGHT_SLEEP_T,
MODEM_SLEEP_T
};
bool wifi_set_sleep_type(enum sleep_type type);
enum sleep_type wifi_get_sleep_type(void);
#endif
...@@ -5,7 +5,7 @@ MEMORY ...@@ -5,7 +5,7 @@ MEMORY
dport0_0_seg : org = 0x3FF00000, len = 0x10 dport0_0_seg : org = 0x3FF00000, len = 0x10
dram0_0_seg : org = 0x3FFE8000, len = 0x14000 dram0_0_seg : org = 0x3FFE8000, len = 0x14000
iram1_0_seg : org = 0x40100000, len = 0x8000 iram1_0_seg : org = 0x40100000, len = 0x8000
irom0_0_seg : org = 0x40210000, len = 0x50000 irom0_0_seg : org = 0x40210000, len = 0x51000
} }
PHDRS PHDRS
......
...@@ -18,6 +18,7 @@ PROVIDE ( SHA1Transform = 0x4000a364 ); ...@@ -18,6 +18,7 @@ PROVIDE ( SHA1Transform = 0x4000a364 );
PROVIDE ( SHA1Update = 0x4000b5a8 ); PROVIDE ( SHA1Update = 0x4000b5a8 );
PROVIDE ( SPI_read_status = 0x400043c8 ); PROVIDE ( SPI_read_status = 0x400043c8 );
PROVIDE ( SPI_write_status = 0x40004400 ); PROVIDE ( SPI_write_status = 0x40004400 );
PROVIDE ( SPI_write_enable = 0x4000443c );
PROVIDE ( Wait_SPI_Idle = 0x4000448c ); PROVIDE ( Wait_SPI_Idle = 0x4000448c );
PROVIDE ( SPIEraseArea = 0x40004b44 ); PROVIDE ( SPIEraseArea = 0x40004b44 );
PROVIDE ( SPIEraseBlock = 0x400049b4 ); PROVIDE ( SPIEraseBlock = 0x400049b4 );
......
File added
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment