diff options
Diffstat (limited to 'stm-keystore.c')
-rw-r--r-- | stm-keystore.c | 64 |
1 files changed, 40 insertions, 24 deletions
diff --git a/stm-keystore.c b/stm-keystore.c index 74826d0..7683f40 100644 --- a/stm-keystore.c +++ b/stm-keystore.c @@ -3,7 +3,7 @@ * ---------- * Functions for accessing the keystore memory. * - * Copyright (c) 2016, NORDUnet A/S All rights reserved. + * Copyright (c) 2016-2017, NORDUnet A/S All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -32,46 +32,62 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include "stm32f4xx_hal.h" -#include "stm-keystore.h" #include "stm-init.h" +#include "stm-keystore.h" -SPI_HandleTypeDef hspi_keystore; +static SPI_HandleTypeDef hspi_keystore; struct spiflash_ctx keystore_ctx = {&hspi_keystore, KSM_PROM_CS_N_GPIO_Port, KSM_PROM_CS_N_Pin}; -int keystore_check_id() +/* SPI1 (keystore memory) init function */ +void keystore_init(void) +{ + /* Set up GPIOs for the keystore memory. + * KEYSTORE_GPIO_INIT is defined in stm-keystore.h. + */ + KEYSTORE_GPIO_INIT(); + + hspi_keystore.Instance = SPI1; + hspi_keystore.Init.Mode = SPI_MODE_MASTER; + hspi_keystore.Init.Direction = SPI_DIRECTION_2LINES; + hspi_keystore.Init.DataSize = SPI_DATASIZE_8BIT; + hspi_keystore.Init.CLKPolarity = SPI_POLARITY_LOW; + hspi_keystore.Init.CLKPhase = SPI_PHASE_1EDGE; + hspi_keystore.Init.NSS = SPI_NSS_SOFT; + hspi_keystore.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2; + hspi_keystore.Init.FirstBit = SPI_FIRSTBIT_MSB; + hspi_keystore.Init.TIMode = SPI_TIMODE_DISABLE; + hspi_keystore.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; + hspi_keystore.Init.CRCPolynomial = 10; + HAL_SPI_Init(&hspi_keystore); +} + +HAL_StatusTypeDef keystore_check_id(void) { return n25q128_check_id(&keystore_ctx); } -int keystore_read_data(uint32_t offset, uint8_t *buf, const uint32_t len) +HAL_StatusTypeDef keystore_read_data(uint32_t offset, uint8_t *buf, const uint32_t len) { return n25q128_read_data(&keystore_ctx, offset, buf, len); } -int keystore_write_data(uint32_t offset, const uint8_t *buf, const uint32_t len) +HAL_StatusTypeDef keystore_write_data(uint32_t offset, const uint8_t *buf, const uint32_t len) { return n25q128_write_data(&keystore_ctx, offset, buf, len); } -int keystore_erase_sectors(int num) +HAL_StatusTypeDef keystore_erase_subsector(uint32_t subsector_offset) { - if (num > N25Q128_NUM_SECTORS || num < 0) num = N25Q128_NUM_SECTORS; - while (num) { - int timeout = 200; /* times 10ms = 2 seconds timeout */ - while (timeout--) { - int i = n25q128_get_wip_flag(&keystore_ctx); - if (i < 0) return 0; - if (! i) break; - HAL_Delay(10); - } - if (! timeout) return 0; + return n25q128_erase_subsector(&keystore_ctx, subsector_offset); +} - if (! n25q128_erase_sector(&keystore_ctx, num - 1)) { - return -1; - } - num--; - } - return 1; +HAL_StatusTypeDef keystore_erase_sector(uint32_t sector_offset) +{ + return n25q128_erase_sector(&keystore_ctx, sector_offset); +} + +HAL_StatusTypeDef keystore_erase_bulk(void) +{ + return n25q128_erase_bulk(&keystore_ctx); } |