Пример #1
0
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);
    }
}
Пример #2
0
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;
}
Пример #3
0
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));
  }
}