Exemplo n.º 1
0
static inline int protod_cmd_write(COMM* comm, unsigned int addr, const char* buf, unsigned int size)
{
    int i;
    for (i = 0; i < WRITE_AREAS_COUNT; ++i)
    {
        if (__WRITE_AREAS[i].addr <= addr && __WRITE_AREAS[i].addr + __WRITE_AREAS[i].size >= addr + size)
            return board_flash_write(comm, addr, buf, size);
    }
    return DFU_STATUS_ADDRESS;
}
Exemplo n.º 2
0
BOARD_ERROR be_api_flash_write_configuration(void)
{    
    BOARD_ERROR be_result = BOARD_ERR_OK;

    API_FLASH_SYS_CONFIG api_flash_wr_config;
    
    uint32_t u32_addr_mem = 0U;
    uint32_t u32_addr_flash = 0U;
    
    /* Get size of structure in 8bits bytes. */
    uint32_t u32_sizeof = 0U;
    
    /* Calculating start address of wrining to page 127, defined in H file. */
    uint32_t u32_st_address = FLASH_BASE + FLASH_PAGE * 1024U;
    uint16_t u16_tmp;

    board_flash_unlock();
    board_flash_erase_page(u32_st_address);
    board_flash_lock();
    board_flash_unlock();

    u32_sizeof = sizeof(api_flash_configuration);
    
    api_flash_wr_config.pid_data[0]       = pid_api_pid_data[0];
    api_flash_wr_config.pid_data[1]       = pid_api_pid_data[1];
    api_flash_wr_config.pid_data[2]       = pid_api_pid_data[2];
    api_flash_wr_config.u32_data_is_valid = DATA_IS_VALID;
    api_flash_wr_config.u32_data_CRC      = gu32_api_flash_config_CRC32((uint32_t) &api_flash_wr_config);
 
    for(u16_tmp = 0U; u16_tmp < u32_sizeof; u16_tmp += 4U)
    {
        board_flash_write(u32_st_address + u16_tmp, ( ((uint32_t) &api_flash_wr_config) + u16_tmp) );
    }        
    board_flash_lock();

    for(u16_tmp = 0U; u16_tmp < u32_sizeof; u16_tmp += 4U)
    {
        u32_addr_flash = u32_st_address + u16_tmp;
        u32_addr_mem = ((uint32_t) &api_flash_wr_config) + u16_tmp;
        if( *(uint32_t *)u32_addr_flash != *(uint32_t *)u32_addr_mem)
        {
            be_result = BOARD_ERR_ERROR;
            break;
        }  
    }        
    return(be_result);
}
Exemplo n.º 3
0
/* This function write four uint8 (byte) of data to flash. */
void board_flash_write_variables(uint8_t u8_var0, uint8_t u8_var1, uint8_t u8_var2, uint8_t u8_var3)
{
    uint32_t u32_wr_data = 0U; 
        
    u32_wr_data =     (uint32_t)u8_var3<<24;
    u32_wr_data = u32_wr_data + u8_var2<<16; 
    u32_wr_data = u32_wr_data + u8_var1<<8;
    u32_wr_data = u32_wr_data + u8_var0;

    /* Calculating start address of wrining to page 127, defined in H file. */
    uint32_t u32_st_address = FLASH_BASE + FLASH_PAGE * 1024U;
    uint16_t u16_tmp;

    board_flash_unlock();
    board_flash_erase_page(u32_st_address);
    board_flash_lock();
    board_flash_unlock();

    for(u16_tmp = 0U; u16_tmp < 1024U; u16_tmp += 4U)
    {
        board_flash_write(u32_st_address + u16_tmp, u32_wr_data);
    }        
    board_flash_lock();
}