├── HELTEC-WS-1.20.2.r4.tar.gz ├── HELTEC-WSL-1.20.2.r4.tar.gz ├── NINA_FW_v1.5.0_Airlift.bin ├── NINA_FW_v1.5.0_W102.bin ├── PYBV11_WIZNET5K.dfu ├── README.md ├── ds18x20.zip ├── esp_hosted_airlift.bin ├── esp_init_data_default.bin ├── espflash.py ├── firmware_LILYGO_TTGO_LORA32.bin ├── firmware_mimxrt1170_thread.bin ├── firmware_rp2_W_main_rename.uf2 ├── mimxrt_serial_downloader.zip ├── mpy-cross_pycom.exe ├── mpy-cross_pycom_linux ├── mpy-cross_pycom_v4.exe ├── ninaflash.py ├── samd_firmware ├── ADAFRUIT_FEATHER_M0_EXPRESS_firmware.uf2 ├── ADAFRUIT_FEATHER_M4_EXPRESS_firmware.uf2 ├── ADAFRUIT_GRAND_CENTRAL_M4_EXPRESS_firmware.uf2 ├── ADAFRUIT_ITSYBITSY_M0_EXPRESS_firmware.uf2 ├── ADAFRUIT_ITSYBITSY_M4_EXPRESS_firmware.uf2 ├── ADAFRUIT_METRO_M0_firmware.uf2 ├── ADAFRUIT_METRO_M4_firmware.uf2 ├── ADAFRUIT_NEOKEY_TRINKEY_firmware.uf2 ├── ADAFRUIT_PIXEL_TRINKEY_firmware.uf2 ├── ADAFRUIT_QTPY_SAMD21-SPIFLASH_firmware.uf2 ├── ADAFRUIT_QTPY_SAMD21_firmware.uf2 ├── ADAFRUIT_TRINKET_M0_firmware.uf2 ├── ARDUINO_MKR_ZERO_firmware.uf2 ├── MINISAM_M4_firmware.uf2 ├── SAMD21_XPLAINED_PRO_firmware.uf2 ├── SAMD_GENERIC_D21J18_firmware.uf2 ├── SAMD_GENERIC_D51P19_firmware.uf2 ├── SAMD_GENERIC_D51P20_firmware.uf2 ├── SEEED_WIO_TERMINAL_firmware.uf2 ├── SEEED_XIAO_SAMD21_firmware.uf2 ├── SPARKFUN_REDBOARD_TURBO_firmware.uf2 ├── SPARKFUN_SAMD21_DEV_BREAKOUT_firmware.uf2 ├── SPARKFUN_SAMD51_THING_PLUS_firmware.uf2 └── deploy.md ├── w600_firmware ├── README.md ├── w600tool.py ├── wm_tool.exe ├── wm_w600_GENERIC.fls ├── wm_w600_THINGSTURN_TB01.fls ├── wm_w600_W600_EVB_V2.fls ├── wm_w600_WAVGAT_AIR602.fls ├── wm_w600_WEMOS_W600.fls └── wm_w600_WIS600.fls └── xtensa Instruction Set Architecture (ISA).pdf /HELTEC-WS-1.20.2.r4.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robert-hh/Shared-Stuff/eabb1e356c82495385b69672a0658cbb6242823f/HELTEC-WS-1.20.2.r4.tar.gz -------------------------------------------------------------------------------- /HELTEC-WSL-1.20.2.r4.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robert-hh/Shared-Stuff/eabb1e356c82495385b69672a0658cbb6242823f/HELTEC-WSL-1.20.2.r4.tar.gz -------------------------------------------------------------------------------- /NINA_FW_v1.5.0_Airlift.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robert-hh/Shared-Stuff/eabb1e356c82495385b69672a0658cbb6242823f/NINA_FW_v1.5.0_Airlift.bin -------------------------------------------------------------------------------- /NINA_FW_v1.5.0_W102.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robert-hh/Shared-Stuff/eabb1e356c82495385b69672a0658cbb6242823f/NINA_FW_v1.5.0_W102.bin -------------------------------------------------------------------------------- /PYBV11_WIZNET5K.dfu: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robert-hh/Shared-Stuff/eabb1e356c82495385b69672a0658cbb6242823f/PYBV11_WIZNET5K.dfu -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Shared-Stuff 2 | - mpy-cross_pycom.exe: Windows version of Micropython cross-compiler for the pycom build 3 | - mpy-cross_pycom_linux: Linux version for the Pycom branch 4 | - xtensa Instruction Set Architecture (ISA).pdf: assembler instruction set of the xtensa architecture, matching the esp8266 5 | - samd_firmware: Firmware for a couple of SAMD21 and SAMD51 boards. 6 | - w600_firmware: Firmware for a couple of W600 boards. These differ only in the definition of the boas pins in Pin.board. They all have threading and SSL enabled and use LFS for the internal file system. 7 | - esp_hosted_airlift.bin: Firmware for the Airlift ESP32 modules to be used with the esp_hosted driver. 8 | - NINA_FW_v1.5.0_Airlift.bin: Firmware for the Airlift ESP32 module to be used with the NINAW10 driver. 9 | - NINA_FW_v1.5.0_W102.bin: Firmware for the W102 ESP32 module to be used with the NINAW10 driver. 10 | - ninaflash.py: Sample script to upload the ESP32 software to a ESP32 WiFi/BLE module on the board. Requires espflash.py from micropython-lib. UART port, Reset and GPIO0 pins have to be adapted for the host port. 11 | - espflash.py: Version of espflash.py which is less memory critical. 12 | 13 | Some Pycom tarballs: 14 | 15 | - HELTEC_WS-1.20.2.rc6.tar.gz Tar-Ball for the Heltec Wireless Stick, 800-900MHz 16 | - HELTEC_WSL-1.20.2.rc6.tar.gz Tar-Ball for the Heltec Wireless Stick Lite, 800-900MHz 17 | 18 | The difference between the two is the amount of flash which is assumed. 19 | 8MB for the -WS and 4 MB for the -WSL board. 20 | -------------------------------------------------------------------------------- /ds18x20.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robert-hh/Shared-Stuff/eabb1e356c82495385b69672a0658cbb6242823f/ds18x20.zip -------------------------------------------------------------------------------- /esp_hosted_airlift.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robert-hh/Shared-Stuff/eabb1e356c82495385b69672a0658cbb6242823f/esp_hosted_airlift.bin -------------------------------------------------------------------------------- /esp_init_data_default.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robert-hh/Shared-Stuff/eabb1e356c82495385b69672a0658cbb6242823f/esp_init_data_default.bin -------------------------------------------------------------------------------- /espflash.py: -------------------------------------------------------------------------------- 1 | # This file is part of the MicroPython project, http://micropython.org/ 2 | # 3 | # The MIT License (MIT) 4 | # 5 | # Copyright (c) 2022 Ibrahim Abdelkader 6 | # 7 | # Permission is hereby granted, free of charge, to any person obtaining a copy 8 | # of this software and associated documentation files (the "Software"), to deal 9 | # in the Software without restriction, including without limitation the rights 10 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | # copies of the Software, and to permit persons to whom the Software is 12 | # furnished to do so, subject to the following conditions: 13 | # 14 | # The above copyright notice and this permission notice shall be included in 15 | # all copies or substantial portions of the Software. 16 | # 17 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 23 | # THE SOFTWARE. 24 | # 25 | # A minimal esptool implementation to communicate with ESP32 ROM bootloader. 26 | # Note this tool does Not support advanced features, other ESP chips or stub loading. 27 | # This is only meant to be used for updating the U-blox Nina module firmware. 28 | 29 | import os 30 | import struct 31 | from micropython import const 32 | from time import sleep 33 | import binascii 34 | import gc 35 | 36 | _CMD_SYNC = const(0x08) 37 | _CMD_CHANGE_BAUDRATE = const(0x0F) 38 | 39 | _CMD_ESP_READ_REG = const(0x0A) 40 | _CMD_ESP_WRITE_REG = const(0x09) 41 | 42 | _CMD_SPI_ATTACH = const(0x0D) 43 | _CMD_SPI_FLASH_MD5 = const(0x13) 44 | _CMD_SPI_FLASH_PARAMS = const(0x0B) 45 | _CMD_SPI_FLASH_BEGIN = const(0x02) 46 | _CMD_SPI_FLASH_DATA = const(0x03) 47 | _CMD_SPI_FLASH_END = const(0x04) 48 | 49 | _FLASH_ID = const(0) 50 | _FLASH_REG_BASE = const(0x60002000) 51 | _FLASH_BLOCK_SIZE = const(64 * 1024) 52 | _FLASH_SECTOR_SIZE = const(4 * 1024) 53 | _FLASH_PAGE_SIZE = const(256) 54 | 55 | _ESP_ERRORS = { 56 | 0x05: "Received message is invalid", 57 | 0x06: "Failed to act on received message", 58 | 0x07: "Invalid CRC in message", 59 | 0x08: "Flash write error", 60 | 0x09: "Flash read error", 61 | 0x0A: "Flash read length error", 62 | 0x0B: "Deflate error", 63 | } 64 | 65 | 66 | class ESPFlash: 67 | def __init__(self, reset, gpio0, uart, log_enabled=False): 68 | self.uart = uart 69 | self.reset_pin = reset 70 | self.gpio0_pin = gpio0 71 | self.log = log_enabled 72 | self.baudrate = 115200 73 | self.md5sum = None 74 | try: 75 | import hashlib 76 | 77 | if hasattr(hashlib, "md5"): 78 | self.md5sum = hashlib.md5() 79 | except ImportError: 80 | pass 81 | 82 | def _log(self, data, out=True): 83 | if self.log: 84 | size = len(data) 85 | print( 86 | f"out({size}) => " if out else f"in({size}) <= ", 87 | "".join("%.2x" % (i) for i in data[0:10]), 88 | ) 89 | 90 | def _uart_drain(self): 91 | while self.uart.read(1) is not None: 92 | pass 93 | 94 | def _read_reg(self, addr): 95 | v, d = self._command(_CMD_ESP_READ_REG, struct.pack("= 8: 154 | (flag, _cmd, size, val) = struct.unpack(" {baudrate}") 167 | self._uart_drain() 168 | self._command(_CMD_CHANGE_BAUDRATE, struct.pack("> 16 233 | if flash_bits < 0x12 or flash_bits > 0x19: 234 | raise Exception(f"Unexpected flash size bits: 0x{flash_bits:02X}.") 235 | 236 | flash_size = 2**flash_bits 237 | print(f"Flash size {flash_size/1024/1024} MBytes") 238 | return flash_size 239 | 240 | def flash_attach(self): 241 | self._command(_CMD_SPI_ATTACH, struct.pack(" {seq+erase_blocks}...") 281 | struct.pack_into( 282 | " mount . run ninaflash.py 137 | ``` 138 | After a while the upload will start. A typical start sequence looks like: 139 | ``` 140 | Local directory . is mounted at /remote 141 | Failed to read response to command 8. 142 | Failed to read response to command 8. 143 | Changing baudrate => 921600 144 | Flash attached 145 | Flash size 2.0 MBytes 146 | Flash write size: 1310720 total_blocks: 320 block size: 4096 147 | Writing sequence number 0/320... 148 | Writing sequence number 1/320... 149 | Writing sequence number 2/320... 150 | Writing sequence number 3/320... 151 | Writing sequence number 4/320... 152 | .... 153 | .... 154 | Writing sequence number 317/320... 155 | Writing sequence number 318/320... 156 | Writing sequence number 319/320... 157 | Flash write finished 158 | Flash verify: File MD5 b'b0b9ab23da820a469e597c41364acb3a' 159 | Flash verify: Flash MD5 b'b0b9ab23da820a469e597c41364acb3a' 160 | Firmware verified. 161 | ``` 162 | The initial messages `Failed to read response to command 8.` 163 | can be ignored. 164 | 165 | Once the firmware upload is finished, the connection to RX, TX and GPIO0 166 | can be removed, unless the modules is used to Bluetooth communication, 167 | which needs RX and TX. 168 | -------------------------------------------------------------------------------- /w600_firmware/README.md: -------------------------------------------------------------------------------- 1 | MicroPython port to the W60X 2 | ============================= 3 | 4 | W60X is an embedded Wi-Fi SoC chip which is complying with IEEE802.11b/g/n international 5 | standard and which supports multi interface, multi protocol. 6 | It can be easily applied to smart appliances, smart home, health care, smart toy, wireless audio & video, 7 | industrial and other IoT fields. 8 | This SoC integrates Cortex-M3 CPU, Flash, RF Transceiver, CMOS PA, BaseBand. 9 | It applies multi interfaces such as SPI, UART, GPIO, I2C, PWM, I2S, 7816. 10 | It applies multi encryption and decryption protocols such as PRNG/SHA1/MD5/RC4/DES/3DES/AES/CRC/RSA. 11 | 12 | This is an experimental port of MicroPython to the WinnerMicro W60X microcontroller. 13 | 14 | Supported features 15 | ------------------------------------ 16 | 17 | - REPL (Python prompt) over UART0. 18 | - 8k stack for the MicroPython task and 100k Python heap. 19 | - Most of MicroPython's features are enabled: unicode, arbitrary-precision integers, 20 | single-precision floats (30bit), frozen bytecode, native emitters (native, viper and arm_thumb), 21 | framebuffer, asyncio, as well as many of the internal modules. 22 | - The machine module with mem8..mem32, GPIO, UART, SPI, I2C, PWM, WDT, ADC, RTC and Timer. 23 | - The network module with WLAN (WiFi) support (including OneShot). 24 | - Support of SSL using hardware encryption and decryption. 25 | - Internal LFS2 filesystem using the flash (up to ~300 KB available, up to ~1.3 MB on 2MB flash devices, 26 | depending on the build flags setting). 27 | - Built-in FTP server for transfer of script files. 28 | 29 | Setting up the cross toolchain and WM_SDK 30 | ----------------------------------------- 31 | 32 | Supports direct compilation in Linux system and compilation in Cygwin environment in Windows system. 33 | 34 | There are two main things to do here: 35 | 36 | - Download the cross toolchain and add it to the environment variable 37 | - Download WM_SDK and add to environment variables 38 | 39 | The cross toolchain used is arm-none-eabi-gcc version where the download address is 40 | [GNU Arm Embedded Toolchain](https://launchpad.net/gcc-arm-embedded/4.9/4.9-2014-q4-major) 41 | 42 | You will need to update your `PATH` environment variable to include the cross toolchain. For example, you can issue the following commands on (at least) Linux: 43 | 44 | $ export PATH=$PATH:/opt/tools/arm-none-eabi-gcc/bin 45 | 46 | You can put this command in your `.profile` or `.bash_login` (or `.bashrc` if using Github Codespaces). 47 | 48 | WM_SDK initially required the 4.x version of the GCC cross-compiler for compiling. Note also that version 4.x of the cross-compiler is 32bit and you may need `sudo apt install lib32z1` if running on a 64bit Linux host (test by running `arm-none-eabi-gcc --version` -- if it runs, you're fine; if you get a bash "No such file or directory", first double-check your $PATH and, if $PATH is correct, then it's the 32bit issue). 49 | Newer 64 bit versions of the GCC cross compiler like 8.3, 10.3 and 11.2 have been verified to work as well. 50 | 51 | WM_SDK download address is [W60X_SDK](http://www.winnermicro.com/en/html/1/156/158/497.html), under the Software Data tab. WM_SDK must be G3.01 and newer versions (G3.04 is latest as of end of 2022). You can also consider using the Github repo https://github.com/robert-hh/WM_SDK_W60X. 52 | 53 | You will need to update your `PATH` environment variable to include the path of WM_SDK. For example, you can issue the following commands on (at least) Linux: 54 | 55 | $ export WMSDK_PATH=/home/username/WM_SDK 56 | 57 | You can put this command in your `.profile` or `.bash_login` (or `.bashrc` if using Github Codespaces). 58 | 59 | You also need to modify the build configuration file in WM_SDK, located at: `WM_SDK/Include/wm_config.h` 60 | 61 | You can crop the component by modifying the macro switch, For example, 62 | 63 | #define TLS_CONFIG_HOSTIF CFG_OFF 64 | 65 | The recommended components that can be turned off are: 66 | 67 | #define TLS_CONFIG_HOSTIF CFG_OFF 68 | #define TLS_CONFIG_RMMS CFG_OFF 69 | #define TLS_CONFIG_HTTP_CLIENT CFG_OFF 70 | #define TLS_CONFIG_NTP CFG_OFF 71 | 72 | Building the firmware 73 | --------------------- 74 | 75 | Build MicroPython for a generic board: 76 | ``` 77 | bash 78 | $ cd mpy-cross 79 | $ make 80 | 81 | $ cd ports/w60x 82 | $ make submodules 83 | $ make V=s BOARD=GENERIC 84 | ``` 85 | This will produce binary firmware images in the `build-GENERIC` subdirectory. 86 | There are several options that can be modified in the Makefile. 87 | They are described in the separate file: `Makefile_build_options.txt`. 88 | 89 | Instead of BOARD=GENERIC another board may be selected. 90 | Currently available selections are: 91 | 92 | - GENERIC 93 | - THINGSTURN_TB01 94 | - W600_EVB_V2 95 | - WAVGAT_AIR602, similar to Thingsturn TB02 96 | - WEMOS_W600 97 | - WIS600, as well sold under different names like TW01 or ESP01W. 98 | 99 | The firmware of these boards on differs only in the set of Pin objects defined in machine.Pin.board. The board Thingturn TB01 is sold with 1M or 2M flash. The firmware will use the additional flash for the file system. 100 | 101 | Flashing the Firmware 102 | ----------------------- 103 | 104 | To upload the firmware to the target board, please use the command 105 | ``` 106 | bash 107 | make V=s BOARD=GENERIC flash 108 | ``` 109 | Some boards like the Wemos W600 require pushing reset at the start of the upload while the 110 | upload tool waits for synchronisation with the target board. 111 | Connecting pin PA0 to GND while pushing reset will ensure that the bootloader of the board 112 | will start and go into synchronization mode to allow the upload. 113 | Once the new Micropython firmware is on the board this connection of PA0 to GND is no longer necessary. 114 | Then you also may execute `machine.bootloader` from within Micropython to start the bootloader. 115 | 116 | Reference documents 117 | ----------------------- 118 | Visit [WinnerMicro](http://www.winnermicro.com/en/html/1/156/158/497.html) for more documentation. 119 | 120 | -------------------------------------------------------------------------------- /w600_firmware/w600tool.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import serial 4 | import os 5 | import sys 6 | import time 7 | import struct 8 | import argparse 9 | import platform 10 | 11 | 12 | import pyprind 13 | from xmodem import XMODEM1k 14 | 15 | __version__ = "0.2" 16 | 17 | CMD_SET_BAUD = 0x31 18 | CMD_ERASE = 0x32 # ROM boot only 19 | CMD_SET_SEC = 0x33 # ROM boot only 20 | CMD_GET_SEC = 0x34 # ROM boot only 21 | CMD_SET_GAIN = 0x35 22 | CMD_GET_GAIN = 0x36 23 | CMD_SET_MAC = 0x37 24 | CMD_GET_MAC = 0x38 25 | CMD_GET_QFID = 0x3c # ROM boot only 26 | CMD_ERASE_SECBOOT = 0x3f 27 | 28 | # CRC-16/CCITT-FALSE 29 | def crc16(data : bytearray): 30 | crc = 0xFFFF 31 | for i in range(0, len(data)): 32 | crc ^= data[i] << 8 33 | for j in range(0,8): 34 | if (crc & 0x8000) > 0: 35 | crc =(crc << 1) ^ 0x1021 36 | else: 37 | crc = crc << 1 38 | return crc & 0xFFFF 39 | 40 | def putc(c): 41 | sys.stdout.write(c) 42 | sys.stdout.flush() 43 | 44 | def error_exit(msg): 45 | print('Error:', msg) 46 | sys.exit(1) 47 | 48 | ser = None 49 | 50 | def deviceHardReset(): 51 | ser.setRTS(True) 52 | time.sleep(0.1) 53 | ser.setRTS(False) 54 | 55 | def deviceWaitBoot(timeout = 3): 56 | ser.timeout = 0.01 57 | ser.flushInput() 58 | started = time.time() 59 | buff = b'' 60 | while time.time() - started < timeout: 61 | ser.write(b'\x1B') 62 | buff = buff + ser.read(1) 63 | buff = buff[-16:] # Remember last 16 chars 64 | if buff.endswith(b'CCCC'): 65 | return True 66 | return False 67 | 68 | def sendCommand(cmd): 69 | cmd = struct.pack(' Try entering ROM boot manually') 220 | elif ext == '.img' and deviceIsInRomBoot(): 221 | error_exit('ROM bootloader only accepts FLS files') 222 | 223 | if args.upload_baud != ser.baudrate: 224 | if deviceSetBaud(args.upload_baud): 225 | print('Switched speed to', ser.baudrate) 226 | else: 227 | print('Warning: Cannot switch speed') 228 | if not deviceWaitBoot(5): 229 | error_exit('Could not recover from speed switch failure => Try again, or set upload-baud to 115200') 230 | 231 | print('Uploading', args.upload) 232 | reply = deviceUploadFile(args.upload) 233 | 234 | print("Reset board to run user code...") 235 | -------------------------------------------------------------------------------- /w600_firmware/wm_tool.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robert-hh/Shared-Stuff/eabb1e356c82495385b69672a0658cbb6242823f/w600_firmware/wm_tool.exe -------------------------------------------------------------------------------- /w600_firmware/wm_w600_GENERIC.fls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robert-hh/Shared-Stuff/eabb1e356c82495385b69672a0658cbb6242823f/w600_firmware/wm_w600_GENERIC.fls -------------------------------------------------------------------------------- /w600_firmware/wm_w600_THINGSTURN_TB01.fls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robert-hh/Shared-Stuff/eabb1e356c82495385b69672a0658cbb6242823f/w600_firmware/wm_w600_THINGSTURN_TB01.fls -------------------------------------------------------------------------------- /w600_firmware/wm_w600_W600_EVB_V2.fls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robert-hh/Shared-Stuff/eabb1e356c82495385b69672a0658cbb6242823f/w600_firmware/wm_w600_W600_EVB_V2.fls -------------------------------------------------------------------------------- /w600_firmware/wm_w600_WAVGAT_AIR602.fls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robert-hh/Shared-Stuff/eabb1e356c82495385b69672a0658cbb6242823f/w600_firmware/wm_w600_WAVGAT_AIR602.fls -------------------------------------------------------------------------------- /w600_firmware/wm_w600_WEMOS_W600.fls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robert-hh/Shared-Stuff/eabb1e356c82495385b69672a0658cbb6242823f/w600_firmware/wm_w600_WEMOS_W600.fls -------------------------------------------------------------------------------- /w600_firmware/wm_w600_WIS600.fls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robert-hh/Shared-Stuff/eabb1e356c82495385b69672a0658cbb6242823f/w600_firmware/wm_w600_WIS600.fls -------------------------------------------------------------------------------- /xtensa Instruction Set Architecture (ISA).pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robert-hh/Shared-Stuff/eabb1e356c82495385b69672a0658cbb6242823f/xtensa Instruction Set Architecture (ISA).pdf --------------------------------------------------------------------------------