annotate Discovery/Src/externLogbookFlash.c @ 423:a560afdaadbf ImprovmentNVM_2

ext_Flash_write_sample erase sector optimization: The previous function erased a sector while writing sample data causing a delay of up to 200ms. The new implementation checks at the end of a write sample call if we are close to a sector end. In case we are a erase sector command will be send to the flash for the next sector. At the time of the next sample write (2 seconds later) the next sector is already erased and no busy wait of 200ms is needed => max write time for samples is not less than 5ms.
author ideenmodellierer
date Mon, 10 Feb 2020 19:40:33 +0100
parents 3f7d80f37bfc
children 86fcac4cc43a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1 /**
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2 ******************************************************************************
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
3 * @copyright heinrichs weikamp
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
4 * @file externLogbookFlash.c
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
5 * @author heinrichs weikamp gmbh
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
6 * @date 07-Aug-2014
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
7 * @version V0.0.4
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
8 * @since 29-Sept-2015
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
9 * @brief Main File to access the new 1.8 Volt Spansion S25FS256S 256 Mbit (32 Mbyte)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
10 * @bug
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
11 * @warning
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
12 *
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
13 @verbatim
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
14 ==============================================================================
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
15 ##### Logbook Header (TOC) #####
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
16 ==============================================================================
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
17 [..] Memory useage:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
18 NEW: Spansion S25FS-S256S
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
19
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
20 only 8x 4KB and 1x 32KB, remaining is 64KB or 256KB
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
21 Sector Size (kbyte) Sector Count Sector Range Address Range (Byte Address) Notes
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
22 4 8 SA00 00000000h-00000FFFh
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
23 : :
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
24 SA07 00007000h-00007FFFh
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
25
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
26 32 1 SA08 00008000h-0000FFFFh
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
27
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
28 64 511 SA09 00010000h-0001FFFFh
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
29 : :
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
30 SA519 01FF0000h-01FFFFFFh
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
31 OLD:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
32 1kB each header
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
33 with predive header at beginning
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
34 and postdive header with 0x400 HEADER2OFFSET
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
35 4kB (one erase) has two dives with 4 headers total
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
36 total of 512 kB (with 256 header ids (8 bit))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
37 Size is 280 Byte (as of 25.Nov. 2014)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
39 [..] Output to PC / UART is postdive header
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
40
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
41 [..] Block Protection Lock-Down is to erase logbook only
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
42
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
43 [..] Timing (see page 137 of LOGBOOK_V3_S25FS-S_00-271247.pdf
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
44 bulk erase is 2 minutes typ., 6 minutes max.
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
45
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
46 ==============================================================================
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
47 ##### DEMOMODE #####
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
48 ==============================================================================
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
49 151215: ext_flash_write_settings() is DISABLED!
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
50
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
51 ==============================================================================
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
52 ##### bug fixes #####
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
53 ==============================================================================
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
54 150917: end in header and length of sample was one byte too long
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
55 as stated by Jef Driesen email 15.09.2015
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
56
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
57 @endverbatim
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
58 ******************************************************************************
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
59 * @attention
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
60 *
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
61 * <h2><center>&copy; COPYRIGHT(c) 2015 heinrichs weikamp</center></h2>
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
62 *
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
63 ******************************************************************************
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
64 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
65
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
66 /* Includes ------------------------------------------------------------------*/
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
67 #include "stm32f4xx_hal.h"
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
68 #include "externLogbookFlash.h"
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
69 #include "ostc.h"
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
70 #include "settings.h"
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
71 #include "gfx_engine.h"
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
72
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
73 #ifndef BOOTLOADER_STANDALONE
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
74 #include "logbook.h"
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
75 #endif
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
76
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
77 /* Private types -------------------------------------------------------------*/
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
78 #define FLASHSTART 0x000000
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
79 //#define FLASHSTOP 0x01FFFFFF all 32 MB with 4byte addressing
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
80 #define FLASHSTOP 0x00FFFFFF
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
81 //#define FLASHSTOP 0x3FFFFF
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
82 #define RELEASE 1
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
83 #define HOLDCS 0
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
84
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
85 #define HEADER2OFFSET 0x400
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
86
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
87 typedef enum{
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
88 EF_HEADER,
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
89 EF_SAMPLE,
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
90 EF_DEVICEDATA,
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
91 EF_VPMDATA,
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
92 EF_SETTINGS,
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
93 EF_FIRMWARE,
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
94 EF_FIRMWARE2,
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
95 }which_ring_enum;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
96
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
97
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
98 typedef struct{
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
99 uint8_t IsBusy:1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
100 uint8_t IsWriteEnabled:1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
101 uint8_t BlockProtect0:1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
102 uint8_t BlockProtect1:1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
103 uint8_t BlockProtect2:1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
104 uint8_t BlockProtect3:1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
105 uint8_t IsAutoAddressIncMode:1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
106 uint8_t BlockProtectL:1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
107 } extFlashStatusUbit8_t;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
108
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
109 typedef union{
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
110 extFlashStatusUbit8_t ub;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
111 uint8_t uw;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
112 } extFlashStatusBit8_Type;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
113
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
114
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
115 /* Exported variables --------------------------------------------------------*/
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
116
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
117 /* Private variables ---------------------------------------------------------*/
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
118 static uint32_t actualAddress = 0;
423
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
119 static uint32_t preparedPageAddress = 0;
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
120 static uint32_t entryPoint = 0;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
121
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
122 static uint32_t actualPointerHeader = 0;
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
123 static uint32_t actualPointerSample = 0;
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
124 static uint32_t LengthLeftSampleRead = 0;
421
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
125 static uint32_t actualPointerDevicedata = DDSTART;
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
126 static uint32_t actualPointerDevicedata_Read = DDSTART;
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
127 static uint32_t actualPointerVPM = 0;
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
128 static uint32_t actualPointerSettings = 0;
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
129 static uint32_t actualPointerFirmware = 0;
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
130 static uint32_t actualPointerFirmware2 = 0;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
131
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
132 /* Private function prototypes -----------------------------------------------*/
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
133 static void chip_unselect(void);
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
134 static void chip_select(void);
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
135 static void error_led_on(void);
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
136 static void error_led_off(void);
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
137
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
138 static void write_spi(uint8_t data, uint8_t unselect_CS_afterwards);
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
139 static uint8_t read_spi(uint8_t unselect_CS_afterwards);
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
140 static void write_address(uint8_t unselect_CS_afterwards);
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
141 static void Error_Handler_extflash(void);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
142 static void wait_chip_not_busy(void);
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
143 static void ext_flash_incf_address(uint8_t type);
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
144 //void ext_flash_incf_address_ring(void);
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
145 static void ext_flash_decf_address_ring(uint8_t type);
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
146
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
147 static void ext_flash_erase4kB(void);
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
148 static void ext_flash_erase32kB(void);
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
149 static void ext_flash_erase64kB(void);
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
150 static uint8_t ext_flash_erase_if_on_page_start(void);
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
151
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
152 static void ef_write_block(uint8_t * sendByte, uint32_t length, uint8_t type, uint8_t do_not_erase);
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
153
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
154 static void ext_flash_read_block(uint8_t *getByte, uint8_t type);
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
155 static void ext_flash_read_block_multi(void *getByte, uint32_t size, uint8_t type);
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
156 static void ext_flash_read_block_stop(void);
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
157
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
158 static void ef_hw_rough_delay_us(uint32_t delayUs);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
159 static void ef_erase_64K(uint32_t blocks);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
160
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
161 static void ext_flash_overwrite_sample_without_erase(uint8_t *pSample, uint16_t length);
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
162
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
163 static void ext_flash_disable_protection(void);
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
164
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
165 static _Bool ext_flash_test_remaining_space_of_page_empty(uint32_t pointer, uint16_t length);
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
166 static void ext_flash_set_to_begin_of_next_page(uint32_t *pointer, uint8_t type);
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
167 static void ext_flash_find_start(void);
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
168
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
169
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
170 /* Exported functions --------------------------------------------------------*/
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
171
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
172 void ext_flash_write_firmware(uint8_t *pSample1, uint32_t length1)//, uint8_t *pSample2, uint32_t length2)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
173 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
174 general32to8_Type lengthTransform;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
175
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
176 lengthTransform.u32 = length1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
177
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
178 actualPointerFirmware = FWSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
179 ef_write_block(lengthTransform.u8,4, EF_FIRMWARE, 1);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
180 ef_write_block(pSample1,length1, EF_FIRMWARE, 1);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
181
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
182 // if(length2)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
183 // ef_write_block(pSample2,length2, EF_FIRMWARE, 1);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
184 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
185
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
186 uint8_t ext_flash_read_firmware_version(char *text)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
187 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
188 uint32_t backup = actualAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
189 uint8_t buffer[4];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
190
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
191 // + 4 for length data, see ext_flash_write_firmware
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
192 actualAddress = FWSTART + 4 + 0x10000;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
193 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
194 ext_flash_read_block(&buffer[0], EF_FIRMWARE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
195 ext_flash_read_block(&buffer[1], EF_FIRMWARE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
196 ext_flash_read_block(&buffer[2], EF_FIRMWARE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
197 ext_flash_read_block(&buffer[3], EF_FIRMWARE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
198
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
199 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
200 actualAddress = backup;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
201
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
202 uint8_t ptr = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
203 text[ptr++] = 'V';
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
204 ptr += gfx_number_to_string(2,0,&text[ptr],buffer[0] & 0x3F);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
205 text[ptr++] = '.';
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
206 ptr += gfx_number_to_string(2,0,&text[ptr],buffer[1] & 0x3F);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
207 text[ptr++] = '.';
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
208 ptr += gfx_number_to_string(2,0,&text[ptr],buffer[2] & 0x3F);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
209 text[ptr++] = ' ';
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
210 if(buffer[3])
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
211 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
212 text[ptr++] = 'b';
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
213 text[ptr++] = 'e';
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
214 text[ptr++] = 't';
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
215 text[ptr++] = 'a';
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
216 text[ptr++] = ' ';
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
217 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
218 return ptr;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
219 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
220
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
221
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
222 uint32_t ext_flash_read_firmware(uint8_t *pSample1, uint32_t max_length, uint8_t *magicByte)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
223 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
224 uint32_t backup = actualAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
225 general32to8_Type lengthTransform;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
226
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
227 actualAddress = FWSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
228 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
229
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
230 ext_flash_read_block(&lengthTransform.u8[0], EF_FIRMWARE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
231 ext_flash_read_block(&lengthTransform.u8[1], EF_FIRMWARE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
232 ext_flash_read_block(&lengthTransform.u8[2], EF_FIRMWARE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
233 ext_flash_read_block(&lengthTransform.u8[3], EF_FIRMWARE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
234
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
235
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
236 if(lengthTransform.u32 == 0xFFFFFFFF)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
237 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
238 lengthTransform.u32 = 0xFFFFFFFF;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
239 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
240 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
241 if(lengthTransform.u32 > max_length)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
242 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
243 lengthTransform.u32 = 0xFF000000;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
244 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
245 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
246 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
247 for(uint32_t i = 0; i<lengthTransform.u32; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
248 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
249 ext_flash_read_block(&pSample1[i], EF_FIRMWARE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
250 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
251
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
252 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
253
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
254 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
255
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
256 if(magicByte)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
257 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
258 *magicByte = pSample1[0x10000 + 0x3E]; // 0x3E == 62
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
259 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
260
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
261 actualAddress = backup;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
262 return lengthTransform.u32;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
263 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
264
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
265
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
266 void ext_flash_write_firmware2(uint32_t offset, uint8_t *pSample1, uint32_t length1, uint8_t *pSample2, uint32_t length2)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
267 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
268 general32to8_Type lengthTransform, offsetTransform;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
269
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
270 lengthTransform.u32 = length1 + length2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
271 offsetTransform.u32 = offset;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
272
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
273 actualPointerFirmware2 = FWSTART2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
274 ef_write_block(lengthTransform.u8,4, EF_FIRMWARE2, 1);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
275 ef_write_block(offsetTransform.u8,4, EF_FIRMWARE2, 1);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
276 ef_write_block(pSample1,length1, EF_FIRMWARE2, 1);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
277 if(length2)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
278 ef_write_block(pSample2,length2, EF_FIRMWARE2, 1);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
279 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
280
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
281
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
282 uint32_t ext_flash_read_firmware2(uint32_t *offset, uint8_t *pSample1, uint32_t max_length1, uint8_t *pSample2, uint32_t max_length2)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
283 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
284 uint32_t backup = actualAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
285 uint32_t length1, length2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
286 general32to8_Type lengthTransform, offsetTransform;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
287
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
288 actualAddress = FWSTART2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
289 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
290
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
291 ext_flash_read_block(&lengthTransform.u8[0], EF_FIRMWARE2);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
292 ext_flash_read_block(&lengthTransform.u8[1], EF_FIRMWARE2);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
293 ext_flash_read_block(&lengthTransform.u8[2], EF_FIRMWARE2);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
294 ext_flash_read_block(&lengthTransform.u8[3], EF_FIRMWARE2);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
295
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
296 ext_flash_read_block(&offsetTransform.u8[0], EF_FIRMWARE2);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
297 ext_flash_read_block(&offsetTransform.u8[1], EF_FIRMWARE2);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
298 ext_flash_read_block(&offsetTransform.u8[2], EF_FIRMWARE2);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
299 ext_flash_read_block(&offsetTransform.u8[3], EF_FIRMWARE2);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
300
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
301 *offset = offsetTransform.u32;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
302
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
303 if(lengthTransform.u32 == 0xFFFFFFFF)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
304 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
305 lengthTransform.u32 = 0xFFFFFFFF;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
306 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
307 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
308 if(lengthTransform.u32 > max_length1 + max_length2)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
309 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
310 lengthTransform.u32 = 0xFF000000;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
311 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
312 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
313 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
314 if(lengthTransform.u32 < max_length1)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
315 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
316 length1 = lengthTransform.u32;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
317 length2 = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
318 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
319 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
320 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
321 length1 = max_length1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
322 length2 = lengthTransform.u32 - max_length1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
323 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
324
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
325 if(pSample1)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
326 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
327 for(uint32_t i = 0; i<length1; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
328 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
329 ext_flash_read_block(&pSample1[i], EF_FIRMWARE2);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
330 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
331 if(pSample2)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
332 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
333 for(uint32_t i = 0; i<length2; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
334 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
335 ext_flash_read_block(&pSample2[i], EF_FIRMWARE2);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
336 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
337 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
338 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
339 else if(pSample2)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
340 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
341 actualAddress += length1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
342 for(uint32_t i = 0; i<length2; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
343 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
344 ext_flash_read_block(&pSample2[i], EF_FIRMWARE2);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
345 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
346 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
347 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
348 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
349 actualAddress = backup;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
350 return lengthTransform.u32;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
351 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
352
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
353
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
354 void ext_flash_read_fixed_16_devicedata_blocks_formated_128byte_total(uint8_t *buffer)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
355 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
356 SDeviceLine data[16];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
357 uint8_t tempLengthIngnore;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
358 uint16_t count;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
359 uint8_t transfer;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
360
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
361 RTC_DateTypeDef Sdate;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
362 RTC_TimeTypeDef Stime;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
363
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
364 actualAddress = DDSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
365
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
366 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
367 ext_flash_read_block(&tempLengthIngnore, EF_DEVICEDATA);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
368 ext_flash_read_block(&tempLengthIngnore, EF_DEVICEDATA);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
369
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
370 ext_flash_read_block_multi((uint8_t *)data,16*3*4, EF_DEVICEDATA);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
371 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
372
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
373 count = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
374 for(int i=0;i<16;i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
375 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
376 transfer = (data[i].value_int32 >> 24) & 0xFF;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
377 buffer[count++] = transfer;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
378 transfer = (data[i].value_int32 >> 16) & 0xFF;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
379 buffer[count++] = transfer;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
380 transfer = (data[i].value_int32 >> 8) & 0xFF;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
381 buffer[count++] = transfer;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
382 transfer = (data[i].value_int32) & 0xFF;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
383 buffer[count++] = transfer;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
384
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
385 translateDate(data[i].date_rtc_dr, &Sdate);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
386 translateTime(data[i].time_rtc_tr, &Stime);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
387 buffer[count++] = Sdate.Year;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
388 buffer[count++] = Sdate.Month;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
389 buffer[count++] = Sdate.Date;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
390 buffer[count++] = Stime.Hours;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
391 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
392 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
393
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
394
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
395 #ifndef BOOTLOADER_STANDALONE
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
396
421
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
397 void ext_flash_write_devicedata(uint8_t resetRing)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
398 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
399 uint8_t *pData;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
400 const uint16_t length = sizeof(SDevice);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
401 uint8_t length_lo, length_hi;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
402 uint8_t dataLength[2] = { 0 };
421
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
403 uint32_t tmpBlockStart;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
404
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
405 ext_flash_disable_protection();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
406
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
407 pData = (uint8_t *)stateDeviceGetPointer();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
408
421
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
409 /* Reset the Ring to the start address if requested (e.g. because we write the default block during shutdown) */
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
410 if((resetRing) || ((actualPointerDevicedata + length) >= DDSTOP))
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
411 {
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
412 actualPointerDevicedata = DDSTART;
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
413 }
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
414 tmpBlockStart = actualPointerDevicedata;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
415
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
416 length_lo = (uint8_t)(length & 0xFF);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
417 length_hi = (uint8_t)(length >> 8);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
418 dataLength[0] = length_lo;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
419 dataLength[1] = length_hi;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
420
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
421 ef_write_block(dataLength,2, EF_DEVICEDATA, 0);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
422 ef_write_block(pData,length, EF_DEVICEDATA, 0);
421
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
423
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
424 actualPointerDevicedata_Read = tmpBlockStart;
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
425
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
426 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
427
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
428
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
429 uint16_t ext_flash_read_devicedata(uint8_t *buffer, uint16_t max_length)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
430 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
431 uint16_t length;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
432 uint8_t length_lo, length_hi;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
433
421
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
434 actualAddress = actualPointerDevicedata_Read;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
435
421
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
436 length = 0;
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
437 length_lo = 0;
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
438 length_hi = 0;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
439 ext_flash_read_block_start();
421
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
440
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
441
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
442 ext_flash_read_block(&length_lo, EF_DEVICEDATA);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
443 ext_flash_read_block(&length_hi, EF_DEVICEDATA);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
444
421
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
445 while ((length_lo != 0xFF) && (length_hi != 0xFF))
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
446 {
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
447 length = (length_hi * 256) + length_lo;
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
448
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
449 if(length > max_length)
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
450 return 0;
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
451
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
452 ext_flash_read_block_multi(buffer,length,EF_DEVICEDATA);
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
453
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
454 ext_flash_read_block(&length_lo, EF_DEVICEDATA); /* check if another devicedata set is available */
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
455 ext_flash_read_block(&length_hi, EF_DEVICEDATA); /* length will be 0xFFFF if a empty memory is read */
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
456 }
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
457 ext_flash_decf_address_ring(EF_DEVICEDATA); /* set pointer back to empty address */
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
458 ext_flash_decf_address_ring(EF_DEVICEDATA);
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
459 ext_flash_read_block_stop();
421
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
460
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
461 if(actualAddress > actualPointerDevicedata) /* the write pointer has not yet been set up probably */
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
462 {
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
463 actualPointerDevicedata = actualAddress;
3f7d80f37bfc Enable sequentionel writing of device data:
ideenmodellierer
parents: 420
diff changeset
464 }
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
465 return length;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
466 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
467
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
468
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
469 void ext_flash_write_vpm(SVpm *vpmInput)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
470 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
471 uint8_t *pData;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
472 const uint16_t length = sizeof(SVpm);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
473
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
474 uint8_t length_lo, length_hi;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
475 uint8_t dataLength[2] = { 0 };
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
476
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
477 pData = (uint8_t *)vpmInput;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
478
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
479 actualPointerVPM = VPMSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
480
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
481 length_lo = (uint8_t)(length & 0xFF);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
482 length_hi = (uint8_t)(length >> 8);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
483 dataLength[0] = length_lo;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
484 dataLength[1] = length_hi;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
485
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
486 ef_write_block(dataLength,2, EF_VPMDATA, 0);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
487 ef_write_block(pData,length, EF_VPMDATA, 0);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
488 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
489
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
490
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
491 int ext_flash_read_vpm(SVpm *vpmOutput)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
492 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
493 uint8_t *pData;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
494 const uint16_t length = sizeof(SVpm);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
495 uint8_t length_lo, length_hi;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
496 int output;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
497
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
498 actualAddress = VPMSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
499
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
500 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
501 ext_flash_read_block(&length_lo, EF_VPMDATA);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
502 ext_flash_read_block(&length_hi, EF_VPMDATA);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
503 if((length_lo == (uint8_t)(length & 0xFF))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
504 &&(length_hi == (uint8_t)(length >> 8)))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
505 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
506 pData = (uint8_t *)vpmOutput;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
507 for(uint16_t i = 0; i < length; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
508 ext_flash_read_block(&pData[i], EF_VPMDATA);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
509 output = length;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
510 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
511 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
512 output = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
513
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
514 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
515 return output;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
516 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
517
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
518 #ifdef DEMOMODE
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
519 void ext_flash_write_settings(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
520 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
521 return;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
522 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
523 #else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
524 void ext_flash_write_settings(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
525 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
526 uint8_t *pData;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
527 const uint16_t length = sizeof(SSettings);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
528 uint8_t length_lo, length_hi;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
529 uint8_t dataLength[2] = { 0 };
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
530
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
531 ext_flash_disable_protection();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
532
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
533 if(stateRealGetPointer()->lastKnownBatteryPercentage)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
534 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
535 settingsGetPointer()->lastKnownBatteryPercentage = stateRealGetPointer()->lastKnownBatteryPercentage;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
536 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
537 settingsGetPointer()->backup_localtime_rtc_tr = stateRealGetPointer()->lifeData.timeBinaryFormat;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
538 settingsGetPointer()->backup_localtime_rtc_dr = stateRealGetPointer()->lifeData.dateBinaryFormat;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
539
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
540 pData = (uint8_t *)settingsGetPointer();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
541
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
542 actualPointerSettings = SETTINGSSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
543
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
544 length_lo = (uint8_t)(length & 0xFF);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
545 length_hi = (uint8_t)(length >> 8);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
546 dataLength[0] = length_lo;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
547 dataLength[1] = length_hi;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
548
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
549 ef_write_block(dataLength,2, EF_SETTINGS, 0);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
550 ef_write_block(pData,length, EF_SETTINGS, 0);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
551 // ext_flash_enable_protection();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
552 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
553 #endif
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
554
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
555
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
556 /* CHANGES 150929 hw
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
557 * this now allows to read old settings too
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
558 * but make sure that everything is fixed in
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
559 * set_new_settings_missing_in_ext_flash
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
560 * new settings should be fine as they are added
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
561 * and loaded before calling this function
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
562 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
563 uint8_t ext_flash_read_settings(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
564 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
565 uint8_t returnValue = HAL_BUSY;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
566 uint8_t *pData;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
567 const uint16_t lengthStandardNow = sizeof(SSettings);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
568 uint8_t length_lo, length_hi;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
569 uint16_t lengthOnEEPROM;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
570 uint32_t header;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
571 SSettings *pSettings = settingsGetPointer();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
572
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
573 actualAddress = SETTINGSSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
574
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
575 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
576 ext_flash_read_block(&length_lo, EF_SETTINGS);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
577 ext_flash_read_block(&length_hi, EF_SETTINGS);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
578
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
579 lengthOnEEPROM = length_hi * 256;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
580 lengthOnEEPROM += length_lo;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
581 if(lengthOnEEPROM <= lengthStandardNow)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
582 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
583 ext_flash_read_block_multi(&header, 4, EF_SETTINGS);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
584 if((header <= pSettings->header) && (header >= pSettings->updateSettingsAllowedFromHeader))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
585 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
586 returnValue = HAL_OK;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
587 pSettings->header = header;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
588 pData = (uint8_t *)pSettings + 4; /* header */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
589 for(uint16_t i = 0; i < (lengthOnEEPROM-4); i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
590 ext_flash_read_block(&pData[i], EF_SETTINGS);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
591 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
592 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
593 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
594 returnValue = HAL_ERROR;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
595 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
596 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
597 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
598 return returnValue;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
599 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
600
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
601
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
602
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
603
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
604 /* ext_flash_start_new_dive_log_and_set_actualPointerSample
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
605 * prepares the write sample pointer
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
606 * to be used by ext_flash_write_sample()
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
607 * to be set in the * pHeaderPreDive
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
608 * for write with ext_flash_create_new_dive_log() and ext_flash_close_new_dive_log()
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
609 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
610 void ext_flash_start_new_dive_log_and_set_actualPointerSample(uint8_t *pHeaderPreDive)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
611 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
612 convert_Type data;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
613 SSettings *settings = settingsGetPointer();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
614
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
615 /* new 5. Jan. 2015 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
616 actualPointerSample = settings->logFlashNextSampleStartAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
617
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
618 if(!ext_flash_test_remaining_space_of_page_empty(actualPointerSample, 4))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
619 ext_flash_set_to_begin_of_next_page(&actualPointerSample, EF_SAMPLE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
620
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
621 if((actualPointerSample < SAMPLESTART) || (actualPointerSample > SAMPLESTOP))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
622 actualPointerSample = SAMPLESTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
623
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
624 data.u32bit = actualPointerSample;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
625 pHeaderPreDive[2] = data.u8bit.byteLow;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
626 pHeaderPreDive[3] = data.u8bit.byteMidLow;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
627 pHeaderPreDive[4] = data.u8bit.byteMidHigh;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
628 /* to start sample writing and header etc. pp. */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
629 ext_flash_disable_protection_for_logbook();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
630 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
631
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
632
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
633 /* ext_flash_create_new_dive_log
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
634 * uses the first header without HEADER2OFFSET
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
635 * for the header it is not important to be complete
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
636 * and can be reconstructed
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
637 * ext_flash_start_new_dive_log_and_set_actualPointerSample()
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
638 * has to be called before to set the actualPointerSample
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
639 * in the header
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
640 * the following func writes to header to the ext_flash
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
641 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
642 void ext_flash_create_new_dive_log(uint8_t *pHeaderPreDive)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
643 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
644 SSettings *settings;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
645 uint8_t id, id_next;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
646 uint8_t header1, header2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
647
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
648 settings = settingsGetPointer();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
649 id = settings->lastDiveLogId;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
650
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
651 actualAddress = HEADERSTART + (0x800 * id);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
652 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
653 ext_flash_read_block(&header1, EF_SAMPLE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
654 ext_flash_read_block(&header2, EF_SAMPLE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
655 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
656
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
657 if((header1 == 0xFA) && (header2 == 0xFA))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
658 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
659 id += 1; /* 0-255, auto rollover */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
660 if(id & 1)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
661 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
662 actualAddress = HEADERSTART + (0x800 * id);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
663 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
664 ext_flash_read_block(&header1, EF_SAMPLE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
665 ext_flash_read_block(&header2, EF_SAMPLE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
666 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
667 if((header1 == 0xFA) && (header2 == 0xFA))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
668 id += 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
669 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
670 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
671 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
672 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
673 id = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
674 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
675
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
676 /* delete next header */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
677 id_next = id + 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
678 actualPointerHeader = HEADERSTART + (0x800 * id_next);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
679 ef_write_block(0,0, EF_HEADER, 0);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
680
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
681 settings->lastDiveLogId = id;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
682 actualPointerHeader = HEADERSTART + (0x800 * id);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
683
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
684 if(pHeaderPreDive != 0)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
685 ef_write_block(pHeaderPreDive,HEADERSIZE, EF_HEADER, 0);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
686 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
687
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
688
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
689 void ext_flash_close_new_dive_log(uint8_t *pHeaderPostDive )
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
690 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
691 SSettings * settings = settingsGetPointer();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
692 uint8_t id;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
693 convert_Type startAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
694 convert_Type data;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
695 uint32_t backup;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
696
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
697 uint8_t sampleData[3];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
698 actualAddress = actualPointerSample;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
699 sampleData[0] = 0xFD;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
700 sampleData[1] = 0xFD;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
701 ext_flash_write_sample(sampleData, 2);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
702
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
703 /* end of sample data, pointing to the last sample 0xFD
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
704 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
705 actualAddress = actualPointerSample; // change hw 17.09.2015
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
706 ext_flash_decf_address_ring(EF_SAMPLE); // 17.09.2015: this decf actualAddress only!!
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
707 actualPointerSample = actualAddress; // change hw 17.09.2015
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
708 data.u32bit = actualPointerSample;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
709
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
710 pHeaderPostDive[5] = data.u8bit.byteLow;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
711 pHeaderPostDive[6] = data.u8bit.byteMidLow;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
712 pHeaderPostDive[7] = data.u8bit.byteMidHigh;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
713
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
714 /* take data written before, calculate length and write
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
715 SLogbookHeader has different order: length (byte# 8,9,10) prior to profile version (byte# 11)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
716 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
717 startAddress.u8bit.byteLow = pHeaderPostDive[2];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
718 startAddress.u8bit.byteMidLow = pHeaderPostDive[3];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
719 startAddress.u8bit.byteMidHigh = pHeaderPostDive[4];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
720 startAddress.u8bit.byteHigh = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
721
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
722 if(startAddress.u32bit < actualPointerSample)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
723 data.u32bit = 1 + actualPointerSample - startAddress.u32bit;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
724 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
725 data.u32bit = 2 + (actualPointerSample - SAMPLESTART) + (SAMPLESTOP - startAddress.u32bit);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
726
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
727 pHeaderPostDive[8] = data.u8bit.byteLow;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
728 pHeaderPostDive[9] = data.u8bit.byteMidLow;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
729 pHeaderPostDive[10] = data.u8bit.byteMidHigh;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
730
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
731 /* set id and write post-dive-header
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
732 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
733 id = settings->lastDiveLogId;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
734 actualPointerHeader = HEADERSTART + (0x800 * id) + HEADER2OFFSET;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
735
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
736 ef_write_block(pHeaderPostDive,HEADERSIZE, EF_HEADER, 0);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
737
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
738 /* write length at beginning of sample
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
739 and write proper beginning for next dive to actualPointerSample
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
740 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
741 backup = actualPointerSample;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
742 actualPointerSample = startAddress.u32bit; // is still 0xFF
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
743 sampleData[0] = data.u8bit.byteLow;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
744 sampleData[1] = data.u8bit.byteMidLow;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
745 sampleData[2] = data.u8bit.byteMidHigh;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
746 ext_flash_overwrite_sample_without_erase(sampleData, 3);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
747
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
748 actualAddress = backup;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
749 ext_flash_incf_address(EF_SAMPLE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
750 actualPointerSample = actualAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
751 ext_flash_enable_protection();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
752 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
753
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
754
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
755 void ext_flash_write_sample(uint8_t *pSample, uint16_t length)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
756 {
423
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
757 uint32_t actualAdressBackup = 0;
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
758
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
759 ef_write_block(pSample,length, EF_SAMPLE, 0);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
760
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
761 SSettings *settings = settingsGetPointer();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
762 settings->logFlashNextSampleStartAddress = actualPointerSample;
423
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
763
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
764 if(0xFFFF - (actualAddress & 0x0000FFFF) < 255) /* are we close to a sector border? */
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
765 {
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
766 if (((actualAddress & 0x0000FFFF) != 0) && (preparedPageAddress == 0)) /* only prepare if not already at start of sector */
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
767 {
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
768 actualAdressBackup = actualAddress;
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
769 actualAddress = (actualAddress & 0xFFFF0000) + 0x00010000; /* Set to start of next 64k sector */
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
770 if(actualAddress >= SAMPLESTOP)
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
771 {
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
772 actualAddress = SAMPLESTART;
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
773 }
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
774 preparedPageAddress = actualAddress;
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
775 ext_flash_erase64kB();
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
776 actualAddress = actualAdressBackup;
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
777 }
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
778 }
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
779 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
780
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
781 static void ext_flash_overwrite_sample_without_erase(uint8_t *pSample, uint16_t length)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
782 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
783 ef_write_block(pSample,length, EF_SAMPLE, 1);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
784 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
785
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
786
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
787 uint8_t ext_flash_count_dive_headers(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
788 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
789 uint8_t id = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
790 uint8_t counter = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
791 uint16_t headerStartData = 0x0000;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
792
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
793 id = settingsGetPointer()->lastDiveLogId;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
794
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
795 do
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
796 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
797 actualAddress = HEADERSTART + (0x800 * id) + HEADER2OFFSET;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
798 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
799 ext_flash_read_block_multi((uint8_t *)&headerStartData, 2, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
800 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
801 counter++;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
802 id -=1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
803 } while((headerStartData == 0xFAFA) && (counter < 255));
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
804 return (counter - 1);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
805 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
806
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
807
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
808 void ext_flash_read_dive_header(uint8_t *pHeaderToFill, uint8_t StepBackwards)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
809 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
810 SSettings *settings;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
811 uint8_t id;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
812 uint16_t i;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
813
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
814 settings = settingsGetPointer();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
815 id = settings->lastDiveLogId;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
816 id -= StepBackwards; /* 0-255, auto rollover */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
817
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
818 actualAddress = HEADERSTART + (0x800 * id) + HEADER2OFFSET;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
819 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
820 for(i = 0; i < HEADERSIZE; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
821 ext_flash_read_block(&pHeaderToFill[i], EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
822 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
823
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
824 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
825
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
826 void ext_flash_read_dive_header2(uint8_t *pHeaderToFill, uint8_t id, _Bool bOffset)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
827 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
828
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
829 uint16_t i;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
830 actualAddress = HEADERSTART + (0x800 * id) ;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
831
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
832 if(bOffset)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
833 actualAddress += HEADER2OFFSET;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
834 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
835 for(i = 0; i < HEADERSIZE; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
836 ext_flash_read_block(&pHeaderToFill[i], EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
837 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
838 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
839
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
840
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
841 uint32_t ext_flash_read_dive_raw_with_double_header_1K(uint8_t *data, uint32_t max_size, uint8_t StepBackwards)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
842 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
843 if(max_size < 0x800)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
844 return 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
845
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
846 uint8_t id;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
847 convert_Type dataStart, dataEnd;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
848 uint32_t LengthAll = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
849
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
850 id = settingsGetPointer()->lastDiveLogId;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
851 id -= StepBackwards; /* 0-255, auto rollover */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
852
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
853 // clear data
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
854 for(int i=0;i<0x800;i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
855 data[i] = 0xFF;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
856
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
857 // copy primary/pre-dive
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
858 actualAddress = HEADERSTART + (0x800 * id);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
859 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
860 for(int i = 0; i < HEADERSIZE; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
861 ext_flash_read_block(&data[i], EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
862 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
863
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
864 // copy main/secondary/post-dive
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
865 actualAddress = HEADERSTART + (0x800 * id) + HEADER2OFFSET;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
866 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
867 for(int i = 0x400; i < HEADERSIZE+0x400; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
868 ext_flash_read_block(&data[i], EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
869 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
870
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
871 // data
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
872
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
873 dataStart.u8bit.byteHigh = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
874 dataStart.u8bit.byteLow = data[0x402];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
875 dataStart.u8bit.byteMidLow = data[0x403];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
876 dataStart.u8bit.byteMidHigh = data[0x404];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
877
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
878 dataEnd.u8bit.byteHigh = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
879 dataEnd.u8bit.byteLow = data[0x405];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
880 dataEnd.u8bit.byteMidLow = data[0x406];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
881 dataEnd.u8bit.byteMidHigh = data[0x407];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
882
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
883 actualPointerSample = dataStart.u32bit;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
884 if(dataEnd.u32bit >= dataStart.u32bit)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
885 LengthAll = 1 + dataEnd.u32bit - dataStart.u32bit;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
886 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
887 LengthAll = 2 + (dataStart.u32bit - SAMPLESTART) + (SAMPLESTOP - dataEnd.u32bit);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
888
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
889 LengthAll += 0x800;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
890
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
891 if(LengthAll > max_size)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
892 return 0x800;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
893
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
894 actualAddress = actualPointerSample;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
895 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
896 for(uint32_t i = 0x800; i < LengthAll; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
897 ext_flash_read_block(&data[i], EF_SAMPLE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
898 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
899 return LengthAll;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
900 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
901
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
902 void ext_flash_write_dive_raw_with_double_header_1K(uint8_t *data, uint32_t length)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
903 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
904 convert_Type dataStart, dataEnd;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
905 SLogbookHeader headerTemp;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
906
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
907 // set actualPointerSample and get pointer to sample storage and disable flash write protect
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
908 ext_flash_start_new_dive_log_and_set_actualPointerSample((uint8_t *)&headerTemp);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
909
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
910 dataStart.u8bit.byteHigh = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
911 dataStart.u8bit.byteLow = headerTemp.pBeginProfileData[0];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
912 dataStart.u8bit.byteMidLow = headerTemp.pBeginProfileData[1];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
913 dataStart.u8bit.byteMidHigh = headerTemp.pBeginProfileData[2];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
914
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
915 dataEnd.u32bit = dataStart.u32bit + length - 0x801;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
916 if(dataEnd.u32bit > SAMPLESTOP)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
917 dataEnd.u32bit -= SAMPLESTOP + SAMPLESTART - 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
918
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
919 data[0x002] = data[0x402] = dataStart.u8bit.byteLow;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
920 data[0x003] = data[0x403] = dataStart.u8bit.byteMidLow;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
921 data[0x004] = data[0x404] = dataStart.u8bit.byteMidHigh;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
922 data[0x005] = data[0x405] = dataEnd.u8bit.byteLow;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
923 data[0x006] = data[0x406] = dataEnd.u8bit.byteMidLow;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
924 data[0x007] = data[0x407] = dataEnd.u8bit.byteMidHigh;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
925
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
926 // set actualPointerHeader to next free header and update lastDiveLogId
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
927 ext_flash_create_new_dive_log(0);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
928
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
929 // copy header data
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
930 ef_write_block(data,0x800,EF_HEADER, 1);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
931
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
932 // copy sample data
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
933 ef_write_block(&data[0x800], length-0x800, EF_SAMPLE, 1);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
934
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
935 // update logFlashNextSampleStartAddress
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
936 settingsGetPointer()->logFlashNextSampleStartAddress = actualPointerSample;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
937 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
938
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
939
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
940 // ===============================================================================
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
941 // ext_flash_read_header_memory
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
942 /// @brief This function returns the entire header space 1:1
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
943 /// @date 04-April-2016
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
944 ///
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
945 /// @param *data 256KB output
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
946 // ===============================================================================
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
947 void ext_flash_read_header_memory(uint8_t *data)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
948 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
949 actualAddress = HEADERSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
950 actualPointerHeader = actualAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
951 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
952 for(int i=0;i<8;i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
953 ext_flash_read_block_multi(&data[0x8000 * i], 0x8000, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
954 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
955 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
956
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
957
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
958 // ===============================================================================
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
959 // ext_flash_read_header_memory
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
960 /// @brief This function erases and overwrites the entire logbook header block
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
961 /// @date 04-April-2016
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
962 ///
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
963 /// @param *data 256KB input of header memory 1:1
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
964 // ===============================================================================
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
965 void ext_flash_write_header_memory(uint8_t *data)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
966 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
967 actualAddress = HEADERSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
968 actualPointerHeader = actualAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
969 ef_write_block(data, 0x40000, EF_HEADER, 0);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
970 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
971
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
972
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
973 void ext_flash_open_read_sample(uint8_t StepBackwards, uint32_t *totalNumberOfBytes)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
974 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
975 SSettings *settings = settingsGetPointer();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
976 uint8_t id;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
977 convert_Type dataStart, dataEnd;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
978 uint8_t header1, header2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
979
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
980 id = settings->lastDiveLogId;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
981 id -= StepBackwards; /* 0-255, auto rollover */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
982 #
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
983 actualAddress = HEADERSTART + (0x800 * id) + HEADER2OFFSET;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
984 actualPointerHeader = actualAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
985
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
986 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
987 /* little endian */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
988 ext_flash_read_block(&header1, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
989 ext_flash_read_block(&header2, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
990 dataStart.u8bit.byteHigh = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
991 ext_flash_read_block(&dataStart.u8bit.byteLow, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
992 ext_flash_read_block(&dataStart.u8bit.byteMidLow, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
993 ext_flash_read_block(&dataStart.u8bit.byteMidHigh, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
994 dataEnd.u8bit.byteHigh = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
995 ext_flash_read_block(&dataEnd.u8bit.byteLow, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
996 ext_flash_read_block(&dataEnd.u8bit.byteMidLow, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
997 ext_flash_read_block(&dataEnd.u8bit.byteMidHigh, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
998 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
999
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1000 actualPointerSample = dataStart.u32bit;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1001 if(dataEnd.u32bit >= dataStart.u32bit)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1002 LengthLeftSampleRead = 1 + dataEnd.u32bit - dataStart.u32bit;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1003 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1004 LengthLeftSampleRead = 2 + (dataStart.u32bit - SAMPLESTART) + (SAMPLESTOP - dataEnd.u32bit);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1005 *totalNumberOfBytes = LengthLeftSampleRead;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1006
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1007 actualAddress = actualPointerSample;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1008 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1009 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1010
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1011
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1012 void ext_flash_read_next_sample_part(uint8_t *pSample, uint8_t length)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1013 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1014 for(uint16_t i = 0; i < length; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1015 ext_flash_read_block(&pSample[i], EF_SAMPLE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1016 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1017
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1018
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1019 void ext_flash_close_read_sample(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1020 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1021 actualPointerSample = actualAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1022 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1023 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1024
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1025
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1026 void ext_flash_set_entry_point(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1027 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1028 entryPoint = actualAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1029 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1030
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1031
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1032 void ext_flash_reopen_read_sample_at_entry_point(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1033 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1034 error_led_on();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1035 chip_unselect();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1036 wait_chip_not_busy();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1037
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1038 actualAddress = entryPoint;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1039 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1040 error_led_off();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1041 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1042
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1043 /*
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1044 uint8_t ext_flash_point_to_64k_block_in_headerSpace(uint8_t logId)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1045 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1046 uint32_t pointerToData = logId * 0x800;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1047
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1048 return pointerToData / 0x10000;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1049 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1050 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1051
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1052
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1053 // ===============================================================================
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1054 // ext_flash_repair_dive_numbers_starting_count_helper
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1055 /// @brief
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1056 /// @date 22-June-2016
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1057
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1058 // ===============================================================================
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1059 static uint16_t ext_flash_repair_dive_numbers_starting_count_helper(uint8_t *data, uint8_t *change64k, uint16_t startNumber, uint8_t lastLogId)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1060 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1061 const uint32_t headerStep = 0x800;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1062 uint8_t actualLogId = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1063 uint16_t oldNumber = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1064 uint16_t actualNumber = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1065 SLogbookHeader *ptrLogbookHeader = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1066
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1067 if(startNumber == 0)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1068 return 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1069
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1070 actualNumber = startNumber - 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1071
282
c7e665e0b08f translate some comments into english
heinrichsweikamp
parents: 268
diff changeset
1072 // where is the oldest dive (Which is now getting startNumber)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1073 // use first header for ease (without HEADER2OFFSET for end of dive header)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1074 // compare for lastLogId to prevent endless loop
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1075
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1076 if(*(uint16_t*)&data[lastLogId * headerStep] != 0xFAFA)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1077 return 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1078
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1079 actualLogId = lastLogId - 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1080 while((*(uint16_t*)&data[actualLogId * headerStep] == 0xFAFA) && (actualLogId != lastLogId))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1081 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1082 actualLogId--;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1083 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1084
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1085 // now pointing to one behind the last
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1086 while(actualLogId != lastLogId)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1087 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1088 actualLogId++;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1089 actualNumber++;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1090 ptrLogbookHeader = (SLogbookHeader *)&data[actualLogId * headerStep];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1091
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1092 oldNumber = ptrLogbookHeader->diveNumber;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1093 if(oldNumber != actualNumber)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1094 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1095 // change64k[ext_flash_point_to_64k_block_in_headerSpace(actualLogId )] = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1096 change64k[(actualLogId * 0x800)/0x10000] = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1097 ptrLogbookHeader->diveNumber = actualNumber;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1098 ptrLogbookHeader = (SLogbookHeader *)(&data[actualLogId * headerStep] + HEADER2OFFSET);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1099 ptrLogbookHeader->diveNumber = actualNumber;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1100 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1101 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1102
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1103 return actualNumber;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1104 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1105
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1106 // ===============================================================================
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1107 // ext_flash_repair_SPECIAL_dive_numbers_starting_count_with
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1108 /// @brief This function
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1109 /// @date 04-April-2016
282
c7e665e0b08f translate some comments into english
heinrichsweikamp
parents: 268
diff changeset
1110 /// problem (160621): 64K blocks (32 dives) in the new flash memory chip
c7e665e0b08f translate some comments into english
heinrichsweikamp
parents: 268
diff changeset
1111 /// This block needs to be deleted
c7e665e0b08f translate some comments into english
heinrichsweikamp
parents: 268
diff changeset
1112 /// these where only 4KB block before
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1113 /// @output endCount, last diveNumber
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1114
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1115 // ===============================================================================
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1116 uint16_t ext_flash_repair_SPECIAL_dive_numbers_starting_count_with(uint16_t startCount)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1117 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1118 uint32_t logCopyDataPtr = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1119 uint8_t *data;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1120 uint16_t lastCount;
282
c7e665e0b08f translate some comments into english
heinrichsweikamp
parents: 268
diff changeset
1121 uint8_t listOfChanged64kBlocks[8]; // 32 dives each 64K
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1122
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1123 logCopyDataPtr = getFrame(97);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1124 data = (uint8_t *)logCopyDataPtr;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1125
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1126 for(int i=0;i<8;i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1127 listOfChanged64kBlocks[i] = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1128
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1129 actualAddress = HEADERSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1130 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1131 ext_flash_read_block_multi(data,0x100000,EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1132 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1133
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1134 lastCount = ext_flash_repair_dive_numbers_starting_count_helper(data, listOfChanged64kBlocks, startCount, settingsGetPointer()->lastDiveLogId);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1135
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1136 for(int i=0;i<8;i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1137 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1138 if(listOfChanged64kBlocks[i] != 0)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1139 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1140 actualPointerHeader = HEADERSTART + (i * 0x10000);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1141 ef_write_block(&data[i * 0x10000], 0x10000, EF_HEADER, 0);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1142 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1143 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1144
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1145 releaseFrame(97,logCopyDataPtr);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1146 if(settingsGetPointer()->totalDiveCounter < lastCount)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1147 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1148 settingsGetPointer()->totalDiveCounter = lastCount;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1149 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1150 return lastCount;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1151 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1152
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1153 /*
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1154 void OLD_ext_flash_repair_SPECIAL_dive_numbers_starting_count_with(uint16_t startCount)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1155 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1156 uint16_t counterStorage[256];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1157 uint8_t start = 0xFF;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1158 uint32_t logCopyDataPtr = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1159 uint8_t *data;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1160 uint8_t startAbsolute = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1161 int16_t count = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1162 _Bool repair = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1163 uint8_t startBackup = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1164
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1165 SLogbookHeader tempLogbookHeader;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1166 SLogbookHeader *ptrHeaderInData1a;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1167 SLogbookHeader *ptrHeaderInData1b;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1168 SLogbookHeader *ptrHeaderInData2a;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1169 SLogbookHeader *ptrHeaderInData2b;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1170
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1171 logCopyDataPtr = getFrame(97);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1172 data = (uint8_t *)logCopyDataPtr;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1173 ptrHeaderInData1a = (SLogbookHeader *)logCopyDataPtr;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1174 ptrHeaderInData1b = (SLogbookHeader *)(logCopyDataPtr + HEADER2OFFSET);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1175 ptrHeaderInData2a = (SLogbookHeader *)(logCopyDataPtr + 0x800);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1176 ptrHeaderInData2b = (SLogbookHeader *)(logCopyDataPtr + 0x800 + HEADER2OFFSET);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1177
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1178 // get data
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1179 for(int StepBackwards = 0; StepBackwards < 255; StepBackwards++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1180 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1181 logbook_getHeader(StepBackwards, &tempLogbookHeader);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1182 counterStorage[StepBackwards+1] = tempLogbookHeader.diveNumber;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1183 if(tempLogbookHeader.diveHeaderStart == 0xFAFA)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1184 start = StepBackwards;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1185 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1186 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1187 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1188
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1189 if(start == 0xFF)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1190 return;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1191
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1192 count = start + 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1193 startAbsolute = settingsGetPointer()->lastDiveLogId;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1194
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1195
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1196
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1197 if(start%2)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1198 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1199 if(counterStorage[start] != startCount)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1200 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1201 // clear data
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1202 for(int i=0;i<0x800*2;i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1203 data[i] = 0xFF;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1204
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1205 uint8_t id = settingsGetPointer()->lastDiveLogId;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1206 id -= start; // 0-255, auto rollover
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1207
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1208 // copy primary/pre-dive
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1209 actualAddress = HEADERSTART + (0x800 * id);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1210 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1211 for(int i = 0; i < HEADERSIZE; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1212 ext_flash_read_block(&data[i], EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1213 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1214
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1215 // copy main/secondary/post-dive
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1216 actualAddress = HEADERSTART + (0x800 * id) + HEADER2OFFSET;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1217 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1218 for(int i = 0x400; i < HEADERSIZE+0x400; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1219 ext_flash_read_block(&data[i], EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1220 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1221
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1222 // repair
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1223 ptrHeaderInData2a->diveNumber = startCount;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1224 ptrHeaderInData2b->diveNumber = startCount;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1225 startCount++;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1226
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1227 // write
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1228 actualAddress = HEADERSTART + (0x800 * (id-1));
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1229 ef_write_block(data,0x800*2,EF_HEADER, 0);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1230 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1231 start--;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1232 }
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1233
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1234 // for(int count = start; count > -1; count -= 2)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1235
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1236 while(count > 0)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1237 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1238 // clear data
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1239 for(int i=0;i<0x1000;i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1240 data[i] = 0xFF;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1241
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1242 repair = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1243
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1244 startBackup = startAbsolute;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1245
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1246 if(startAbsolute%2) // 0x800 to 0x1000
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1247 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1248 // copy second pre-dive
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1249 actualAddress = HEADERSTART + (0x800 * startAbsolute);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1250 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1251 for(int i = 0x800; i < HEADERSIZE+0x800; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1252 ext_flash_read_block(&data[i], EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1253 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1254
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1255 // copy second post-dive
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1256 actualAddress = HEADERSTART + HEADER2OFFSET + (0x800 * startAbsolute);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1257 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1258 for(int i = 0xC00; i < HEADERSIZE+0xC00; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1259 ext_flash_read_block(&data[i], EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1260 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1261
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1262 if(counterStorage[count] != startCount)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1263 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1264 ptrHeaderInData2a->diveNumber = startCount;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1265 ptrHeaderInData2b->diveNumber = startCount;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1266 repair = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1267 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1268 startCount += 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1269
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1270 startAbsolute -= 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1271 count -= 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1272
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1273 if(count > 0)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1274 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1275 // copy first pre-dive
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1276 actualAddress = HEADERSTART + (0x800 * startAbsolute);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1277 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1278 for(int i = 0; i < HEADERSIZE; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1279 ext_flash_read_block(&data[i], EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1280 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1281
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1282 // copy first post-dive
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1283 actualAddress = HEADERSTART + (0x800 * startAbsolute);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1284 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1285 for(int i = 0x400; i < HEADERSIZE+0x400; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1286 ext_flash_read_block(&data[i], EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1287 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1288
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1289 if(counterStorage[count] != startCount)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1290 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1291 ptrHeaderInData1a->diveNumber = startCount;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1292 ptrHeaderInData1b->diveNumber = startCount;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1293 repair = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1294 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1295 startCount += 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1296
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1297 startAbsolute -= 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1298 count -= 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1299 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1300 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1301 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1302 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1303 // copy first pre-dive
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1304 actualAddress = HEADERSTART + (0x800 * startAbsolute);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1305 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1306 for(int i = 0; i < HEADERSIZE; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1307 ext_flash_read_block(&data[i], EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1308 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1309
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1310 // copy first post-dive
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1311 actualAddress = HEADERSTART + (0x800 * startAbsolute);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1312 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1313 for(int i = 0x400; i < HEADERSIZE+0x400; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1314 ext_flash_read_block(&data[i], EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1315 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1316
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1317 if(counterStorage[count] != startCount)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1318 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1319 ptrHeaderInData1a->diveNumber = startCount;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1320 ptrHeaderInData1b->diveNumber = startCount;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1321 repair = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1322 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1323 startCount += 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1324
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1325 startAbsolute -= 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1326 count -= 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1327 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1328
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1329 // write
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1330 if(repair)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1331 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1332 actualPointerHeader = HEADERSTART + (0x1000 * startBackup%2);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1333 ef_write_block(data,0x1000,EF_HEADER, 0);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1334 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1335 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1336 releaseFrame(97,logCopyDataPtr);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1337 settingsGetPointer()->totalDiveCounter = startCount;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1338 }
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1339 */
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1340
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1341 // ===============================================================================
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1342 // ext_flash_repair_dive_log
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1343 /// @brief This function
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1344 /// does set
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1345 /// logFlashNextSampleStartAddress
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1346 /// and
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1347 /// lastDiveLogId
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1348 ///
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1349 void ext_flash_repair_dive_log(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1350 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1351 uint8_t header1, header2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1352 convert_Type dataStart;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1353
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1354 for(int id = 0; id < 255;id++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1355 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1356 actualAddress = HEADERSTART + (0x800 * id);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1357 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1358 ext_flash_read_block(&header1, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1359 ext_flash_read_block(&header2, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1360 dataStart.u8bit.byteHigh = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1361 ext_flash_read_block(&dataStart.u8bit.byteLow, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1362 ext_flash_read_block(&dataStart.u8bit.byteMidLow, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1363 ext_flash_read_block(&dataStart.u8bit.byteMidHigh, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1364 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1365 if((header1 == 0xFA) && (header2 == 0xFA))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1366 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1367 actualAddress = HEADERSTART + (0x800 * id) + HEADER2OFFSET;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1368 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1369 ext_flash_read_block(&header1, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1370 ext_flash_read_block(&header2, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1371 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1372 if((header1 != 0xFA) || (header2 != 0xFA))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1373 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1374 actualPointerSample = dataStart.u32bit;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1375 actualAddress = actualPointerSample;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1376 logbook_recover_brokenlog(id);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1377 SSettings *settings = settingsGetPointer();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1378 settings->logFlashNextSampleStartAddress = actualPointerSample;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1379 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1380 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1381 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1382 ext_flash_find_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1383 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1384
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1385
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1386 static void ext_flash_find_start(void)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1387 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1388 uint8_t id;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1389 uint8_t header1, header2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1390 convert_Type dataStart, dataEnd;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1391
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1392 for(id = 0; id < 255;id++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1393 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1394 actualAddress = HEADERSTART + (0x800 * id) + HEADER2OFFSET;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1395 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1396 ext_flash_read_block(&header1, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1397 ext_flash_read_block(&header2, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1398 dataStart.u8bit.byteHigh = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1399 ext_flash_read_block(&dataStart.u8bit.byteLow, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1400 ext_flash_read_block(&dataStart.u8bit.byteMidLow, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1401 ext_flash_read_block(&dataStart.u8bit.byteMidHigh, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1402 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1403 if((header1 == 0xFF) && (header2 == 0xFF))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1404 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1405 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1406 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1407 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1408 id--;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1409 SSettings *settings = settingsGetPointer();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1410 settings->lastDiveLogId = id;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1411
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1412 actualAddress = HEADERSTART + (0x800 * id) + HEADER2OFFSET;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1413 actualPointerHeader = actualAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1414
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1415 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1416
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1417 ext_flash_read_block(&header1, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1418 ext_flash_read_block(&header2, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1419 dataStart.u8bit.byteHigh = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1420 ext_flash_read_block(&dataStart.u8bit.byteLow, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1421 ext_flash_read_block(&dataStart.u8bit.byteMidLow, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1422 ext_flash_read_block(&dataStart.u8bit.byteMidHigh, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1423 dataEnd.u8bit.byteHigh = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1424 ext_flash_read_block(&dataEnd.u8bit.byteLow, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1425 ext_flash_read_block(&dataEnd.u8bit.byteMidLow, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1426 ext_flash_read_block(&dataEnd.u8bit.byteMidHigh, EF_HEADER);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1427 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1428
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1429 //Find free space
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1430 if((header1 == 0xFA) && (header2 == 0xFA))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1431 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1432 uint8_t uiRead = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1433 int countFF = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1434 //End of last complete dive
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1435 actualPointerSample = dataEnd.u32bit ;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1436 actualAddress = actualPointerSample;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1437 //Check if there are samples of dives with less than half a minute
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1438 while(true)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1439 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1440 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1441 ext_flash_read_block(&uiRead, EF_SAMPLE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1442 if(uiRead == 0xFF)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1443 countFF++;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1444 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1445 countFF = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1446
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1447
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1448
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1449 if(countFF == 10)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1450 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1451 actualAddress -= 10;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1452 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1453 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1454
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1455 //New page: clear
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1456 if(ext_flash_erase_if_on_page_start())
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1457 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1458 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1459 // Set new start address
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1460 actualPointerSample = actualAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1461 settings->logFlashNextSampleStartAddress = actualPointerSample;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1462 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1463 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1464 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1465 settings->logFlashNextSampleStartAddress = SAMPLESTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1466 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1467 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1468
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1469
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1470 #endif
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1471
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1472 static void ext_flash_disable_protection(void)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1473 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1474 /*
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1475 extFlashStatusBit8_Type status;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1476
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1477 status.uw = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1478
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1479 wait_chip_not_busy();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1480 write_spi(0x50,RELEASE); // EWSR
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1481 write_spi(0x01,HOLDCS); // WRSR
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1482 write_spi(status.uw,RELEASE); // new status
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1483 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1484 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1485
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1486
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1487 void ext_flash_disable_protection_for_logbook(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1488 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1489 /*
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1490 extFlashStatusBit8_Type status;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1491
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1492 status.uw = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1493 status.ub.BlockProtect0 = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1494 status.ub.BlockProtect1 = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1495 status.ub.BlockProtect2 = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1496 status.ub.BlockProtect3 = 0; // not set in OSTC3. Why?
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1497
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1498 wait_chip_not_busy();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1499 write_spi(0x50,RELEASE); // EWSR
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1500 write_spi(0x01,HOLDCS); // WRSR
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1501 write_spi(status.uw,RELEASE); // new status
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1502 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1503 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1504
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1505
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1506 void ext_flash_enable_protection(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1507 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1508 /*
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1509 extFlashStatusBit8_Type status;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1510
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1511 status.uw = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1512 status.ub.BlockProtect0 = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1513 status.ub.BlockProtect1 = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1514 status.ub.BlockProtect2 = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1515 status.ub.BlockProtect3 = 1; // not set in OSTC3. Why?
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1516
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1517 wait_chip_not_busy();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1518 write_spi(0x50,RELEASE); // EWSR
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1519 write_spi(0x01,HOLDCS); // WRSR
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1520 write_spi(status.uw,RELEASE); // new status
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1521 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1522 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1523
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1524
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1525 /*void ext_flash_erase_chip(void)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1526 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1527 wait_chip_not_busy();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1528 write_spi(0x06,RELEASE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1529 write_spi(0x60,RELEASE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1530 wait_chip_not_busy();
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1531 }*/
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1532
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1533 void ext_flash_erase_firmware(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1534 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1535 uint32_t size, blocks_64k;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1536
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1537 actualAddress = FWSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1538 size = 1 + FWSTOP - FWSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1539 blocks_64k = size / 0x10000;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1540 ef_erase_64K(blocks_64k);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1541 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1542
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1543 void ext_flash_erase_firmware2(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1544 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1545 uint32_t size, blocks_64k;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1546
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1547 actualAddress = FWSTART2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1548 size = 1 + FWSTOP2 - FWSTART2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1549 blocks_64k = size / 0x10000;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1550 ef_erase_64K(blocks_64k);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1551 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1552
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1553
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1554
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1555 void ext_flash_erase_logbook(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1556 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1557 uint32_t size, blocks_64k;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1558
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1559 ext_flash_disable_protection_for_logbook();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1560
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1561 actualAddress = SAMPLESTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1562 size = 1 + SAMPLESTOP - SAMPLESTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1563 blocks_64k = size / 0x10000;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1564 ef_erase_64K(blocks_64k);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1565
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1566 actualAddress = HEADERSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1567 size = 1 + HEADERSTOP - HEADERSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1568 blocks_64k = size / 0x10000;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1569 ef_erase_64K(blocks_64k);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1570
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1571 ext_flash_enable_protection();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1572 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1573
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1574
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1575 static void ext_flash_erase4kB(void)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1576 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1577 wait_chip_not_busy();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1578 write_spi(0x06,RELEASE);/* WREN */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1579 write_spi(0x20,HOLDCS);/* sector erase cmd */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1580 write_address(RELEASE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1581 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1582
282
c7e665e0b08f translate some comments into english
heinrichsweikamp
parents: 268
diff changeset
1583 /* be careful - might not work with entire family and other products
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1584 * see page 14 of LOGBOOK_V3_S25FS-S_00-271247.pdf
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1585 */
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1586 static void ext_flash_erase32kB(void)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1587 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1588 uint32_t actualAddress_backup;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1589
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1590 actualAddress_backup = actualAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1591 actualAddress = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1592 wait_chip_not_busy();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1593 write_spi(0x06,RELEASE);/* WREN */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1594 write_spi(0xD8,HOLDCS);/* sector erase cmd */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1595 write_address(RELEASE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1596 actualAddress = actualAddress_backup;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1597 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1598
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1599
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1600 static void ext_flash_erase64kB(void)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1601 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1602 wait_chip_not_busy();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1603 write_spi(0x06,RELEASE);/* WREN */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1604 write_spi(0xD8,HOLDCS);/* sector erase cmd */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1605 write_address(RELEASE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1606 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1607
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1608
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1609 void ext_flash_read_block_start(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1610 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1611 wait_chip_not_busy();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1612 write_spi(0x03,HOLDCS); /* WREN */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1613 write_address(HOLDCS);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1614 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1615
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1616 /* 4KB, 32KB, 64 KB, not the upper 16 MB with 4 Byte address at the moment */
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1617 static uint8_t ext_flash_erase_if_on_page_start(void)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1618 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1619 if(actualAddress < 0x00008000)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1620 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1621 /* 4K Byte is 0x1000 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1622 if((actualAddress & 0xFFF) == 0)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1623 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1624 ext_flash_erase4kB();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1625 return 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1626 }
423
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
1627 }
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1628 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1629 if(actualAddress < 0x00010000)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1630 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1631 /* 32K Byte is only one page */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1632 if(actualAddress == 0x00010000)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1633 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1634 ext_flash_erase32kB();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1635 return 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1636 }
423
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
1637 }
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1638 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1639 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1640 /* 64K Byte is 0x10000 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1641 if((actualAddress & 0xFFFF) == 0)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1642 {
423
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
1643 if(preparedPageAddress == actualAddress) /* has page already been prepared before? (at the moment for samples only) */
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
1644 {
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
1645 preparedPageAddress = 0;
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
1646
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
1647 }
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
1648 else
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
1649 {
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
1650 ext_flash_erase64kB();
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
1651 }
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1652 return 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1653 }
423
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
1654 }
a560afdaadbf ext_Flash_write_sample erase sector optimization:
ideenmodellierer
parents: 421
diff changeset
1655
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1656 return 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1657 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1658
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1659
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1660 static void ext_flash_read_block(uint8_t *getByte, uint8_t type)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1661 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1662 *getByte = read_spi(HOLDCS);/* read data */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1663 ext_flash_incf_address(type);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1664 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1665
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1666
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1667 static void ext_flash_read_block_multi(void *getByte, uint32_t size, uint8_t type)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1668 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1669 uint8_t *data;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1670 data = getByte;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1671
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1672 for(uint32_t i=0;i<size;i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1673 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1674 data[i] = read_spi(HOLDCS);/* read data */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1675 ext_flash_incf_address(type);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1676 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1677 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1678
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1679
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1680 static void ext_flash_read_block_stop(void)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1681 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1682 chip_unselect();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1683 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1684
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1685
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1686 /* Private functions ---------------------------------------------------------*/
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1687
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1688 static void ef_write_block(uint8_t * sendByte, uint32_t length, uint8_t type, uint8_t do_not_erase)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1689 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1690 uint32_t remaining_page_size, remaining_length, remaining_space_to_ring_end;
420
2174fb133dbe Optimize ef_write_block function:
ideenmodellierer
parents: 282
diff changeset
1691 uint32_t i=0;
2174fb133dbe Optimize ef_write_block function:
ideenmodellierer
parents: 282
diff changeset
1692
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1693 if(!length)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1694 return;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1695
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1696 uint32_t ringStart, ringStop;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1697
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1698 switch(type)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1699 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1700 case EF_HEADER:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1701 actualAddress = actualPointerHeader;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1702 ringStart = HEADERSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1703 ringStop = HEADERSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1704 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1705 case EF_SAMPLE:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1706 actualAddress = actualPointerSample;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1707 ringStart = SAMPLESTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1708 ringStop = SAMPLESTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1709 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1710 case EF_DEVICEDATA:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1711 actualAddress = actualPointerDevicedata;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1712 ringStart = DDSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1713 ringStop = DDSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1714 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1715 case EF_VPMDATA:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1716 actualAddress = actualPointerVPM;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1717 ringStart = VPMSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1718 ringStop = VPMSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1719 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1720 case EF_SETTINGS:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1721 actualAddress = actualPointerSettings;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1722 ringStart = SETTINGSSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1723 ringStop = SETTINGSSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1724 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1725 case EF_FIRMWARE:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1726 actualAddress = actualPointerFirmware;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1727 ringStart = FWSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1728 ringStop = FWSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1729 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1730 case EF_FIRMWARE2:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1731 actualAddress = actualPointerFirmware2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1732 ringStart = FWSTART2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1733 ringStop = FWSTOP2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1734 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1735 default:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1736 ringStart = FLASHSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1737 ringStop = FLASHSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1738 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1739 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1740 /* safety */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1741 if(actualAddress < ringStart)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1742 actualAddress = ringStart;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1743
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1744 if(do_not_erase == 0)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1745 ext_flash_erase_if_on_page_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1746
420
2174fb133dbe Optimize ef_write_block function:
ideenmodellierer
parents: 282
diff changeset
1747 while( i<length)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1748 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1749 ef_hw_rough_delay_us(5);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1750 wait_chip_not_busy();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1751 write_spi(0x06,RELEASE); /* WREN */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1752 write_spi(0x02,HOLDCS); /* write cmd */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1753 write_address(HOLDCS);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1754
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1755 remaining_length = length - i;
420
2174fb133dbe Optimize ef_write_block function:
ideenmodellierer
parents: 282
diff changeset
1756 remaining_page_size = 0xFF - (uint8_t)(actualAddress & 0xFF) +1;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1757 remaining_space_to_ring_end = ringStop - actualAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1758
420
2174fb133dbe Optimize ef_write_block function:
ideenmodellierer
parents: 282
diff changeset
1759 if(remaining_length >= 256)
2174fb133dbe Optimize ef_write_block function:
ideenmodellierer
parents: 282
diff changeset
1760 {
2174fb133dbe Optimize ef_write_block function:
ideenmodellierer
parents: 282
diff changeset
1761 remaining_length = 255; /* up to 256 bytes may be written in one burst. Last byte is written with release */
2174fb133dbe Optimize ef_write_block function:
ideenmodellierer
parents: 282
diff changeset
1762 }
2174fb133dbe Optimize ef_write_block function:
ideenmodellierer
parents: 282
diff changeset
1763 else
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1764 {
420
2174fb133dbe Optimize ef_write_block function:
ideenmodellierer
parents: 282
diff changeset
1765 remaining_length--; /* last byte needed for release */
2174fb133dbe Optimize ef_write_block function:
ideenmodellierer
parents: 282
diff changeset
1766 }
2174fb133dbe Optimize ef_write_block function:
ideenmodellierer
parents: 282
diff changeset
1767 if(remaining_length >= (remaining_page_size) ) /* use 256 byte page and calculate number of bytes left */
2174fb133dbe Optimize ef_write_block function:
ideenmodellierer
parents: 282
diff changeset
1768 {
2174fb133dbe Optimize ef_write_block function:
ideenmodellierer
parents: 282
diff changeset
1769 remaining_length = remaining_page_size - 1;
2174fb133dbe Optimize ef_write_block function:
ideenmodellierer
parents: 282
diff changeset
1770 }
2174fb133dbe Optimize ef_write_block function:
ideenmodellierer
parents: 282
diff changeset
1771 if( (remaining_space_to_ring_end >= 256))
2174fb133dbe Optimize ef_write_block function:
ideenmodellierer
parents: 282
diff changeset
1772 {
2174fb133dbe Optimize ef_write_block function:
ideenmodellierer
parents: 282
diff changeset
1773 for(int j=0; j<remaining_length; j++)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1774 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1775 write_spi(sendByte[i],HOLDCS);/* write data */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1776 actualAddress++;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1777 i++;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1778 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1779 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1780 /* byte with RELEASE */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1781 write_spi(sendByte[i],RELEASE);/* write data */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1782 actualAddress++;
420
2174fb133dbe Optimize ef_write_block function:
ideenmodellierer
parents: 282
diff changeset
1783 i++;
2174fb133dbe Optimize ef_write_block function:
ideenmodellierer
parents: 282
diff changeset
1784
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1785 if(actualAddress > ringStop)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1786 actualAddress = ringStart;
420
2174fb133dbe Optimize ef_write_block function:
ideenmodellierer
parents: 282
diff changeset
1787
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1788 if(do_not_erase == 0)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1789 ext_flash_erase_if_on_page_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1790 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1791 switch(type)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1792 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1793 case EF_HEADER:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1794 actualPointerHeader = actualAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1795 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1796 case EF_SAMPLE:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1797 actualPointerSample = actualAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1798 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1799 case EF_DEVICEDATA:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1800 actualPointerDevicedata = actualAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1801 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1802 case EF_VPMDATA:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1803 actualPointerVPM = actualAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1804 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1805 case EF_SETTINGS:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1806 actualPointerSettings = actualAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1807 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1808 case EF_FIRMWARE:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1809 actualPointerFirmware = actualAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1810 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1811 case EF_FIRMWARE2:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1812 actualPointerFirmware2 = actualAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1813 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1814 default:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1815 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1816 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1817 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1818
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1819
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1820 static _Bool ext_flash_test_remaining_space_of_page_empty(uint32_t pointer, uint16_t length)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1821 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1822 if((pointer & 0xFFF) == 0)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1823 return 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1824
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1825 uint32_t backup = actualAddress;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1826 uint8_t data;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1827 uint32_t size_to_page_end;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1828
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1829 size_to_page_end = 0x1000 - (pointer & 0xFFF);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1830 if(length > size_to_page_end)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1831 length = size_to_page_end;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1832
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1833 actualAddress = pointer;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1834 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1835
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1836 for(uint16_t i = 0; i<length; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1837 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1838 ext_flash_read_block(&data, 255); // 255 = ENTIRE FLASH
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1839 if(data != 0xFF)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1840 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1841 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1842 actualAddress = backup;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1843 return 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1844 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1845 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1846 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1847 actualAddress = backup;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1848 return 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1849 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1850
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1851
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1852 static void ext_flash_set_to_begin_of_next_page(uint32_t *pointer, uint8_t type)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1853 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1854 uint32_t ringStart, ringStop;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1855
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1856 switch(type)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1857 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1858 case EF_HEADER:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1859 ringStart = HEADERSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1860 ringStop = HEADERSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1861 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1862 case EF_SAMPLE:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1863 ringStart = SAMPLESTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1864 ringStop = SAMPLESTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1865 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1866 case EF_DEVICEDATA:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1867 ringStart = DDSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1868 ringStop = DDSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1869 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1870 case EF_VPMDATA:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1871 ringStart = VPMSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1872 ringStop = VPMSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1873 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1874 case EF_SETTINGS:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1875 ringStart = SETTINGSSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1876 ringStop = SETTINGSSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1877 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1878 default:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1879 ringStart = FLASHSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1880 ringStop = FLASHSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1881 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1882 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1883
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1884 *pointer = (*pointer & 0xFFF) + 0x1000;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1885
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1886 if((*pointer < ringStart) || (*pointer >= ringStop))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1887 *pointer = ringStart;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1888 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1889
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1890
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1891 static void ef_erase_64K(uint32_t blocks)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1892 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1893 for(uint32_t i = 0; i < blocks; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1894 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1895 wait_chip_not_busy();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1896 write_spi(0x06,RELEASE);/* WREN */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1897 write_spi(0xD8,HOLDCS);/* 64k erase cmd */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1898 write_address(RELEASE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1899 actualAddress += 0x10000;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1900 HAL_Delay(25);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1901 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1902 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1903
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1904
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1905 static void chip_unselect(void)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1906 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1907 HAL_GPIO_WritePin(EXTFLASH_CSB_GPIO_PORT,EXTFLASH_CSB_PIN,GPIO_PIN_SET); // chip select
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1908 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1909
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1910 static void chip_select(void)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1911 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1912 HAL_GPIO_WritePin(EXTFLASH_CSB_GPIO_PORT,EXTFLASH_CSB_PIN,GPIO_PIN_RESET); // chip select
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1913 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1914
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1915 static void error_led_on(void)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1916 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1917 HAL_GPIO_WritePin(OSCILLOSCOPE_GPIO_PORT,OSCILLOSCOPE_PIN,GPIO_PIN_SET);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1918 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1919
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1920 static void error_led_off(void)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1921 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1922 HAL_GPIO_WritePin(OSCILLOSCOPE_GPIO_PORT,OSCILLOSCOPE_PIN,GPIO_PIN_RESET);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1923 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1924
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1925
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1926 static uint8_t read_spi(uint8_t unselect_CS_afterwards)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1927 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1928 uint8_t byte;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1929
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1930 chip_select();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1931
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1932 if(HAL_SPI_Receive(&hspiDisplay, &byte, 1, 10000) != HAL_OK)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1933 Error_Handler_extflash();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1934
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1935 while (HAL_SPI_GetState(&hspiDisplay) != HAL_SPI_STATE_READY)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1936 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1937 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1938 if(unselect_CS_afterwards)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1939 chip_unselect();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1940
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1941 return byte;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1942 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1943
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1944
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1945 static void write_spi(uint8_t data, uint8_t unselect_CS_afterwards)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1946 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1947 chip_select();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1948
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1949 if(HAL_SPI_Transmit(&hspiDisplay, &data, 1, 10000) != HAL_OK)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1950 Error_Handler_extflash();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1951
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1952 while (HAL_SPI_GetState(&hspiDisplay) != HAL_SPI_STATE_READY)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1953 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1954 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1955 if(unselect_CS_afterwards)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1956 chip_unselect();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1957 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1958
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1959
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1960 static void write_address(uint8_t unselect_CS_afterwards)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1961 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1962 uint8_t hi, med ,lo;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1963
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1964 hi = (actualAddress >> 16) & 0xFF;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1965 med = (actualAddress >> 8) & 0xFF;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1966 lo = actualAddress & 0xFF;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1967
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1968 write_spi(hi, HOLDCS);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1969 write_spi(med, HOLDCS);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1970 write_spi(lo, unselect_CS_afterwards);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1971 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1972
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1973
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1974 static void wait_chip_not_busy(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1975 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1976 uint8_t status;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1977
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1978 chip_unselect();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1979
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1980 write_spi(0x05,HOLDCS); /* RDSR */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1981 status = read_spi(HOLDCS);/* read status */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1982 while(status & 0x01)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1983 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1984 HAL_Delay(1);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1985 status = read_spi(HOLDCS);/* read status */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1986 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1987 chip_unselect();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1988 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1989
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1990
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
1991 static void ext_flash_incf_address(uint8_t type)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1992 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1993 uint32_t ringStart, ringStop;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1994
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1995 actualAddress += 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1996
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1997 switch(type)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1998 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1999 case EF_HEADER:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2000 ringStart = HEADERSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2001 ringStop = HEADERSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2002 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2003 case EF_SAMPLE:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2004 ringStart = SAMPLESTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2005 ringStop = SAMPLESTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2006 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2007 case EF_DEVICEDATA:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2008 ringStart = DDSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2009 ringStop = DDSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2010 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2011 case EF_VPMDATA:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2012 ringStart = VPMSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2013 ringStop = VPMSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2014 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2015 case EF_SETTINGS:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2016 ringStart = SETTINGSSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2017 ringStop = SETTINGSSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2018 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2019 case EF_FIRMWARE:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2020 ringStart = FWSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2021 ringStop = FWSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2022 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2023 case EF_FIRMWARE2:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2024 ringStart = FWSTART2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2025 ringStop = FWSTOP2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2026 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2027 default:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2028 ringStart = FLASHSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2029 ringStop = FLASHSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2030 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2031 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2032
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2033 if((actualAddress < ringStart) || (actualAddress > ringStop))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2034 actualAddress = ringStart;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2035 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2036
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2037
268
1b9847d40e81 cleanup: make things static where possible.
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
2038 static void ext_flash_decf_address_ring(uint8_t type)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2039 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2040 uint32_t ringStart, ringStop;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2041
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2042 switch(type)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2043 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2044 case EF_HEADER:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2045 ringStart = HEADERSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2046 ringStop = HEADERSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2047 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2048 case EF_SAMPLE:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2049 ringStart = SAMPLESTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2050 ringStop = SAMPLESTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2051 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2052 case EF_DEVICEDATA:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2053 ringStart = DDSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2054 ringStop = DDSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2055 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2056 case EF_VPMDATA:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2057 ringStart = VPMSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2058 ringStop = VPMSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2059 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2060 case EF_SETTINGS:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2061 ringStart = SETTINGSSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2062 ringStop = SETTINGSSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2063 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2064 case EF_FIRMWARE:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2065 ringStart = FWSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2066 ringStop = FWSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2067 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2068 case EF_FIRMWARE2:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2069 ringStart = FWSTART2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2070 ringStop = FWSTOP2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2071 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2072 default:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2073 ringStart = FLASHSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2074 ringStop = FLASHSTOP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2075 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2076 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2077
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2078 if((actualAddress <= ringStart) || (actualAddress > ringStop))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2079 actualAddress = ringStop;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2080 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2081 actualAddress -= 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2082 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2083
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2084
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2085 static void ef_hw_rough_delay_us(uint32_t delayUs)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2086 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2087 if(!delayUs)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2088 return;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2089 delayUs*= 12;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2090 while(delayUs--);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2091 return;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2092 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2093
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2094 static void Error_Handler_extflash(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2095 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2096 while(1)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2097 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2098 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2099 }
225
2bb1db22b5f5 cleanup: random set of cleanups
Jan Mulder <jlmulder@xs4all.nl>
parents: 38
diff changeset
2100 /*
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2101 uint8_t ext_flash_erase_firmware_if_not_empty(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2102 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2103 const uint8_t TESTSIZE_FW = 4;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2104
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2105 uint8_t data[TESTSIZE_FW];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2106 uint8_t notEmpty = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2107
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2108 actualAddress = FWSTART;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2109 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2110 for(int i = 0; i < TESTSIZE_FW; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2111 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2112 ext_flash_read_block(&data[i], EF_FIRMWARE);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2113 if(data[i] != 0xFF)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2114 notEmpty = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2115 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2116 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2117
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2118 if(notEmpty)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2119 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2120 ext_flash_erase_firmware();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2121 return 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2122 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2123 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2124 return 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2125 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2126
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2127 uint8_t ext_flash_erase_firmware2_if_not_empty(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2128 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2129 const uint8_t TESTSIZE_FW = 4;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2130
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2131 uint8_t data[TESTSIZE_FW];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2132 uint8_t notEmpty = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2133
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2134 actualAddress = FWSTART2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2135 ext_flash_read_block_start();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2136 for(int i = 0; i < TESTSIZE_FW; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2137 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2138 ext_flash_read_block(&data[i], EF_FIRMWARE2);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2139 if(data[i] != 0xFF)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2140 notEmpty = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2141 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2142 ext_flash_read_block_stop();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2143
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2144 if(notEmpty)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2145 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2146 ext_flash_erase_firmware2();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2147 return 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2148 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2149 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2150 return 0;
225
2bb1db22b5f5 cleanup: random set of cleanups
Jan Mulder <jlmulder@xs4all.nl>
parents: 38
diff changeset
2151 }*/