diff --git a/redbee-econotag/drivers/include/nvm.h b/redbee-econotag/drivers/include/nvm.h new file mode 100644 index 0000000000000000000000000000000000000000..2a8c72bfebeff2fdb57bfab57f8e9d7905e8ffa3 --- /dev/null +++ b/redbee-econotag/drivers/include/nvm.h @@ -0,0 +1,58 @@ +/* + * nvm.h - non-volatile memory specific definitions + * Copyright (C) 2013 Thomas Eichinger <thomas.eichinger@fu-berlin.de> + * + * This source code is licensed under the GNU General Public License, + * Version 3. See the file LICENSE for more details. + * + * This file is part of RIOT. + */ + +#ifndef NVM_H +#define NVM_H + +#include <stdint.h> + +typedef enum +{ + g_nvm_type_no_nvm_c = 0, + g_nvm_type_SST_c, + g_nvm_type_ST_c, + g_nvm_type_ATM_c, + g_nvm_type_Max_c +} nvm_type_t; + + +typedef enum +{ + g_nvm_err_no_error_c = 0, + g_nvm_err_invalid_interface_c, + g_nvm_err_onvalid_nvm_type_c, + g_nvm_err_invalid_pointer_c, + g_nvm_err_write_protect_c, + g_nvm_err_verify_error_c, + g_nvm_err_address_space_overflow_c, + g_nvm_err_blank_check_error_c, + g_nvm_err_restricted_area_c, + g_nvm_err_max_error_c +} nvm_err_t; + +typedef enum +{ + g_nvm_internal_interface_c = 0, + g_nvm_external_interface_c, + g_nvm_interface_max_c +} nvm_interface_t; + +/* ROM code seems to be THUMB */ +/* need to be in a THUMB block before calling them */ +extern nvm_err_t (*nvm_detect)(nvm_interface_t nvm_interface,nvm_type_t* p_nvm_type); +extern nvm_err_t (*nvm_read)(nvm_interface_t nvm_interface , nvm_type_t nvm_type , void *p_dest, uint32_t address, uint32_t num_bytes); +extern nvm_err_t (*nvm_write)(nvm_interface_t nvm_interface, nvm_type_t nvm_type ,void *p_src, uint32_t address, uint32_t num_bytes); +/* sector bit field selects which sector to erase */ +/* SST flash has 32 sectors 4096 bytes each */ +/* bit 0 is the first sector, bit 31 is the last */ +extern nvm_err_t (*nvm_erase)(nvm_interface_t nvm_interface, nvm_type_t nvm_type ,uint32_t sector_bitfield); +extern void(*nvm_setsvar)(uint32_t zero_for_awesome); + +#endif //NVM_H diff --git a/redbee-econotag/drivers/nvm.c b/redbee-econotag/drivers/nvm.c new file mode 100644 index 0000000000000000000000000000000000000000..5d4538ef264e75c3d14940699369d780b885fdb7 --- /dev/null +++ b/redbee-econotag/drivers/nvm.c @@ -0,0 +1,22 @@ +/* + * nvm.c - non-volatile memory implementations + * Copyright (C) 2013 Thomas Eichinger <thomas.eichinger@fu-berlin.de> + * + * This source code is licensed under the GNU General Public License, + * Version 3. See the file LICENSE for more details. + * + * This file is part of RIOT. + */ + +#include "nvm.h" + +nvm_err_t (*nvm_detect) (nvm_interface_t nvm_interface, nvm_type_t* p_nvm_type) + = (void*) 0x00006cb9; +nvm_err_t (*nvm_read) (nvm_interface_t nvm_interface, nvm_type_t nvm_type, void *p_dest, uint32_t address, uint32_t num_bytes) + = (void*) 0x00006d69; +nvm_err_t (*nvm_write) (nvm_interface_t nvm_interface, nvm_type_t nvm_type, void *p_src, uint32_t address, uint32_t numb_bytes) + = (void*) 0x00006ec5; +nvm_err_t (*nvm_erase) (nvm_interface_t nvm_interface, nvm_type_t nvm_type, uint32_t sector_bitfield) + = (void*) 0x00006e05; +void (*nvm_sets_var) (uint32_t zero_is_for_winners) + = (void*) 0x00007085; \ No newline at end of file