{"id":16251489,"url":"https://github.com/pfalcon/yaota8266","last_synced_at":"2025-03-16T13:30:41.795Z","repository":{"id":139750948,"uuid":"72228711","full_name":"pfalcon/yaota8266","owner":"pfalcon","description":"Yet another OTA solution for ESP8266, this time supporting large (\u003e512KB) firmwares even on 1MB devices (repo is rebased)","archived":false,"fork":false,"pushed_at":"2020-02-01T20:27:09.000Z","size":42,"stargazers_count":120,"open_issues_count":18,"forks_count":33,"subscribers_count":16,"default_branch":"master","last_synced_at":"2024-10-10T15:10:45.692Z","etag":null,"topics":["bootloader","esp8266","lwip","ota"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pfalcon.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-10-28T17:38:19.000Z","updated_at":"2024-08-10T19:46:53.000Z","dependencies_parsed_at":null,"dependency_job_id":"15eb40e1-a52b-47c1-96ad-7024c501a393","html_url":"https://github.com/pfalcon/yaota8266","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pfalcon%2Fyaota8266","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pfalcon%2Fyaota8266/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pfalcon%2Fyaota8266/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pfalcon%2Fyaota8266/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pfalcon","download_url":"https://codeload.github.com/pfalcon/yaota8266/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221663798,"owners_count":16859909,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bootloader","esp8266","lwip","ota"],"created_at":"2024-10-10T15:10:23.350Z","updated_at":"2024-10-27T10:35:55.472Z","avatar_url":"https://github.com/pfalcon.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"yaota8266\n=========\n\nyaota8266 is yet another bootloader/over-the-air (OTA) update solution\nfor ESP8266 WiFi SoC. Unlike many other solutions, yaota8266 does not\nrequire reserving FlashROM space of 2x the size of the firmware. Instead,\nit updates the firmware in-place. Of course, this means that if an OTA\nupdate fails, there's no previous firmware to fallback to. On the other\nhand, if OTA update fails, you likely will repeat it again, until it\nsucceeds. So, for many usecases the process of OTA update will be the\nsame - a user will just repeat it until it succeeds, regardless whether\nthere's a fallback firmware or not.\n\nyaota8266 is written with big firmwares and small flash sizes in mind.\nFor example, it allows to have an OTA for full-fledged MicroPython\n(firmware sizes of 512+KB) on 1MB flash devices, and still have a\nsmall, but a filesystem.\n\n\nStructure and algorithm\n-----------------------\n\nyaota8266 consists of two parts:\n\n* 2nd-stage bootloader boot8266\n* ota-server application\n\nboot8266 works in the following way:\n\n1. 1st-stage bootloader in ESP8266 BootROM loads boot8266 (from sector 0).\n   It is small and fits within a single FlashROM sector (4K).\n2. boot8266 checks whether an OTA button on device is pressed. If\n   it is, it goes in OTA mode.\n3. If the button is not pressed, it verifies a checksum of a user\n   application. If it fails (for example, because of unsuccessful,\n   partial previous firmware update), it goes into OTA mode.\n4. If OTA mode is requested, boot8266 loads an application starting\n   at the sector 1. This is intended to be the ota-server, but from\n   boot8266's point of view, it's just a standard ESP8266 application,\n   which it loads recursively in the same (or very similar) way as\n   BootROM does it.\n5. If OTA mode was not requested, boot8266 loads a user application\n   which lies beyond the ota-server application end (offset is\n   configurable). The same note as above applies - boot8266 just loads\n   one or another application in the same way, and doesn't care what\n   they do (but boot8266 has partially hardcoded knowledge about sizes\n   of these applications, and verifies checksum only of the second one).\n\nota-server works in the following way:\n\n1. Starts a UDP server on port 8266.\n2. Expects consecutive UDP datagram containing chunks of new firmware.\n3. Each datagram is signed with RSA private key. Only someone with\n   a valid private key may produce valid datagrams, information from\n   which ota-server will flash as a user application. (The public key\n   is configured when building ota-server.)\n4. ota-client host-side application is provided to drive OTA upgrade\n   process for a device in OTA mode.\n\nKnown issues\n------------\n\nyaota8266 is a work in progress and is not yet fully working per the\nspec above.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpfalcon%2Fyaota8266","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpfalcon%2Fyaota8266","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpfalcon%2Fyaota8266/lists"}