mirror of
https://github.com/tillitis/tillitis-key1.git
synced 2025-07-22 22:50:53 -04:00
fw: Update flash_write_data() to handle sizes larger than 4096 bytes
This commit is contained in:
parent
5a9b77806f
commit
53bc2d5fa0
3 changed files with 20 additions and 11 deletions
|
@ -176,7 +176,11 @@ int flash_write_data(uint32_t address, uint8_t *data, size_t size)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (size <= 0 || size > 4096) {
|
if (size <= 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (address % 256 != 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -184,6 +188,12 @@ int flash_write_data(uint32_t address, uint8_t *data, size_t size)
|
||||||
uint8_t *p_data = data;
|
uint8_t *p_data = data;
|
||||||
size_t n_bytes = 0;
|
size_t n_bytes = 0;
|
||||||
|
|
||||||
|
// Page Program allows 1-256 bytes of a page to be written. A page is
|
||||||
|
// 256 bytes. Behavior when writing past the end of a page is device
|
||||||
|
// specific.
|
||||||
|
//
|
||||||
|
// We set the address LSByte to 0 and only write 256 bytes or less in
|
||||||
|
// each transfer.
|
||||||
uint8_t tx_buf[4] = {
|
uint8_t tx_buf[4] = {
|
||||||
PAGE_PROGRAM, /* tx_buf[0] */
|
PAGE_PROGRAM, /* tx_buf[0] */
|
||||||
(address >> ADDR_BYTE_3_BIT) & 0xFF, /* tx_buf[1] */
|
(address >> ADDR_BYTE_3_BIT) & 0xFF, /* tx_buf[1] */
|
||||||
|
|
|
@ -43,12 +43,12 @@ int preload_load(struct partition_table *part_table, uint8_t from_slot)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
// preload_store stores chunks of an app in app slot to_slot. data is
|
// preload_store stores chunks of an app in app slot to_slot. data is a buffer
|
||||||
// a buffer of size size (max 4096 bytes) to be written at byte offset
|
// of size size to be written at byte offset in the slot. offset needs to be
|
||||||
// in the slot. offset needs to be kept and updated between each call.
|
// kept and updated between each call. offset must be a multiple of 256.
|
||||||
//
|
//
|
||||||
// When all data has been written call preload_store_finalize() with
|
// When all data has been written call preload_store_finalize() with the last
|
||||||
// the last parameters.
|
// parameters.
|
||||||
//
|
//
|
||||||
// Returns 0 on success.
|
// Returns 0 on success.
|
||||||
int preload_store(struct partition_table *part_table, uint32_t offset,
|
int preload_store(struct partition_table *part_table, uint32_t offset,
|
||||||
|
@ -77,7 +77,7 @@ int preload_store(struct partition_table *part_table, uint32_t offset,
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (size > 4096) {
|
if (size > SIZE_PRE_LOADED_APP) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -213,9 +213,8 @@ int storage_erase_sector(struct partition_table *part_table, uint32_t offset,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Writes the specified data to the offset inside of the allocated
|
// Writes the specified data to the offset inside of the allocated area.
|
||||||
// area. Assumes area has been erased before hand. Currently only
|
// Assumes area has been erased before hand. Offset must be a multiple of 256.
|
||||||
// handles writes to one sector, hence max size of 4096 bytes.
|
|
||||||
//
|
//
|
||||||
// Returns zero on success.
|
// Returns zero on success.
|
||||||
int storage_write_data(struct partition_table *part_table, uint32_t offset,
|
int storage_write_data(struct partition_table *part_table, uint32_t offset,
|
||||||
|
@ -246,7 +245,7 @@ int storage_write_data(struct partition_table *part_table, uint32_t offset,
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (size > 4096) {
|
if (size > SIZE_STORAGE_AREA) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue