|
| 1 | +set(BOOTLOADER_FIRMWARE_DIR ${CMAKE_CURRENT_LIST_DIR}/firmware) |
| 2 | + |
| 3 | +#configurate downloading parameters |
| 4 | +set(ESPTOOLPY_FLASHSIZE ${CONFIG_ESPTOOLPY_FLASHSIZE}) |
| 5 | +set(ESPTOOLPY_FLASHMODE ${CONFIG_ESPTOOLPY_FLASHMODE}) |
| 6 | +set(ESPTOOLPY_FLASHFREQ ${CONFIG_ESPTOOLPY_FLASHFREQ}) |
| 7 | + |
| 8 | +if(${ESPTOOLPY_FLASHSIZE} STREQUAL "512KB") |
| 9 | +set(BLANK_BIN_OFFSET1 0x7B000) |
| 10 | +set(BLANK_BIN_OFFSET2 0x7E000) |
| 11 | +set(ESP_INIT_DATA_DEFAULT_BIN_OFFSET 0x7C000) |
| 12 | +set(ESP8266_SIZEMAP 0) |
| 13 | +endif() |
| 14 | +if(${ESPTOOLPY_FLASHSIZE} STREQUAL "1MB") |
| 15 | +set(BLANK_BIN_OFFSET1 0xFB000) |
| 16 | +set(BLANK_BIN_OFFSET2 0xFE000) |
| 17 | +set(ESP_INIT_DATA_DEFAULT_BIN_OFFSET 0xFC000) |
| 18 | +set(ESP8266_SIZEMAP 2) |
| 19 | +endif() |
| 20 | +if(${ESPTOOLPY_FLASHSIZE} STREQUAL "2MB") |
| 21 | +set(BLANK_BIN_OFFSET1 0x1FB000) |
| 22 | +set(BLANK_BIN_OFFSET2 0x1FE000) |
| 23 | +set(ESP_INIT_DATA_DEFAULT_BIN_OFFSET 0x1FC000) |
| 24 | +set(ESP8266_SIZEMAP 3) |
| 25 | +endif() |
| 26 | +if(${ESPTOOLPY_FLASHSIZE} STREQUAL "2MB-c1") |
| 27 | +set(BLANK_BIN_OFFSET1 0x1FB000) |
| 28 | +set(BLANK_BIN_OFFSET2 0x1FE000) |
| 29 | +set(ESP_INIT_DATA_DEFAULT_BIN_OFFSET 0x1FC000) |
| 30 | +set(ESP8266_SIZEMAP 5) |
| 31 | +endif() |
| 32 | +if(${ESPTOOLPY_FLASHSIZE} STREQUAL "4MB") |
| 33 | +set(BLANK_BIN_OFFSET1 0x3FB000) |
| 34 | +set(BLANK_BIN_OFFSET2 0x3FE000) |
| 35 | +set(ESP_INIT_DATA_DEFAULT_BIN_OFFSET 0x3FC000) |
| 36 | +set(ESP8266_SIZEMAP 4) |
| 37 | +endif() |
| 38 | +if(${ESPTOOLPY_FLASHSIZE} STREQUAL "4MB-c1") |
| 39 | +set(BLANK_BIN_OFFSET1 0x3FB000) |
| 40 | +set(BLANK_BIN_OFFSET2 0x3FE000) |
| 41 | +set(ESP_INIT_DATA_DEFAULT_BIN_OFFSET 0x3FC000) |
| 42 | +set(ESP8266_SIZEMAP 6) |
| 43 | +endif() |
| 44 | +if(${ESPTOOLPY_FLASHSIZE} STREQUAL "8MB") |
| 45 | +set(BLANK_BIN_OFFSET1 0x7FB000) |
| 46 | +set(BLANK_BIN_OFFSET2 0x7FE000) |
| 47 | +set(ESP_INIT_DATA_DEFAULT_BIN_OFFSET 0x7FC000) |
| 48 | +set(ESP8266_SIZEMAP 8) |
| 49 | +endif() |
| 50 | +if(${ESPTOOLPY_FLASHSIZE} STREQUAL "16MB") |
| 51 | +set(BLANK_BIN_OFFSET1 0xFFB000) |
| 52 | +set(BLANK_BIN_OFFSET2 0xFFE000) |
| 53 | +set(ESP_INIT_DATA_DEFAULT_BIN_OFFSET 0xFFC000) |
| 54 | +set(ESP8266_SIZEMAP 9) |
| 55 | +endif() |
| 56 | + |
| 57 | +set(BOOTLOADER_BIN_OFFSET 0) |
| 58 | +set(APP_OFFSET 0x1000) |
| 59 | + |
| 60 | +set(ESP8266_BOOTMODE 2) # always be 2 |
| 61 | + |
| 62 | +if(${ESPTOOLPY_FLASHMODE} STREQUAL "qio") |
| 63 | +set(ESP8266_FLASHMODE 0) |
| 64 | +endif() |
| 65 | +if(${ESPTOOLPY_FLASHMODE} STREQUAL "qout") |
| 66 | +set(ESP8266_FLASHMODE 1) |
| 67 | +endif() |
| 68 | +if(${ESPTOOLPY_FLASHMODE} STREQUAL "dio") |
| 69 | +set(ESP8266_FLASHMODE 2) |
| 70 | +endif() |
| 71 | +if(${ESPTOOLPY_FLASHMODE} STREQUAL "dout") |
| 72 | +set(ESP8266_FLASHMODE 3) |
| 73 | +endif() |
| 74 | + |
| 75 | +if(${ESPTOOLPY_FLASHFREQ} STREQUAL "20m") |
| 76 | +set(ESP8266_FREQDIV 2) |
| 77 | +endif() |
| 78 | +if(${ESPTOOLPY_FLASHFREQ} STREQUAL "26m") |
| 79 | +set(ESP8266_FREQDIV 1) |
| 80 | +endif() |
| 81 | +if(${ESPTOOLPY_FLASHFREQ} STREQUAL "40m") |
| 82 | +set(ESP8266_FREQDIV 0) |
| 83 | +endif() |
| 84 | +if(${ESPTOOLPY_FLASHFREQ} STREQUAL "80m") |
| 85 | +set(ESP8266_FREQDIV 15) |
| 86 | +endif() |
| 87 | + |
| 88 | +set(ESP8266_BINSCRIPT ${PYTHON} $(IDF_PATH)/tools/gen_appbin.py) |
| 89 | + |
| 90 | +# |
| 91 | +# Add 'app.bin' target - generates with elf2image |
| 92 | +# |
| 93 | +add_custom_command(OUTPUT ${PROJECT_NAME}.bin |
| 94 | + COMMAND ${CMAKE_OBJCOPY_COMPILER} --only-section .text -O binary ${PROJECT_NAME}.elf eagle.app.v6.text.bin |
| 95 | + COMMAND ${CMAKE_OBJCOPY_COMPILER} --only-section .data -O binary ${PROJECT_NAME}.elf eagle.app.v6.data.bin |
| 96 | + COMMAND ${CMAKE_OBJCOPY_COMPILER} --only-section .rodata -O binary ${PROJECT_NAME}.elf eagle.app.v6.rodata.bin |
| 97 | + COMMAND ${CMAKE_OBJCOPY_COMPILER} --only-section .irom0.text -O binary ${PROJECT_NAME}.elf eagle.app.v6.irom0text.bin |
| 98 | + COMMAND ${ESP8266_BINSCRIPT} ${PROJECT_NAME}.elf ${ESP8266_BOOTMODE} ${ESP8266_FLASHMODE} ${ESP8266_FREQDIV} ${ESP8266_SIZEMAP} |
| 99 | + COMMAND mv eagle.app.flash.bin ${PROJECT_NAME}.bin |
| 100 | + COMMAND rm eagle.app.v6.text.bin eagle.app.v6.data.bin eagle.app.v6.rodata.bin eagle.app.v6.irom0text.bin |
| 101 | + DEPENDS ${PROJECT_NAME}.elf |
| 102 | + VERBATIM |
| 103 | + ) |
| 104 | +add_custom_target(app ALL DEPENDS ${PROJECT_NAME}.bin) |
| 105 | + |
| 106 | +set(BLANK_BIN ${BOOTLOADER_FIRMWARE_DIR}/blank.bin) |
| 107 | +set(ESP_INIT_DATA_DEFAULT_BIN ${BOOTLOADER_FIRMWARE_DIR}/esp_init_data_default.bin) |
| 108 | +set(BOOTLOADER_BIN ${BOOTLOADER_FIRMWARE_DIR}/boot_v1.7.bin) |
| 109 | + |
| 110 | +set(PYTHON ${CONFIG_PYTHON}) |
| 111 | +set(ESPTOOLPY_SRC $(IDF_PATH)/components/esptool_py/esptool/esptool.py) |
| 112 | + |
| 113 | +set(CHIP esp8266) |
| 114 | +set(ESPPORT ${CONFIG_ESPTOOLPY_PORT}) |
| 115 | +set(ESPBAUD ${CONFIG_ESPTOOLPY_BAUD}) |
| 116 | +set(ESPFLASHMODE ${CONFIG_ESPTOOLPY_FLASHMODE}) |
| 117 | +set(ESPFLASHFREQ ${CONFIG_ESPTOOLPY_FLASHFREQ}) |
| 118 | +set(ESPFLASHSIZE ${CONFIG_ESPTOOLPY_FLASHSIZE}) |
| 119 | +set(ESPTOOLPY ${PYTHON} ${ESPTOOLPY_SRC} --chip ${CHIP}) |
| 120 | + |
| 121 | +set(ESPTOOL_WRITE_FLASH_OPTIONS --flash_mode ${ESPFLASHMODE} --flash_freq ${ESPFLASHFREQ} --flash_size ${ESPFLASHSIZE}) |
| 122 | + |
| 123 | +set(ESPTOOLPY_SERIAL ${ESPTOOLPY} --port ${ESPPORT} --baud ${ESPBAUD} --before ${CONFIG_ESPTOOLPY_BEFORE} --after ${CONFIG_ESPTOOLPY_AFTER}) |
| 124 | + |
| 125 | +set(ESPTOOLPY_WRITE_FLASH ${ESPTOOLPY_SERIAL} write_flash -z ${ESPTOOL_WRITE_FLASH_OPTIONS}) |
| 126 | + |
| 127 | +set(APP_BIN ${PROJECT_NAME}.bin) |
| 128 | + |
| 129 | +set(ESPTOOL_ALL_FLASH_ARGS ${BOOTLOADER_BIN_OFFSET} ${BOOTLOADER_BIN} |
| 130 | + ${APP_OFFSET} ${APP_BIN} |
| 131 | + ${ESP_INIT_DATA_DEFAULT_BIN_OFFSET} ${ESP_INIT_DATA_DEFAULT_BIN} |
| 132 | + ${BLANK_BIN_OFFSET1} ${BLANK_BIN} |
| 133 | + ${BLANK_BIN_OFFSET2} ${BLANK_BIN}) |
| 134 | + |
| 135 | +add_custom_target(flash DEPENDS ${PROJECT_NAME}.bin |
| 136 | + COMMAND echo "Flashing binaries to serial port ${ESPPORT} app at offset ${APP_OFFSET}..." |
| 137 | + COMMAND echo ${ESPTOOL_ALL_FLASH_ARGS} |
| 138 | + COMMAND ${ESPTOOLPY_WRITE_FLASH} ${ESPTOOL_ALL_FLASH_ARGS} |
| 139 | + COMMAND echo "success" |
| 140 | + ) |
| 141 | + |
| 142 | +add_custom_target(erase_flash DEPENDS "" |
| 143 | + COMMAND echo "Erasing entire flash..." |
| 144 | + COMMAND ${ESPTOOLPY_SERIAL} erase_flash |
| 145 | + COMMAND echo "success" |
| 146 | + ) |
| 147 | + |
| 148 | +set(MONITOR_PYTHON ${PYTHON}) |
| 149 | +set(MONITORBAUD ${CONFIG_MONITOR_BAUD}) |
| 150 | +set(APP_ELF ${PROJECT_NAME}.elf) |
| 151 | +set(MONITOR_OPTS --baud ${MONITORBAUD} --port ${ESPPORT} --toolchain-prefix ${CONFIG_TOOLPREFIX} ${APP_ELF}) |
| 152 | + |
| 153 | +function(esp_monitor func dependencies) |
| 154 | + add_custom_target(${func} DEPENDS ${dependencies} |
| 155 | + COMMAND echo "start monitor ... " |
| 156 | + COMMAND echo $(MONITOR_PYTHON) ${IDF_PATH}/tools/idf_monitor.py ${MONITOR_OPTS} |
| 157 | + COMMAND $(MONITOR_PYTHON) ${IDF_PATH}/tools/idf_monitor.py ${MONITOR_OPTS} |
| 158 | + COMMAND echo "idf monitor exit" |
| 159 | + ) |
| 160 | +endfunction() |
| 161 | + |
| 162 | +esp_monitor(monitor "") |
0 commit comments