{"id":18434930,"url":"https://github.com/loboris/imx_rt10xx_bootloader","last_synced_at":"2025-07-19T10:36:21.514Z","repository":{"id":111842839,"uuid":"430470017","full_name":"loboris/iMX_RT10XX_bootloader","owner":"loboris","description":"Bootloader for mimrxt MicroPython port","archived":false,"fork":false,"pushed_at":"2021-11-22T00:26:03.000Z","size":132,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-11T19:19:47.833Z","etag":null,"topics":["bootloader","imxrt1052","imxrt1062","micropython"],"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/loboris.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":"2021-11-21T20:15:08.000Z","updated_at":"2024-05-15T06:52:27.000Z","dependencies_parsed_at":"2023-04-25T09:01:30.537Z","dependency_job_id":null,"html_url":"https://github.com/loboris/iMX_RT10XX_bootloader","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/loboris/iMX_RT10XX_bootloader","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loboris%2FiMX_RT10XX_bootloader","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loboris%2FiMX_RT10XX_bootloader/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loboris%2FiMX_RT10XX_bootloader/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loboris%2FiMX_RT10XX_bootloader/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/loboris","download_url":"https://codeload.github.com/loboris/iMX_RT10XX_bootloader/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loboris%2FiMX_RT10XX_bootloader/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265918171,"owners_count":23849089,"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","imxrt1052","imxrt1062","micropython"],"created_at":"2024-11-06T06:06:28.570Z","updated_at":"2025-07-19T10:36:21.485Z","avatar_url":"https://github.com/loboris.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# iMX RT10XX bootloader\n*Bootloader for mimrxt MicroPython port*\n\nThe bootloader must be programed into RT10XX qspi Flash (or Hyperflash, not tested) using one of the usual flashing ways.\nOnce loaded, it enables loading the firmware into flassh over the CDC/ACM port using the provided **Mflash.py** program loader, written in **Python** and capable of running any **Linux** or **Windows** machine (probably also on OSX, not yet tested).\nBootloader itself occupies the first **64MB** of flash, the rest can be used for user firmware(s).\nThe firmware must be linked at start address equal or higher than `0x60010000`.\n\n**Main features:**\n\n* works on any i.MX RT series MCU (tested with RT1052 and RT1062)\n* capable of loading one of **two** firmwares form Flash, ideal for **OTA program upgrade** (the new version can be loaded from application itself)\n* if valid application would start, the bootloader can be entered by pressing the user button on board\n* LED indication of operation state\n* very secure, two copies of the boot configuratin sectors (main and backup) are provided, if the main is corrupted it is restored from backup\n* the firmware (user application) is protected and verified on boot by 32-byte **SHA256** hash\n* very fast communication with the loader program (~500 KB/sec),\u003cbr\u003eFlash program opperation is, of course, slower and depends on how much sectors must be erased\n* this bootloader was build for use with **MicroPython** firmwares, but any firmware can be used, as long as it was correctly linked for start address of `0x60010000` or higher\n* provided (Python) loader program features:\n  * programming the firmware to the specific Flash address (taken from the firmware file IVT section)\n  * reading any Flash area into file\n  * erasing any flash area\n  * getting the information about boot configuration\n  * bootloader does not permit accidental programming of its own Flash area\n  * works well both on Linux and Windows, (**_pyserial_** module must be installed)\n\n\n**Boot loader boot sector structure:**\n| Offset | Size | Name | Description |\n| ---: | ---: | ---: | :--- |\n|      0 | 16 | bootSectID | string ID: `i.MXRT10XX_boot` |\n|     16 | 60 | app1ConfigRecord | Application #1 config record |\n|     76 | 60 | app2ConfigRecord | Application #2 config record |\n|    136 | 4 | bootSectCRC32 | Boot sector CRC32\u003cbr\u003ecalculated over the first 136 bytes |\n\n**Application config record structure:**\n| Offset | Size | Name | Description |\n| ---: | ---: | ---: | :--- |\n| 0 | 16 | appName | application name, NULL terminated string |\n| 16 | 4 | appFlashAddress | application address in Flash (min addr `0x600100000`) |\n| 20 | 4 | appSize | application size, 24-bil; upper 8-bits are *flags*\u003cbr\u003eApplication size range is `0x10000` - `0x200000` (64KB - 2MB) |\n| 24 | 4 | appTimestamp | application timestamp written by Loader |\n| 28 | 32 | appSHA256 | application's SHA256 hash calculated over **appSize** bytes from **appFlashAddress**\u003cbr\u003eThe check must pass for application to be started |\n\n*Bits `24-31` of the* **appSize** *field are used as application* **_flags_**:\n| Bit | Comment |\n| :---: | :--- |\n| `24` | **Active** flag, if set the application will be loaded and executed.\u003cbr\u003eIf multiple entries have **active** flag set, the first one will be loaded and executed.\u003cbr\u003eIf no application has active flag set, the applications will be tested for valid address, size and SHA256 hash an the first one which passes will be started. |\n| `25` | Not used, reserved for future use |\n| `26` | Not used, reserved for future use |\n| `27` | Not used, reserved for future use |\n| `28` | Not used, reserved for future use |\n| `29` | Not used, reserved for future use |\n| `30` | Not used, reserved for future use |\n| `31` | Not used, reserved for future use |\n\n_Notes_:\u003cbr\u003e\nThe bootloader was developed and compiled with Keil (µVision® IDE).\u003cbr\u003e\nCurrently I don'have time to transfer it to gcc/makefile environment.\u003cbr\u003e\nIf anyone is interested in doing it, the Pull request is welcomed.\u003cbr\u003e\n\nPrebuilt firmwares are available in the **firmwares** directory.\u003cbr\u003e\n\n*More information will be added soon...*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Floboris%2Fimx_rt10xx_bootloader","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Floboris%2Fimx_rt10xx_bootloader","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Floboris%2Fimx_rt10xx_bootloader/lists"}