annotate Discovery/Src/externLogbookFlash.c @ 169:842f57bbaaad cleanup-1

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