Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
MinimouseSrc/ApiFlash.cpp@0:2325d1d28df3, 2017-12-15 (annotated)
- Committer:
- fholin
- Date:
- Fri Dec 15 13:15:04 2017 +0000
- Revision:
- 0:2325d1d28df3
- Child:
- 1:eda561b01daf
Initial commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
fholin | 0:2325d1d28df3 | 1 | /* |
fholin | 0:2325d1d28df3 | 2 | __ __ _ _ |
fholin | 0:2325d1d28df3 | 3 | | \/ (_) (_) |
fholin | 0:2325d1d28df3 | 4 | | \ / |_ _ __ _ _ __ ___ ___ _ _ ___ ___ |
fholin | 0:2325d1d28df3 | 5 | | |\/| | | '_ \| | '_ ` _ \ / _ \| | | / __|/ _ \ |
fholin | 0:2325d1d28df3 | 6 | | | | | | | | | | | | | | | (_) | |_| \__ \ __/ |
fholin | 0:2325d1d28df3 | 7 | |_| |_|_|_| |_|_|_| |_| |_|\___/ \__,_|___/\___| |
fholin | 0:2325d1d28df3 | 8 | |
fholin | 0:2325d1d28df3 | 9 | |
fholin | 0:2325d1d28df3 | 10 | Description : Flash Api. |
fholin | 0:2325d1d28df3 | 11 | |
fholin | 0:2325d1d28df3 | 12 | |
fholin | 0:2325d1d28df3 | 13 | License : Revised BSD License, see LICENSE.TXT file include in the project |
fholin | 0:2325d1d28df3 | 14 | |
fholin | 0:2325d1d28df3 | 15 | Maintainer : Fabien Holin (SEMTECH) |
fholin | 0:2325d1d28df3 | 16 | */ |
fholin | 0:2325d1d28df3 | 17 | #include "ApiFlash.h" |
fholin | 0:2325d1d28df3 | 18 | Flash gFlash; |
fholin | 0:2325d1d28df3 | 19 | Flash::Flash(){ |
fholin | 0:2325d1d28df3 | 20 | // to be completed by mcu providers |
fholin | 0:2325d1d28df3 | 21 | } |
fholin | 0:2325d1d28df3 | 22 | Flash::~Flash(){ |
fholin | 0:2325d1d28df3 | 23 | // to be completed by mcu providers |
fholin | 0:2325d1d28df3 | 24 | } |
fholin | 0:2325d1d28df3 | 25 | |
fholin | 0:2325d1d28df3 | 26 | int Flash::init() { |
fholin | 0:2325d1d28df3 | 27 | // to be completed by mcu providers |
fholin | 0:2325d1d28df3 | 28 | return (0); |
fholin | 0:2325d1d28df3 | 29 | } |
fholin | 0:2325d1d28df3 | 30 | int Flash::read(uint8_t *buffer, uint32_t addr, uint32_t size){ |
fholin | 0:2325d1d28df3 | 31 | /* have to be implemented by mcu providers |
fholin | 0:2325d1d28df3 | 32 | the following code propose a lite implementation without any error cases*/ |
fholin | 0:2325d1d28df3 | 33 | int i; |
fholin | 0:2325d1d28df3 | 34 | for (i=0;i<size;i++){ |
fholin | 0:2325d1d28df3 | 35 | buffer[i]= *((uint8_t*)(addr)+i); |
fholin | 0:2325d1d28df3 | 36 | } |
fholin | 0:2325d1d28df3 | 37 | return 0; |
fholin | 0:2325d1d28df3 | 38 | } |
fholin | 0:2325d1d28df3 | 39 | |
fholin | 0:2325d1d28df3 | 40 | |
fholin | 0:2325d1d28df3 | 41 | |
fholin | 0:2325d1d28df3 | 42 | int Flash::program(const void *buffer, uint32_t addr, uint32_t size){ |
fholin | 0:2325d1d28df3 | 43 | /* have to be implemented by mcu providers |
fholin | 0:2325d1d28df3 | 44 | the following code propose a lite implementation without any error cases |
fholin | 0:2325d1d28df3 | 45 | this section have to be very robust, have to support failure mode such as power off during flash programmation |
fholin | 0:2325d1d28df3 | 46 | This basic implementation suppose that the addr is 4 Bytes aligned and suppose also that the size can be divide by 4. |
fholin | 0:2325d1d28df3 | 47 | */ |
fholin | 0:2325d1d28df3 | 48 | HAL_StatusTypeDef res = HAL_OK; |
fholin | 0:2325d1d28df3 | 49 | HAL_FLASH_Unlock(); |
fholin | 0:2325d1d28df3 | 50 | |
fholin | 0:2325d1d28df3 | 51 | for (; size >= 4; size -= 4, addr += 4) { |
fholin | 0:2325d1d28df3 | 52 | res = HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, addr, *(uint32_t const*)buffer); |
fholin | 0:2325d1d28df3 | 53 | buffer = (uint32_t const*)buffer + 1; |
fholin | 0:2325d1d28df3 | 54 | if (res != HAL_OK) |
fholin | 0:2325d1d28df3 | 55 | goto done; |
fholin | 0:2325d1d28df3 | 56 | } |
fholin | 0:2325d1d28df3 | 57 | |
fholin | 0:2325d1d28df3 | 58 | done: |
fholin | 0:2325d1d28df3 | 59 | HAL_FLASH_Lock(); |
fholin | 0:2325d1d28df3 | 60 | return res == HAL_OK ? 0 : -1; |
fholin | 0:2325d1d28df3 | 61 | } |
fholin | 0:2325d1d28df3 | 62 | |
fholin | 0:2325d1d28df3 | 63 | |
fholin | 0:2325d1d28df3 | 64 | int Flash::erase(uint32_t addr, uint32_t size){ |
fholin | 0:2325d1d28df3 | 65 | /* have to be implemented by mcu providers*/ |
fholin | 0:2325d1d28df3 | 66 | return 0; |
fholin | 0:2325d1d28df3 | 67 | } |
fholin | 0:2325d1d28df3 | 68 | |
fholin | 0:2325d1d28df3 | 69 | uint32_t Flash::get_flash_start(){ |
fholin | 0:2325d1d28df3 | 70 | /* have to be implemented by mcu providers*/ |
fholin | 0:2325d1d28df3 | 71 | return 0; |
fholin | 0:2325d1d28df3 | 72 | } |
fholin | 0:2325d1d28df3 | 73 | |
fholin | 0:2325d1d28df3 | 74 | uint32_t Flash:: get_flash_size(){ |
fholin | 0:2325d1d28df3 | 75 | /* have to be implemented by mcu providers*/ |
fholin | 0:2325d1d28df3 | 76 | return 0; |
fholin | 0:2325d1d28df3 | 77 | } |