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.
Fork of Pinscape_Controller by
FreescaleIAP.h@1:d913e0afb2ac, 2014-07-16 (annotated)
- Committer:
- mjr
- Date:
- Wed Jul 16 23:33:12 2014 +0000
- Revision:
- 1:d913e0afb2ac
Before removing time/frequency limit on reading the plunger sensor
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| mjr | 1:d913e0afb2ac | 1 | /* |
| mjr | 1:d913e0afb2ac | 2 | * Freescale FTFA Flash Memory programmer |
| mjr | 1:d913e0afb2ac | 3 | * |
| mjr | 1:d913e0afb2ac | 4 | * Sample usage: |
| mjr | 1:d913e0afb2ac | 5 | |
| mjr | 1:d913e0afb2ac | 6 | #include "mbed.h" |
| mjr | 1:d913e0afb2ac | 7 | #include "FreescaleIAP.h" |
| mjr | 1:d913e0afb2ac | 8 | |
| mjr | 1:d913e0afb2ac | 9 | int main() { |
| mjr | 1:d913e0afb2ac | 10 | int address = flash_size() - SECTOR_SIZE; //Write in last sector |
| mjr | 1:d913e0afb2ac | 11 | |
| mjr | 1:d913e0afb2ac | 12 | int *data = (int*)address; |
| mjr | 1:d913e0afb2ac | 13 | printf("Starting\r\n"); |
| mjr | 1:d913e0afb2ac | 14 | erase_sector(address); |
| mjr | 1:d913e0afb2ac | 15 | int numbers[10] = {0, 1, 10, 100, 1000, 10000, 1000000, 10000000, 100000000, 1000000000}; |
| mjr | 1:d913e0afb2ac | 16 | program_flash(address, (char*)&numbers, 40); //10 integers of 4 bytes each: 40 bytes length |
| mjr | 1:d913e0afb2ac | 17 | printf("Resulting flash: \r\n"); |
| mjr | 1:d913e0afb2ac | 18 | for (int i = 0; i<10; i++) |
| mjr | 1:d913e0afb2ac | 19 | printf("%d\r\n", data[i]); |
| mjr | 1:d913e0afb2ac | 20 | |
| mjr | 1:d913e0afb2ac | 21 | printf("Done\r\n\n"); |
| mjr | 1:d913e0afb2ac | 22 | |
| mjr | 1:d913e0afb2ac | 23 | |
| mjr | 1:d913e0afb2ac | 24 | while (true) { |
| mjr | 1:d913e0afb2ac | 25 | } |
| mjr | 1:d913e0afb2ac | 26 | } |
| mjr | 1:d913e0afb2ac | 27 | |
| mjr | 1:d913e0afb2ac | 28 | */ |
| mjr | 1:d913e0afb2ac | 29 | |
| mjr | 1:d913e0afb2ac | 30 | #ifndef FREESCALEIAP_H |
| mjr | 1:d913e0afb2ac | 31 | #define FREESCALEIAP_H |
| mjr | 1:d913e0afb2ac | 32 | |
| mjr | 1:d913e0afb2ac | 33 | #include "mbed.h" |
| mjr | 1:d913e0afb2ac | 34 | |
| mjr | 1:d913e0afb2ac | 35 | #ifdef TARGET_KLXX |
| mjr | 1:d913e0afb2ac | 36 | #define SECTOR_SIZE 1024 |
| mjr | 1:d913e0afb2ac | 37 | #elif TARGET_K20D5M |
| mjr | 1:d913e0afb2ac | 38 | #define SECTOR_SIZE 2048 |
| mjr | 1:d913e0afb2ac | 39 | #elif TARGET_K64F |
| mjr | 1:d913e0afb2ac | 40 | #define SECTOR_SIZE 4096 |
| mjr | 1:d913e0afb2ac | 41 | #else |
| mjr | 1:d913e0afb2ac | 42 | #define SECTOR_SIZE 1024 |
| mjr | 1:d913e0afb2ac | 43 | #endif |
| mjr | 1:d913e0afb2ac | 44 | |
| mjr | 1:d913e0afb2ac | 45 | enum IAPCode { |
| mjr | 1:d913e0afb2ac | 46 | BoundaryError = -99, //Commands may not span several sectors |
| mjr | 1:d913e0afb2ac | 47 | AlignError, //Data must be aligned on longword (two LSBs zero) |
| mjr | 1:d913e0afb2ac | 48 | ProtectionError, //Flash sector is protected |
| mjr | 1:d913e0afb2ac | 49 | AccessError, //Something went wrong |
| mjr | 1:d913e0afb2ac | 50 | CollisionError, //During writing something tried to flash which was written to |
| mjr | 1:d913e0afb2ac | 51 | LengthError, //The length must be multiples of 4 |
| mjr | 1:d913e0afb2ac | 52 | RuntimeError, |
| mjr | 1:d913e0afb2ac | 53 | EraseError, //The flash was not erased before writing to it |
| mjr | 1:d913e0afb2ac | 54 | Success = 0 |
| mjr | 1:d913e0afb2ac | 55 | }; |
| mjr | 1:d913e0afb2ac | 56 | |
| mjr | 1:d913e0afb2ac | 57 | /** Erase a flash sector |
| mjr | 1:d913e0afb2ac | 58 | * |
| mjr | 1:d913e0afb2ac | 59 | * The size erased depends on the used device |
| mjr | 1:d913e0afb2ac | 60 | * |
| mjr | 1:d913e0afb2ac | 61 | * @param address address in the sector which needs to be erased |
| mjr | 1:d913e0afb2ac | 62 | * @param return Success if no errors were encountered, otherwise one of the error states |
| mjr | 1:d913e0afb2ac | 63 | */ |
| mjr | 1:d913e0afb2ac | 64 | IAPCode erase_sector(int address); |
| mjr | 1:d913e0afb2ac | 65 | |
| mjr | 1:d913e0afb2ac | 66 | /** Program flash |
| mjr | 1:d913e0afb2ac | 67 | * |
| mjr | 1:d913e0afb2ac | 68 | * Before programming the used area needs to be erased. The erase state is checked |
| mjr | 1:d913e0afb2ac | 69 | * before programming, and will return an error if not erased. |
| mjr | 1:d913e0afb2ac | 70 | * |
| mjr | 1:d913e0afb2ac | 71 | * @param address starting address where the data needs to be programmed (must be longword alligned: two LSBs must be zero) |
| mjr | 1:d913e0afb2ac | 72 | * @param data pointer to array with the data to program |
| mjr | 1:d913e0afb2ac | 73 | * @param length number of bytes to program (must be a multiple of 4) |
| mjr | 1:d913e0afb2ac | 74 | * @param return Success if no errors were encountered, otherwise one of the error states |
| mjr | 1:d913e0afb2ac | 75 | */ |
| mjr | 1:d913e0afb2ac | 76 | IAPCode program_flash(int address, char *data, unsigned int length); |
| mjr | 1:d913e0afb2ac | 77 | |
| mjr | 1:d913e0afb2ac | 78 | /** |
| mjr | 1:d913e0afb2ac | 79 | * Returns size of flash memory |
| mjr | 1:d913e0afb2ac | 80 | * |
| mjr | 1:d913e0afb2ac | 81 | * This is the first address which is not flash |
| mjr | 1:d913e0afb2ac | 82 | * |
| mjr | 1:d913e0afb2ac | 83 | * @param return length of flash memory in bytes |
| mjr | 1:d913e0afb2ac | 84 | */ |
| mjr | 1:d913e0afb2ac | 85 | uint32_t flash_size(void); |
| mjr | 1:d913e0afb2ac | 86 | |
| mjr | 1:d913e0afb2ac | 87 | #endif |
