fholin fholin / Mbed 2 deprecated MiniMousetest

Dependencies:   mbed

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?

UserRevisionLine numberNew 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 }