forked from esp8266/Arduino
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
reading eboot commands via RTC, flash erase/copy
- Loading branch information
Showing
6 changed files
with
174 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
#include "eboot_command.h" | ||
|
||
uint32_t crc_update(uint32_t crc, const uint8_t *data, size_t length) | ||
{ | ||
uint32_t i; | ||
bool bit; | ||
uint8_t c; | ||
|
||
while (length--) { | ||
c = *data++; | ||
for (i = 0x80; i > 0; i >>= 1) { | ||
bit = crc & 0x80000000; | ||
if (c & i) { | ||
bit = !bit; | ||
} | ||
crc <<= 1; | ||
if (bit) { | ||
crc ^= 0x04c11db7; | ||
} | ||
} | ||
} | ||
return crc; | ||
} | ||
|
||
uint32_t eboot_command_calculate_crc32(const struct eboot_command* cmd) | ||
{ | ||
return crc_update(0xffffffff, (const uint8_t*) cmd, | ||
offsetof(struct eboot_command, crc32)); | ||
} | ||
|
||
void eboot_command_read(struct eboot_command* cmd) | ||
{ | ||
const uint32_t dw_count = sizeof(struct eboot_command) / sizeof(uint32_t); | ||
uint32_t* dst = (uint32_t *) cmd; | ||
for (uint32_t i = 0; i < dw_count; ++i) { | ||
dst[i] = RTC_MEM[i]; | ||
} | ||
|
||
uint32_t crc32 = eboot_command_calculate_crc32(cmd); | ||
if (cmd->magic & EBOOT_MAGIC_MASK != EBOOT_MAGIC || | ||
cmd->crc32 != crc32) { | ||
|
||
cmd->action = ACTION_LOAD_APP; | ||
cmd->args[0] = 0; | ||
} | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
#ifndef EBOOT_COMMAND_H | ||
#define EBOOT_COMMAND_H | ||
|
||
#include <stdint.h> | ||
#include <stddef.h> | ||
#include <stdbool.h> | ||
|
||
#define RTC_MEM ((volatile uint32_t*)0x60001200) | ||
|
||
enum action_t { | ||
ACTION_COPY_RAW = 0x00000001, | ||
ACTION_LOAD_APP = 0xffffffff | ||
}; | ||
|
||
#define EBOOT_MAGIC 0xeb001000 | ||
#define EBOOT_MAGIC_MASK 0xfffff000 | ||
|
||
struct eboot_command { | ||
uint32_t magic; | ||
enum action_t action; | ||
uint32_t args[29]; | ||
uint32_t crc32; | ||
}; | ||
|
||
|
||
void eboot_command_read(struct eboot_command* cmd); | ||
|
||
|
||
#endif //EBOOT_COMMAND_H |