static void cli_cmd_fsnum(char *cmdline) { /* Abuse cli function to parse the hex */ int16_t status; static const clivalue_t snum_value = { NULL, VAR_HEX, &snum, 8 }; cliSetVar(&snum_value, cmdline); status = eeprom_write_page(0, (uint8_t*)&snum); if (status == EERR_OK) { cliInfo(NULL); } else { show_eeprom_error(status); } }
int16_t eeprom_write_cfg(void) { uint8_t addr; int16_t status; cfg.crc = inet_chksum(&cfg, sizeof(cfg) - 2); for (addr = EEPROM_CFG_OFFSET; addr < EEPROM_SIZE; addr += EEPROM_PAGE_SIZE) { status = eeprom_write_page(addr, &cfg_bytes[addr - EEPROM_CFG_OFFSET]); if (status != EERR_OK) { return status; } } return EERR_OK; }
void eeprom_write_bank(uint16_t addr,uint16_t num,uint8_t *p_data) { uint16_t i = 0; uint16_t cur_blk = addr/PAGE_SIZE;//写入地址所在页 uint8_t blk_shift = addr%PAGE_SIZE;//写入地址在页内的偏移量 uint8_t first_blk_num = PAGE_SIZE - (addr%PAGE_SIZE);//写入地址所在页的剩余容量 uint16_t last_blk = (addr+num)/PAGE_SIZE;//写入数据的最后页号 uint8_t last_blk_num = (addr+num)%PAGE_SIZE;//写入数据的最后页内需要的写的字节数 uint16_t full_page_num = last_blk - cur_blk; if(num <= first_blk_num) { while(eeprom_write_page(cur_blk,blk_shift,num,p_data)); p_data += num; cur_blk++; }else { while(eeprom_write_page(cur_blk,blk_shift,first_blk_num,p_data)); p_data += first_blk_num; cur_blk++; } if(full_page_num > 1) { for(i = 0; i < full_page_num - 1; i++) { while(eeprom_write_page(cur_blk,0,PAGE_SIZE,p_data)); p_data += PAGE_SIZE; cur_blk++; } } if(last_blk == cur_blk) { while(eeprom_write_page(cur_blk,0,last_blk_num,p_data)); } }