Beispiel #1
0
uint64_t eep_read_ieee_address(void) {
    /* Union used to convert from byte read EEPROM address to number. */
    union {
        uint64_t nmbr;
        uint8_t array[sizeof(uint64_t)];
    } address_conv;
    
    address_conv.nmbr = 0;
    
    if (EEP_SOURCE_EXTERNAL == eep_source) {
        (bool)at24cxx_read_byte(EE_MAC_ADR + 0, &(address_conv.array[7]));
        (bool)at24cxx_read_byte(EE_MAC_ADR + 1, &(address_conv.array[6]));
        (bool)at24cxx_read_byte(EE_MAC_ADR + 2, &(address_conv.array[5]));
        (bool)at24cxx_read_byte(EE_MAC_ADR + 3, &(address_conv.array[4]));
        (bool)at24cxx_read_byte(EE_MAC_ADR + 4, &(address_conv.array[3]));
        (bool)at24cxx_read_byte(EE_MAC_ADR + 5, &(address_conv.array[2]));
        (bool)at24cxx_read_byte(EE_MAC_ADR + 6, &(address_conv.array[1]));
        (bool)at24cxx_read_byte(EE_MAC_ADR + 7, &(address_conv.array[0]));
    } else if (EEP_SOURCE_INTERNAL == eep_source) {
        EEGET((address_conv.array[7]), EE_MAC_ADR + 0);
        EEGET((address_conv.array[6]), EE_MAC_ADR + 1);
        EEGET((address_conv.array[5]), EE_MAC_ADR + 2);
        EEGET((address_conv.array[4]), EE_MAC_ADR + 3);
        EEGET((address_conv.array[3]), EE_MAC_ADR + 4);
        EEGET((address_conv.array[2]), EE_MAC_ADR + 5);
        EEGET((address_conv.array[1]), EE_MAC_ADR + 6);
        EEGET((address_conv.array[0]), EE_MAC_ADR + 7);
    } else {
        /* Function has been called without one of the supported EEPROM locations 
         * being valid.
         */
    }
    
    return address_conv.nmbr;
}
Beispiel #2
0
bool eep_init(void) {
    /* Initialize the external TWI EEPROM, and see if it is possible to read-back
     * the magic.
     */    
    if(true != at24cxx_init()) {
        at24cxx_deinit();
        return false;    
    }
    
    /* Read internal and external EEPROM magic. */
    uint8_t int_magic = 0xFF;
    EEGET(int_magic, EE_MAGIC_ADR);
    
    uint8_t ext_magic = 0xFF;
    (bool)at24cxx_read_byte(EE_MAGIC_ADR, &ext_magic);
    
    bool init_status = false;
    if (EE_MAGIC == ext_magic) {
        eep_source = EEP_SOURCE_EXTERNAL;
        init_status = true;
    } else if (EE_MAGIC == int_magic) {
        /* Save power by turning the TWI module off. */
        at24cxx_deinit();
        eep_source = EEP_SOURCE_INTERNAL;
        init_status = true;
    } else {
        /* Save power by turning the TWI module off. */
        at24cxx_deinit();
        /* No magic found. The init failed. */
        eep_source = EEP_SOURCE_UNSUPPORTED;
    }
    
    return init_status;
}
Beispiel #3
0
uint16_t eep_read_1v1(void) {
    /* Union used to convert from byte read EEPROM address to number. */
    union {
        uint16_t nmbr;
        uint8_t array[sizeof(uint16_t)];
    } v_conv;
    
    v_conv.nmbr = 0;
    if (EEP_SOURCE_EXTERNAL == eep_source) {
        (bool)at24cxx_read_byte(EE_1V1_CAL_VALUE_ADR + 1, &(v_conv.array[0]));
        (bool)at24cxx_read_byte(EE_1V1_CAL_VALUE_ADR + 0, &(v_conv.array[1]));
    } else if (EEP_SOURCE_INTERNAL == eep_source) {
        EEGET((v_conv.array[0]), EE_1V1_CAL_VALUE_ADR + 1);
        EEGET((v_conv.array[1]), EE_1V1_CAL_VALUE_ADR + 0);
    } else {
        /* Function has been called without one of the supported EEPROM locations 
         * being valid.
         */
    }
    
    return v_conv.nmbr;
}
Beispiel #4
0
uint8_t eep_read_production_day(void) {
    uint8_t prod_day = 0xFF;
    if (EEP_SOURCE_EXTERNAL == eep_source) {
        (bool)at24cxx_read_byte(EE_PRODDAY_ADR, &prod_day);
    } else if (EEP_SOURCE_INTERNAL == eep_source) {
        EEGET(prod_day, EE_PRODDAY_ADR);
    } else {
        /* Function has been called without one of the supported EEPROM locations 
         * being valid.
         */
    }
    
    return prod_day;
}
Beispiel #5
0
uint8_t eep_read_hw_revision(void) {
    uint8_t hw_rev = 0xFF;
    if (EEP_SOURCE_EXTERNAL == eep_source) {
        (bool)at24cxx_read_byte(EE_HWREV_ADR, &hw_rev);
    } else if (EEP_SOURCE_INTERNAL == eep_source) {
        EEGET(hw_rev, EE_HWREV_ADR);
    } else {
        /* Function has been called without one of the supported EEPROM locations 
         * being valid.
         */
    }
    
    return hw_rev;
}
Beispiel #6
0
uint8_t eep_read_cap_array(void) {
    uint8_t cap_array_setting = 0xFF;
    if (EEP_SOURCE_EXTERNAL == eep_source) {
        (bool)at24cxx_read_byte(EE_CAPARRAY_ADR, &cap_array_setting);
    } else if (EEP_SOURCE_INTERNAL == eep_source) {
        EEGET(cap_array_setting, EE_CAPARRAY_ADR);
    } else {
        /* Function has been called without one of the supported EEPROM locations 
         * being valid.
         */
    }
    
    return cap_array_setting;
}
/**
 * \brief Test data read/write API functions.
 *
 * This test calls the data read/write API functions and check the data consistency.
 *
 * \param test Current test case.
 */
static void run_test_data_read_write(const struct test_case *test)
{
	twi_options_t opt;
	uint8_t data;
	
	/* Configure the options of TWI driver */
	opt.master_clk = sysclk_get_main_hz();
	opt.speed = AT24C_TWI_CLK;

	if (twi_master_init(BOARD_AT24C_TWI_INSTANCE, &opt) != TWI_SUCCESS) {
		puts("AT24CXX initialization is failed.\r");
	}

	if (at24cxx_write_byte(AT24C_MEM_ADDR, 0xA5) != AT24C_WRITE_SUCCESS) {
		puts("AT24CXX write packet is failed.\r");
	}

	mdelay(10);

	if (at24cxx_read_byte(AT24C_MEM_ADDR,  &data) != AT24C_READ_SUCCESS) {
		puts("AT24CXX read packet is failed.\r");
	}
	test_assert_true(test, data == 0xA5, "Data is not consistent!");
}