1

Committer:
valeyev
Date:
Tue Mar 13 07:17:50 2018 +0000
Revision:
0:e056ac8fecf8
looking for...

Who changed what in which revision?

UserRevisionLine numberNew contents of line
valeyev 0:e056ac8fecf8 1 /** \addtogroup hal */
valeyev 0:e056ac8fecf8 2 /** @{*/
valeyev 0:e056ac8fecf8 3
valeyev 0:e056ac8fecf8 4 /* mbed Microcontroller Library
valeyev 0:e056ac8fecf8 5 * Copyright (c) 2017 ARM Limited
valeyev 0:e056ac8fecf8 6 *
valeyev 0:e056ac8fecf8 7 * Licensed under the Apache License, Version 2.0 (the "License");
valeyev 0:e056ac8fecf8 8 * you may not use this file except in compliance with the License.
valeyev 0:e056ac8fecf8 9 * You may obtain a copy of the License at
valeyev 0:e056ac8fecf8 10 *
valeyev 0:e056ac8fecf8 11 * http://www.apache.org/licenses/LICENSE-2.0
valeyev 0:e056ac8fecf8 12 *
valeyev 0:e056ac8fecf8 13 * Unless required by applicable law or agreed to in writing, software
valeyev 0:e056ac8fecf8 14 * distributed under the License is distributed on an "AS IS" BASIS,
valeyev 0:e056ac8fecf8 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
valeyev 0:e056ac8fecf8 16 * See the License for the specific language governing permissions and
valeyev 0:e056ac8fecf8 17 * limitations under the License.
valeyev 0:e056ac8fecf8 18 */
valeyev 0:e056ac8fecf8 19 #ifndef MBED_FLASH_API_H
valeyev 0:e056ac8fecf8 20 #define MBED_FLASH_API_H
valeyev 0:e056ac8fecf8 21
valeyev 0:e056ac8fecf8 22 #include "device.h"
valeyev 0:e056ac8fecf8 23 #include <stdint.h>
valeyev 0:e056ac8fecf8 24
valeyev 0:e056ac8fecf8 25 #if DEVICE_FLASH
valeyev 0:e056ac8fecf8 26
valeyev 0:e056ac8fecf8 27 #define MBED_FLASH_INVALID_SIZE 0xFFFFFFFF
valeyev 0:e056ac8fecf8 28
valeyev 0:e056ac8fecf8 29 typedef struct flash_s flash_t;
valeyev 0:e056ac8fecf8 30
valeyev 0:e056ac8fecf8 31 #if TARGET_FLASH_CMSIS_ALGO
valeyev 0:e056ac8fecf8 32 #include "flash_data.h"
valeyev 0:e056ac8fecf8 33 #endif
valeyev 0:e056ac8fecf8 34
valeyev 0:e056ac8fecf8 35 #ifdef __cplusplus
valeyev 0:e056ac8fecf8 36 extern "C" {
valeyev 0:e056ac8fecf8 37 #endif
valeyev 0:e056ac8fecf8 38
valeyev 0:e056ac8fecf8 39 /**
valeyev 0:e056ac8fecf8 40 * \defgroup flash_hal Flash HAL API
valeyev 0:e056ac8fecf8 41 * @{
valeyev 0:e056ac8fecf8 42 */
valeyev 0:e056ac8fecf8 43
valeyev 0:e056ac8fecf8 44 /** Initialize the flash peripheral and the flash_t object
valeyev 0:e056ac8fecf8 45 *
valeyev 0:e056ac8fecf8 46 * @param obj The flash object
valeyev 0:e056ac8fecf8 47 * @return 0 for success, -1 for error
valeyev 0:e056ac8fecf8 48 */
valeyev 0:e056ac8fecf8 49 int32_t flash_init(flash_t *obj);
valeyev 0:e056ac8fecf8 50
valeyev 0:e056ac8fecf8 51 /** Uninitialize the flash peripheral and the flash_t object
valeyev 0:e056ac8fecf8 52 *
valeyev 0:e056ac8fecf8 53 * @param obj The flash object
valeyev 0:e056ac8fecf8 54 * @return 0 for success, -1 for error
valeyev 0:e056ac8fecf8 55 */
valeyev 0:e056ac8fecf8 56 int32_t flash_free(flash_t *obj);
valeyev 0:e056ac8fecf8 57
valeyev 0:e056ac8fecf8 58 /** Erase one sector starting at defined address
valeyev 0:e056ac8fecf8 59 *
valeyev 0:e056ac8fecf8 60 * The address should be at sector boundary. This function does not do any check for address alignments
valeyev 0:e056ac8fecf8 61 * @param obj The flash object
valeyev 0:e056ac8fecf8 62 * @param address The sector starting address
valeyev 0:e056ac8fecf8 63 * @return 0 for success, -1 for error
valeyev 0:e056ac8fecf8 64 */
valeyev 0:e056ac8fecf8 65 int32_t flash_erase_sector(flash_t *obj, uint32_t address);
valeyev 0:e056ac8fecf8 66
valeyev 0:e056ac8fecf8 67 /** Read data starting at defined address
valeyev 0:e056ac8fecf8 68 *
valeyev 0:e056ac8fecf8 69 * This function has a WEAK implementation using memcpy for backwards compatibility.
valeyev 0:e056ac8fecf8 70 * @param obj The flash object
valeyev 0:e056ac8fecf8 71 * @param address Address to begin reading from
valeyev 0:e056ac8fecf8 72 * @param data The buffer to read data into
valeyev 0:e056ac8fecf8 73 * @param size The number of bytes to read
valeyev 0:e056ac8fecf8 74 * @return 0 for success, -1 for error
valeyev 0:e056ac8fecf8 75 */
valeyev 0:e056ac8fecf8 76 int32_t flash_read(flash_t *obj, uint32_t address, uint8_t *data, uint32_t size);
valeyev 0:e056ac8fecf8 77
valeyev 0:e056ac8fecf8 78 /** Program pages starting at defined address
valeyev 0:e056ac8fecf8 79 *
valeyev 0:e056ac8fecf8 80 * The pages should not cross multiple sectors.
valeyev 0:e056ac8fecf8 81 * This function does not do any check for address alignments or if size is aligned to a page size.
valeyev 0:e056ac8fecf8 82 * @param obj The flash object
valeyev 0:e056ac8fecf8 83 * @param address The sector starting address
valeyev 0:e056ac8fecf8 84 * @param data The data buffer to be programmed
valeyev 0:e056ac8fecf8 85 * @param size The number of bytes to program
valeyev 0:e056ac8fecf8 86 * @return 0 for success, -1 for error
valeyev 0:e056ac8fecf8 87 */
valeyev 0:e056ac8fecf8 88 int32_t flash_program_page(flash_t *obj, uint32_t address, const uint8_t *data, uint32_t size);
valeyev 0:e056ac8fecf8 89
valeyev 0:e056ac8fecf8 90 /** Get sector size
valeyev 0:e056ac8fecf8 91 *
valeyev 0:e056ac8fecf8 92 * @param obj The flash object
valeyev 0:e056ac8fecf8 93 * @param address The sector starting address
valeyev 0:e056ac8fecf8 94 * @return The size of a sector
valeyev 0:e056ac8fecf8 95 */
valeyev 0:e056ac8fecf8 96 uint32_t flash_get_sector_size(const flash_t *obj, uint32_t address);
valeyev 0:e056ac8fecf8 97
valeyev 0:e056ac8fecf8 98 /** Get page size
valeyev 0:e056ac8fecf8 99 *
valeyev 0:e056ac8fecf8 100 * The page size defines the writable page size
valeyev 0:e056ac8fecf8 101 * @param obj The flash object
valeyev 0:e056ac8fecf8 102 * @return The size of a page
valeyev 0:e056ac8fecf8 103 */
valeyev 0:e056ac8fecf8 104 uint32_t flash_get_page_size(const flash_t *obj);
valeyev 0:e056ac8fecf8 105
valeyev 0:e056ac8fecf8 106 /** Get start address for the flash region
valeyev 0:e056ac8fecf8 107 *
valeyev 0:e056ac8fecf8 108 * @param obj The flash object
valeyev 0:e056ac8fecf8 109 * @return The start address for the flash region
valeyev 0:e056ac8fecf8 110 */
valeyev 0:e056ac8fecf8 111 uint32_t flash_get_start_address(const flash_t *obj);
valeyev 0:e056ac8fecf8 112
valeyev 0:e056ac8fecf8 113 /** Get the flash region size
valeyev 0:e056ac8fecf8 114 *
valeyev 0:e056ac8fecf8 115 * @param obj The flash object
valeyev 0:e056ac8fecf8 116 * @return The flash region size
valeyev 0:e056ac8fecf8 117 */
valeyev 0:e056ac8fecf8 118 uint32_t flash_get_size(const flash_t *obj);
valeyev 0:e056ac8fecf8 119
valeyev 0:e056ac8fecf8 120 /**@}*/
valeyev 0:e056ac8fecf8 121
valeyev 0:e056ac8fecf8 122 #ifdef __cplusplus
valeyev 0:e056ac8fecf8 123 }
valeyev 0:e056ac8fecf8 124 #endif
valeyev 0:e056ac8fecf8 125
valeyev 0:e056ac8fecf8 126 #endif
valeyev 0:e056ac8fecf8 127
valeyev 0:e056ac8fecf8 128 #endif
valeyev 0:e056ac8fecf8 129
valeyev 0:e056ac8fecf8 130 /** @}*/