RTC auf true

Committer:
kevman
Date:
Wed Mar 13 11:03:24 2019 +0000
Revision:
2:7aab896b1a3b
2019-03-13

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kevman 2:7aab896b1a3b 1 /* mbed Microcontroller Library
kevman 2:7aab896b1a3b 2 * Copyright (c) 2016 ARM Limited
kevman 2:7aab896b1a3b 3 *
kevman 2:7aab896b1a3b 4 * Licensed under the Apache License, Version 2.0 (the "License");
kevman 2:7aab896b1a3b 5 * you may not use this file except in compliance with the License.
kevman 2:7aab896b1a3b 6 * You may obtain a copy of the License at
kevman 2:7aab896b1a3b 7 *
kevman 2:7aab896b1a3b 8 * http://www.apache.org/licenses/LICENSE-2.0
kevman 2:7aab896b1a3b 9 *
kevman 2:7aab896b1a3b 10 * Unless required by applicable law or agreed to in writing, software
kevman 2:7aab896b1a3b 11 * distributed under the License is distributed on an "AS IS" BASIS,
kevman 2:7aab896b1a3b 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
kevman 2:7aab896b1a3b 13 * See the License for the specific language governing permissions and
kevman 2:7aab896b1a3b 14 * limitations under the License.
kevman 2:7aab896b1a3b 15 */
kevman 2:7aab896b1a3b 16
kevman 2:7aab896b1a3b 17 #ifndef MBED_FLASHIAP_BLOCK_DEVICE_H
kevman 2:7aab896b1a3b 18 #define MBED_FLASHIAP_BLOCK_DEVICE_H
kevman 2:7aab896b1a3b 19
kevman 2:7aab896b1a3b 20 #ifdef DEVICE_FLASH
kevman 2:7aab896b1a3b 21
kevman 2:7aab896b1a3b 22 #include "FlashIAP.h"
kevman 2:7aab896b1a3b 23 #include "BlockDevice.h"
kevman 2:7aab896b1a3b 24 #include "platform/mbed_toolchain.h"
kevman 2:7aab896b1a3b 25
kevman 2:7aab896b1a3b 26 /** BlockDevice using the FlashIAP API
kevman 2:7aab896b1a3b 27 *
kevman 2:7aab896b1a3b 28 */
kevman 2:7aab896b1a3b 29 class FlashIAPBlockDevice : public BlockDevice {
kevman 2:7aab896b1a3b 30 public:
kevman 2:7aab896b1a3b 31
kevman 2:7aab896b1a3b 32 /** Creates a FlashIAPBlockDevice
kevman 2:7aab896b1a3b 33 *
kevman 2:7aab896b1a3b 34 * @param address Physical address where the block device start
kevman 2:7aab896b1a3b 35 * @param size The block device size
kevman 2:7aab896b1a3b 36 */
kevman 2:7aab896b1a3b 37 FlashIAPBlockDevice(uint32_t address = MBED_CONF_FLASHIAP_BLOCK_DEVICE_BASE_ADDRESS,
kevman 2:7aab896b1a3b 38 uint32_t size = MBED_CONF_FLASHIAP_BLOCK_DEVICE_SIZE);
kevman 2:7aab896b1a3b 39
kevman 2:7aab896b1a3b 40 virtual ~FlashIAPBlockDevice();
kevman 2:7aab896b1a3b 41
kevman 2:7aab896b1a3b 42 /** Initialize a block device
kevman 2:7aab896b1a3b 43 *
kevman 2:7aab896b1a3b 44 * @return 0 on success or a negative error code on failure
kevman 2:7aab896b1a3b 45 */
kevman 2:7aab896b1a3b 46 virtual int init();
kevman 2:7aab896b1a3b 47
kevman 2:7aab896b1a3b 48 /** Deinitialize a block device
kevman 2:7aab896b1a3b 49 *
kevman 2:7aab896b1a3b 50 * @return 0 on success or a negative error code on failure
kevman 2:7aab896b1a3b 51 */
kevman 2:7aab896b1a3b 52 virtual int deinit();
kevman 2:7aab896b1a3b 53
kevman 2:7aab896b1a3b 54 /** Read blocks from a block device
kevman 2:7aab896b1a3b 55 *
kevman 2:7aab896b1a3b 56 * @param buffer Buffer to write blocks to
kevman 2:7aab896b1a3b 57 * @param addr Address of block to begin reading from
kevman 2:7aab896b1a3b 58 * @param size Size to read in bytes, must be a multiple of read block size
kevman 2:7aab896b1a3b 59 * @return 0 on success, negative error code on failure
kevman 2:7aab896b1a3b 60 */
kevman 2:7aab896b1a3b 61 virtual int read(void *buffer, bd_addr_t addr, bd_size_t size);
kevman 2:7aab896b1a3b 62
kevman 2:7aab896b1a3b 63 /** Program blocks to a block device
kevman 2:7aab896b1a3b 64 *
kevman 2:7aab896b1a3b 65 * The blocks must have been erased prior to being programmed
kevman 2:7aab896b1a3b 66 *
kevman 2:7aab896b1a3b 67 * @param buffer Buffer of data to write to blocks
kevman 2:7aab896b1a3b 68 * @param addr Address of block to begin writing to
kevman 2:7aab896b1a3b 69 * @param size Size to write in bytes, must be a multiple of program block size
kevman 2:7aab896b1a3b 70 * @return 0 on success, negative error code on failure
kevman 2:7aab896b1a3b 71 */
kevman 2:7aab896b1a3b 72 virtual int program(const void *buffer, bd_addr_t addr, bd_size_t size);
kevman 2:7aab896b1a3b 73
kevman 2:7aab896b1a3b 74 /** Erase blocks on a block device
kevman 2:7aab896b1a3b 75 *
kevman 2:7aab896b1a3b 76 * The state of an erased block is undefined until it has been programmed
kevman 2:7aab896b1a3b 77 *
kevman 2:7aab896b1a3b 78 * @param addr Address of block to begin erasing
kevman 2:7aab896b1a3b 79 * @param size Size to erase in bytes, must be a multiple of erase block size
kevman 2:7aab896b1a3b 80 * @return 0 on success, negative error code on failure
kevman 2:7aab896b1a3b 81 */
kevman 2:7aab896b1a3b 82 virtual int erase(bd_addr_t addr, bd_size_t size);
kevman 2:7aab896b1a3b 83
kevman 2:7aab896b1a3b 84 /** Get the size of a readable block
kevman 2:7aab896b1a3b 85 *
kevman 2:7aab896b1a3b 86 * @return Size of a readable block in bytes
kevman 2:7aab896b1a3b 87 */
kevman 2:7aab896b1a3b 88 virtual bd_size_t get_read_size() const;
kevman 2:7aab896b1a3b 89
kevman 2:7aab896b1a3b 90 /** Get the size of a programable block
kevman 2:7aab896b1a3b 91 *
kevman 2:7aab896b1a3b 92 * @return Size of a programable block in bytes
kevman 2:7aab896b1a3b 93 * @note Must be a multiple of the read size
kevman 2:7aab896b1a3b 94 */
kevman 2:7aab896b1a3b 95 virtual bd_size_t get_program_size() const;
kevman 2:7aab896b1a3b 96
kevman 2:7aab896b1a3b 97 /** Get the size of a eraseable block
kevman 2:7aab896b1a3b 98 *
kevman 2:7aab896b1a3b 99 * @return Size of a eraseable block in bytes
kevman 2:7aab896b1a3b 100 * @note Must be a multiple of the program size
kevman 2:7aab896b1a3b 101 */
kevman 2:7aab896b1a3b 102 virtual bd_size_t get_erase_size() const;
kevman 2:7aab896b1a3b 103
kevman 2:7aab896b1a3b 104 /** Get the size of an erasable block given address
kevman 2:7aab896b1a3b 105 *
kevman 2:7aab896b1a3b 106 * @param addr Address within the erasable block
kevman 2:7aab896b1a3b 107 * @return Size of an erasable block in bytes
kevman 2:7aab896b1a3b 108 * @note Must be a multiple of the program size
kevman 2:7aab896b1a3b 109 */
kevman 2:7aab896b1a3b 110 virtual bd_size_t get_erase_size(bd_addr_t addr) const;
kevman 2:7aab896b1a3b 111
kevman 2:7aab896b1a3b 112 /** Get the total size of the underlying device
kevman 2:7aab896b1a3b 113 *
kevman 2:7aab896b1a3b 114 * @return Size of the underlying device in bytes
kevman 2:7aab896b1a3b 115 */
kevman 2:7aab896b1a3b 116 virtual bd_size_t size() const;
kevman 2:7aab896b1a3b 117
kevman 2:7aab896b1a3b 118 private:
kevman 2:7aab896b1a3b 119 // Device configuration
kevman 2:7aab896b1a3b 120 mbed::FlashIAP _flash;
kevman 2:7aab896b1a3b 121 bd_addr_t _base;
kevman 2:7aab896b1a3b 122 bd_size_t _size;
kevman 2:7aab896b1a3b 123 bool _is_initialized;
kevman 2:7aab896b1a3b 124 uint32_t _init_ref_count;
kevman 2:7aab896b1a3b 125 };
kevman 2:7aab896b1a3b 126
kevman 2:7aab896b1a3b 127 #endif /* DEVICE_FLASH */
kevman 2:7aab896b1a3b 128 #endif /* MBED_FLASHIAP_BLOCK_DEVICE_H */