|
21 | 21 | https://github.com/espressif/ESP8266_RTOS_SDK
|
22 | 22 | """
|
23 | 23 |
|
24 |
| -from os.path import isdir, join |
| 24 | +from os.path import isdir, join, isfile |
25 | 25 |
|
26 | 26 | from SCons.Script import Builder, DefaultEnvironment
|
27 | 27 |
|
|
106 | 106 | "cirom", "crypto", "driver", "espconn", "espnow", "freertos", "gcc",
|
107 | 107 | "json", "hal", "lwip", "main", "mbedtls", "mesh", "mirom", "net80211", "nopoll",
|
108 | 108 | "phy", "pp", "pwm", "smartconfig", "spiffs", "ssl", "wpa", "wps"
|
109 |
| - ], |
110 |
| - |
111 |
| - BUILDERS=dict( |
112 |
| - ElfToBin=Builder( |
113 |
| - action=env.VerboseAction(" ".join([ |
114 |
| - '"%s"' % join(platform.get_package_dir("tool-esptool"), "esptool"), |
115 |
| - "-eo", "$SOURCE", |
116 |
| - "-bo", "${TARGET}", |
117 |
| - "-bm", "$BOARD_FLASH_MODE", |
118 |
| - "-bf", "${__get_board_f_flash(__env__)}", |
119 |
| - "-bz", "${__get_flash_size(__env__)}", |
120 |
| - "-bs", ".text", |
121 |
| - "-bs", ".data", |
122 |
| - "-bs", ".rodata", |
123 |
| - "-bc", "-ec", |
124 |
| - "-eo", "$SOURCE", |
125 |
| - "-es", ".irom0.text", "${TARGET}.irom0text.bin", |
126 |
| - "-ec", "-v" |
127 |
| - ]), "Building $TARGET"), |
128 |
| - suffix=".bin" |
129 |
| - ) |
130 |
| - ) |
| 109 | + ] |
131 | 110 | )
|
132 | 111 |
|
133 |
| -if not env.BoardConfig().get("build.ldscript", ""): |
134 |
| - env.Replace( |
135 |
| - LDSCRIPT_PATH=join(FRAMEWORK_DIR, "ld", "eagle.app.v6.ld"), |
136 |
| - ) |
137 | 112 |
|
138 |
| -# Extra flash images |
139 |
| -board_flash_size = int(env.BoardConfig().get("upload.maximum_size", 0)) |
140 |
| -if board_flash_size > 8388608: |
141 |
| - init_data_flash_address = 0xffc000 # for 16 MB |
142 |
| -elif board_flash_size > 4194304: |
143 |
| - init_data_flash_address = 0x7fc000 # for 8 MB |
144 |
| -elif board_flash_size > 2097152: |
145 |
| - init_data_flash_address = 0x3fc000 # for 4 MB |
146 |
| -elif board_flash_size > 1048576: |
147 |
| - init_data_flash_address = 0x1fc000 # for 2 MB |
148 |
| -elif board_flash_size > 524288: |
149 |
| - init_data_flash_address = 0xfc000 # for 1 MB |
150 |
| -else: |
151 |
| - init_data_flash_address = 0x7c000 # for 512 kB |
| 113 | +################################################################################### |
| 114 | +# OTA support |
| 115 | +# common code between esp8266-nonos-sdk and esp8266-rtos-sdk for OTA support |
| 116 | + |
| 117 | +board = env.BoardConfig() |
| 118 | +partitions_csv = board.get("build.partitions", "partitions_singleapp.csv") |
| 119 | + |
| 120 | +# choose LDSCRIPT_PATH based on OTA |
| 121 | +if not board.get("build.ldscript", ""): |
| 122 | + if "ota" in partitions_csv: # flash map size >= 5 only!!! |
| 123 | + LDSCRIPT_PATH=join(FRAMEWORK_DIR, "ld", "eagle.app.v6.new.2048.ld") |
| 124 | + else: |
| 125 | + LDSCRIPT_PATH=join(FRAMEWORK_DIR, "ld", "eagle.app.v6.ld") |
| 126 | + env.Replace(LDSCRIPT_PATH=LDSCRIPT_PATH) |
| 127 | + |
| 128 | + |
| 129 | +# evaluate SPI_FLASH_SIZE_MAP flag for NONOS_SDK 3.x and set CCFLAG |
| 130 | +board_flash_size = int(board.get("upload.maximum_size", 524288)) |
| 131 | +flash_size_maps = [0.5, 0.25, 1.0, 0.0, 0.0, 2.0, 4.0, 0.0, 8.0, 16.0] # ignore maps 3 and 4.prefer 5 and 6 |
| 132 | +flash_sizes_str = ['512KB','256KB','1MB','2MB','4MB','2MB-c1','4MB-c1','4MB-c2','8MB','16MB'] |
| 133 | +try: |
| 134 | + flash_size_map = flash_size_maps.index(board_flash_size/1048576) |
| 135 | + flash_size_str = flash_sizes_str[flash_size_map] |
| 136 | +except: |
| 137 | + flash_size_map = 6 |
| 138 | + flash_size_str = '4MB-c1' |
| 139 | +# for OTA, only size maps 5, 6, 8 and 9 are supported to avoid linking twice for user1 and user2 |
| 140 | + |
| 141 | +env.Append(CCFLAGS=["-DSPI_FLASH_SIZE_MAP="+str(flash_size_map)]) # NONOS-SDK 3.x user_main.c need it |
| 142 | +env.Append(FLASH_SIZE_STR=flash_size_str) # required for custom uploader |
| 143 | + |
| 144 | + |
| 145 | +# create binaries list to upload |
| 146 | + |
| 147 | +if "ota" in partitions_csv: # if OTA, flash user1 but generate user1 and user2 |
| 148 | + boot_bin = join(FRAMEWORK_DIR, "bin", "boot_v1.7.bin") |
| 149 | + user_bin = join("$BUILD_DIR", "${PROGNAME}.bin.user1.bin") # firmware.bin.user1.bin # user1.4096.new.6.bin |
| 150 | + user_addr = 0x1000 |
| 151 | +else: # non ota |
| 152 | + boot_bin = join("$BUILD_DIR", "${PROGNAME}.bin") # firmware.bin # eagle.flash.bin |
| 153 | + user_bin = join("$BUILD_DIR", "${PROGNAME}.bin.irom0text.bin") # firmware.bin.irom0text.bin # eagle.irom0text.bin |
| 154 | + if (env['PIOFRAMEWORK'][0] == "esp8266-rtos-sdk"): |
| 155 | + user_addr = 0x20000 |
| 156 | + else: |
| 157 | + user_addr = 0x10000 |
| 158 | + |
| 159 | + |
| 160 | +# check the init_data_default file to use |
| 161 | +esp_init_data_default_file = "esp_init_data_default_v08.bin" # new in NONOS 3.04 |
| 162 | +if not isfile(join(FRAMEWORK_DIR, "bin", esp_init_data_default_file)): |
| 163 | + esp_init_data_default_file = "esp_init_data_default.bin" |
| 164 | + |
| 165 | +data_bin = join(FRAMEWORK_DIR, "bin", esp_init_data_default_file) |
| 166 | +blank_bin = join(FRAMEWORK_DIR, "bin", "blank.bin") |
| 167 | +rf_cal_addr = board_flash_size-0x5000 # 3fb000 for 4M board blank_bin |
| 168 | +phy_data_addr = board_flash_size-0x4000 # 3fc000 for 4M board data_bin |
| 169 | +sys_param_addr = board_flash_size-0x2000 # 3fe000 for 4M board blank_bin |
152 | 170 |
|
153 | 171 | env.Append(
|
154 | 172 | FLASH_EXTRA_IMAGES=[
|
155 |
| - ("0x20000", join("$BUILD_DIR", "${PROGNAME}.bin.irom0text.bin")), |
156 |
| - (hex(init_data_flash_address), |
157 |
| - join(FRAMEWORK_DIR, "bin", "esp_init_data_default.bin")), |
158 |
| - (hex(init_data_flash_address + 0x2000), |
159 |
| - join(FRAMEWORK_DIR, "bin", "blank.bin")) |
| 173 | + (hex(0), boot_bin), |
| 174 | + (hex(user_addr), user_bin), |
| 175 | + (hex(phy_data_addr), data_bin), |
| 176 | + (hex(sys_param_addr), blank_bin), |
| 177 | + (hex(rf_cal_addr), blank_bin), |
| 178 | + ("--flash_mode", "$BOARD_FLASH_MODE"), |
| 179 | + ("--flash_freq", "$${__get_board_f_flash(__env__)}m"), |
| 180 | + ("--flash_size", "$FLASH_SIZE_STR") # required by NONOS 3.0.4 |
160 | 181 | ]
|
161 | 182 | )
|
162 | 183 |
|
| 184 | +# register genbin.py BUILDER which allows to create OTA files |
| 185 | +if "ota" in partitions_csv: # if OTA, flash user1 but generate user1 and user2 |
| 186 | + env.Append( |
| 187 | + BUILDERS=dict( |
| 188 | + ElfToBin=Builder( |
| 189 | + action=env.VerboseAction(" ".join([ |
| 190 | + '"%s"' % env.subst("$PYTHONEXE"), join(platform.get_package_dir("tool-genbin"), "genbin.py"), |
| 191 | + "12", # create firmware.bin.user1.bin and firmware.bin.user2.bin |
| 192 | + "$BOARD_FLASH_MODE", "${__get_board_f_flash(__env__)}m", "$FLASH_SIZE_STR", |
| 193 | + "$SOURCE", "${TARGET}.user1.bin", "${TARGET}.user2.bin" |
| 194 | + # could have used espressif naming: user1.4096.new.6.bin or user1.16384.new.9.bin |
| 195 | + ]), "Building $TARGET"), |
| 196 | + suffix=".bin" |
| 197 | + ) |
| 198 | + ) |
| 199 | + ) |
| 200 | +else: |
| 201 | + env.Append( |
| 202 | + BUILDERS=dict( |
| 203 | + ElfToBin=Builder( |
| 204 | + action=env.VerboseAction(" ".join([ |
| 205 | + '"%s"' % env.subst("$PYTHONEXE"), join(platform.get_package_dir("tool-genbin"), "genbin.py"), |
| 206 | + "0", # create firmware.bin and firmware.bin.irom0text.bin |
| 207 | + "$BOARD_FLASH_MODE", "${__get_board_f_flash(__env__)}m", "$FLASH_SIZE_STR", |
| 208 | + "$SOURCE", "${TARGET}", "${TARGET}.irom0text.bin" |
| 209 | + ]), "Building $TARGET"), |
| 210 | + suffix=".bin" |
| 211 | + ) |
| 212 | + ) |
| 213 | + ) |
| 214 | + |
| 215 | +################################################################################### |
| 216 | + |
| 217 | + |
163 | 218 | #
|
164 | 219 | # Target: Build Driver Library
|
165 | 220 | #
|
|
0 commit comments