mbed library sources. Supersedes mbed-src.

Dependents:   Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more

Committer:
AnnaBridge
Date:
Wed Jun 21 17:46:44 2017 +0100
Revision:
167:e84263d55307
Child:
179:b0033dcd6934
This updates the lib to the mbed lib v 145

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 167:e84263d55307 1 /***************************************************************************//**
AnnaBridge 167:e84263d55307 2 * @file flash_api.c
AnnaBridge 167:e84263d55307 3 *******************************************************************************
AnnaBridge 167:e84263d55307 4 * @section License
AnnaBridge 167:e84263d55307 5 * <b>Copyright 2017 Silicon Laboratories, Inc. http://www.silabs.com</b>
AnnaBridge 167:e84263d55307 6 *******************************************************************************
AnnaBridge 167:e84263d55307 7 *
AnnaBridge 167:e84263d55307 8 * SPDX-License-Identifier: Apache-2.0
AnnaBridge 167:e84263d55307 9 *
AnnaBridge 167:e84263d55307 10 * Licensed under the Apache License, Version 2.0 (the "License"); you may
AnnaBridge 167:e84263d55307 11 * not use this file except in compliance with the License.
AnnaBridge 167:e84263d55307 12 * You may obtain a copy of the License at
AnnaBridge 167:e84263d55307 13 *
AnnaBridge 167:e84263d55307 14 * http://www.apache.org/licenses/LICENSE-2.0
AnnaBridge 167:e84263d55307 15 *
AnnaBridge 167:e84263d55307 16 * Unless required by applicable law or agreed to in writing, software
AnnaBridge 167:e84263d55307 17 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
AnnaBridge 167:e84263d55307 18 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
AnnaBridge 167:e84263d55307 19 * See the License for the specific language governing permissions and
AnnaBridge 167:e84263d55307 20 * limitations under the License.
AnnaBridge 167:e84263d55307 21 *
AnnaBridge 167:e84263d55307 22 ******************************************************************************/
AnnaBridge 167:e84263d55307 23
AnnaBridge 167:e84263d55307 24 #include "device.h"
AnnaBridge 167:e84263d55307 25 #if DEVICE_FLASH
AnnaBridge 167:e84263d55307 26
AnnaBridge 167:e84263d55307 27 #include "flash_api.h"
AnnaBridge 167:e84263d55307 28 #include "em_msc.h"
AnnaBridge 167:e84263d55307 29
AnnaBridge 167:e84263d55307 30 /** Initialize the flash peripheral and the flash_t object
AnnaBridge 167:e84263d55307 31 *
AnnaBridge 167:e84263d55307 32 * @param obj The flash object
AnnaBridge 167:e84263d55307 33 * @return 0 for success, -1 for error
AnnaBridge 167:e84263d55307 34 */
AnnaBridge 167:e84263d55307 35 int32_t flash_init(flash_t *obj)
AnnaBridge 167:e84263d55307 36 {
AnnaBridge 167:e84263d55307 37 (void)obj;
AnnaBridge 167:e84263d55307 38 return 0;
AnnaBridge 167:e84263d55307 39 }
AnnaBridge 167:e84263d55307 40
AnnaBridge 167:e84263d55307 41 /** Uninitialize the flash peripheral and the flash_t object
AnnaBridge 167:e84263d55307 42 *
AnnaBridge 167:e84263d55307 43 * @param obj The flash object
AnnaBridge 167:e84263d55307 44 * @return 0 for success, -1 for error
AnnaBridge 167:e84263d55307 45 */
AnnaBridge 167:e84263d55307 46 int32_t flash_free(flash_t *obj)
AnnaBridge 167:e84263d55307 47 {
AnnaBridge 167:e84263d55307 48 (void)obj;
AnnaBridge 167:e84263d55307 49 return 0;
AnnaBridge 167:e84263d55307 50 }
AnnaBridge 167:e84263d55307 51
AnnaBridge 167:e84263d55307 52 /** Erase one sector starting at defined address
AnnaBridge 167:e84263d55307 53 *
AnnaBridge 167:e84263d55307 54 * The address should be at sector boundary. This function does not do any check for address alignments
AnnaBridge 167:e84263d55307 55 * @param obj The flash object
AnnaBridge 167:e84263d55307 56 * @param address The sector starting address
AnnaBridge 167:e84263d55307 57 * @return 0 for success, -1 for error
AnnaBridge 167:e84263d55307 58 */
AnnaBridge 167:e84263d55307 59 int32_t flash_erase_sector(flash_t *obj, uint32_t address)
AnnaBridge 167:e84263d55307 60 {
AnnaBridge 167:e84263d55307 61 (void)obj;
AnnaBridge 167:e84263d55307 62 MSC_Status_TypeDef mscStatus = MSC_ErasePage((uint32_t *)address);
AnnaBridge 167:e84263d55307 63
AnnaBridge 167:e84263d55307 64 return (mscStatus == mscReturnOk) ? 0 : -1;
AnnaBridge 167:e84263d55307 65 }
AnnaBridge 167:e84263d55307 66
AnnaBridge 167:e84263d55307 67 /** Program one page starting at defined address
AnnaBridge 167:e84263d55307 68 *
AnnaBridge 167:e84263d55307 69 * The page should be at page boundary, should not cross multiple sectors.
AnnaBridge 167:e84263d55307 70 * This function does not do any check for address alignments or if size is aligned to a page size.
AnnaBridge 167:e84263d55307 71 * @param obj The flash object
AnnaBridge 167:e84263d55307 72 * @param address The sector starting address
AnnaBridge 167:e84263d55307 73 * @param data The data buffer to be programmed
AnnaBridge 167:e84263d55307 74 * @param size The number of bytes to program
AnnaBridge 167:e84263d55307 75 * @return 0 for success, -1 for error
AnnaBridge 167:e84263d55307 76 */
AnnaBridge 167:e84263d55307 77 int32_t flash_program_page(flash_t *obj, uint32_t address, const uint8_t *data, uint32_t size)
AnnaBridge 167:e84263d55307 78 {
AnnaBridge 167:e84263d55307 79 (void)obj;
AnnaBridge 167:e84263d55307 80 MSC_Status_TypeDef mscStatus = MSC_WriteWord((uint32_t *)address, data, size);
AnnaBridge 167:e84263d55307 81
AnnaBridge 167:e84263d55307 82 return (mscStatus == mscReturnOk) ? 0 : -1;
AnnaBridge 167:e84263d55307 83 }
AnnaBridge 167:e84263d55307 84
AnnaBridge 167:e84263d55307 85 /** Get sector size
AnnaBridge 167:e84263d55307 86 *
AnnaBridge 167:e84263d55307 87 * @param obj The flash object
AnnaBridge 167:e84263d55307 88 * @param address The sector starting address
AnnaBridge 167:e84263d55307 89 * @return The size of a sector
AnnaBridge 167:e84263d55307 90 */
AnnaBridge 167:e84263d55307 91 uint32_t flash_get_sector_size(const flash_t *obj, uint32_t address)
AnnaBridge 167:e84263d55307 92 {
AnnaBridge 167:e84263d55307 93 (void)obj;
AnnaBridge 167:e84263d55307 94 (void)address;
AnnaBridge 167:e84263d55307 95
AnnaBridge 167:e84263d55307 96 if (address < FLASH_BASE || address >= FLASH_BASE + FLASH_SIZE) {
AnnaBridge 167:e84263d55307 97 // Address outside of flash -- invalid sector
AnnaBridge 167:e84263d55307 98 return MBED_FLASH_INVALID_SIZE;
AnnaBridge 167:e84263d55307 99 }
AnnaBridge 167:e84263d55307 100
AnnaBridge 167:e84263d55307 101 return FLASH_PAGE_SIZE;
AnnaBridge 167:e84263d55307 102 }
AnnaBridge 167:e84263d55307 103
AnnaBridge 167:e84263d55307 104 /** Get page size
AnnaBridge 167:e84263d55307 105 *
AnnaBridge 167:e84263d55307 106 * @param obj The flash object
AnnaBridge 167:e84263d55307 107 * @param address The page starting address
AnnaBridge 167:e84263d55307 108 * @return The size of a page
AnnaBridge 167:e84263d55307 109 */
AnnaBridge 167:e84263d55307 110 uint32_t flash_get_page_size(const flash_t *obj)
AnnaBridge 167:e84263d55307 111 {
AnnaBridge 167:e84263d55307 112 (void)obj;
AnnaBridge 167:e84263d55307 113 return FLASH_PAGE_SIZE;
AnnaBridge 167:e84263d55307 114 }
AnnaBridge 167:e84263d55307 115
AnnaBridge 167:e84263d55307 116 /** Get start address for the flash region
AnnaBridge 167:e84263d55307 117 *
AnnaBridge 167:e84263d55307 118 * @param obj The flash object
AnnaBridge 167:e84263d55307 119 * @return The start address for the flash region
AnnaBridge 167:e84263d55307 120 */
AnnaBridge 167:e84263d55307 121 uint32_t flash_get_start_address(const flash_t *obj)
AnnaBridge 167:e84263d55307 122 {
AnnaBridge 167:e84263d55307 123 (void)obj;
AnnaBridge 167:e84263d55307 124 return FLASH_BASE;
AnnaBridge 167:e84263d55307 125 }
AnnaBridge 167:e84263d55307 126
AnnaBridge 167:e84263d55307 127 /** Get the flash region size
AnnaBridge 167:e84263d55307 128 *
AnnaBridge 167:e84263d55307 129 * @param obj The flash object
AnnaBridge 167:e84263d55307 130 * @return The flash region size
AnnaBridge 167:e84263d55307 131 */
AnnaBridge 167:e84263d55307 132 uint32_t flash_get_size(const flash_t *obj)
AnnaBridge 167:e84263d55307 133 {
AnnaBridge 167:e84263d55307 134 (void)obj;
AnnaBridge 167:e84263d55307 135 return FLASH_SIZE;
AnnaBridge 167:e84263d55307 136 }
AnnaBridge 167:e84263d55307 137
AnnaBridge 167:e84263d55307 138 #endif // DEVICE_FLASH