mirror of
git://projects.qi-hardware.com/ben-wpan.git
synced 2024-11-16 23:11:55 +02:00
atusb/fw/flash.c: added basic writing support (untested)
This commit is contained in:
parent
1dcc83391e
commit
b8fc1a7f54
@ -13,30 +13,55 @@
|
|||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
#include <avr/io.h>
|
#include <avr/boot.h>
|
||||||
#include <avr/interrupt.h>
|
|
||||||
|
|
||||||
#define F_CPU 8000000UL
|
|
||||||
#include <util/delay.h>
|
|
||||||
|
|
||||||
#include "dfu.h"
|
#include "dfu.h"
|
||||||
#include "board.h"
|
#include "board.h"
|
||||||
|
|
||||||
|
|
||||||
|
static uint32_t payload;
|
||||||
|
|
||||||
|
|
||||||
void flash_start(void)
|
void flash_start(void)
|
||||||
{
|
{
|
||||||
|
payload = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int flash_can_write(uint16_t size)
|
int flash_can_write(uint16_t size)
|
||||||
{
|
{
|
||||||
return 0;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void flash_write(const uint8_t *buf, uint16_t size)
|
void flash_write(const uint8_t *buf, uint16_t size)
|
||||||
{
|
{
|
||||||
|
static uint8_t last;
|
||||||
|
const uint8_t *p;
|
||||||
|
|
||||||
|
eeprom_busy_wait();
|
||||||
|
for (p = buf; p != buf+size; p++) {
|
||||||
|
if (!(payload & (SPM_PAGESIZE-1))) {
|
||||||
|
if (payload) {
|
||||||
|
boot_page_write(payload-SPM_PAGESIZE);
|
||||||
|
boot_spm_busy_wait();
|
||||||
|
}
|
||||||
|
boot_page_erase(payload);
|
||||||
|
boot_spm_busy_wait();
|
||||||
|
}
|
||||||
|
if (payload & 1)
|
||||||
|
boot_page_fill(payload, last | (*p << 0));
|
||||||
|
else
|
||||||
|
last = *p;
|
||||||
|
payload++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(payload & (SPM_PAGESIZE-1))) {
|
||||||
|
boot_page_write(payload);
|
||||||
|
boot_spm_busy_wait();
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_rww_enable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user