46 #include "dev/watchdog.h"
50 #define PRINTF(...) printf(__VA_ARGS__)
52 #define PRINTF(...) do {} while (0)
55 #define SPI_FLASH_INS_WREN 0x06
56 #define SPI_FLASH_INS_WRDI 0x04
57 #define SPI_FLASH_INS_RDSR 0x05
58 #define SPI_FLASH_INS_WRSR 0x01
59 #define SPI_FLASH_INS_READ 0x03
60 #define SPI_FLASH_INS_FAST_READ 0x0b
61 #define SPI_FLASH_INS_PP 0x02
62 #define SPI_FLASH_INS_SE 0xd8
63 #define SPI_FLASH_INS_BE 0xc7
64 #define SPI_FLASH_INS_DP 0xb9
65 #define SPI_FLASH_INS_RES 0xab
83 read_status_register(
void)
112 u = read_status_register();
121 erase_sector(
unsigned long offset)
149 P4DIR |= BV(FLASH_CS) | BV(FLASH_HOLD) | BV(FLASH_PWR);
150 P4OUT |= BV(FLASH_PWR);
157 xmem_pread(
void *_p,
int size,
unsigned long offset)
159 unsigned char *p = _p;
160 const unsigned char *end = p + size;
164 ENERGEST_ON(ENERGEST_TYPE_FLASH_READ);
176 for(; p < end; p++) {
185 ENERGEST_OFF(ENERGEST_TYPE_FLASH_READ);
191 program_page(
unsigned long offset,
const unsigned char *p,
int nbytes)
193 const unsigned char *end = p + nbytes;
208 for(; p < end; p++) {
220 xmem_pwrite(
const void *_buf,
int size,
unsigned long addr)
222 const unsigned char *p = _buf;
223 const unsigned long end = addr + size;
224 unsigned long i, next_page;
226 ENERGEST_ON(ENERGEST_TYPE_FLASH_WRITE);
228 for(i = addr; i < end;) {
229 next_page = (i | 0xff) + 1;
230 if(next_page > end) {
233 p = program_page(i, p, next_page - i);
237 ENERGEST_OFF(ENERGEST_TYPE_FLASH_WRITE);
243 xmem_erase(
long size,
unsigned long addr)
245 unsigned long end = addr + size;
247 if(size % XMEM_ERASE_UNIT_SIZE != 0) {
248 PRINTF(
"xmem_erase: bad size\n");
252 if(addr % XMEM_ERASE_UNIT_SIZE != 0) {
253 PRINTF(
"xmem_erase: bad offset\n");
259 for (; addr < end; addr += XMEM_ERASE_UNIT_SIZE) {
void watchdog_start(void)
Starts the WDT in watchdog mode if enabled by user configuration, maximum interval.
void watchdog_stop(void)
In watchdog mode, the WDT can not be stopped.
void spi_init(void)
Initialize the SPI bus.