Mercurial > public > ostc4
annotate BootLoader/Src/externLogbookFlash_mini.c @ 1048:493a5903ec20 GasConsumption
Merge with 9d9d506a82d3162b6b2323819cc08652887d7dd4 (Bootloader)
| author | Ideenmodellierer |
|---|---|
| date | Sat, 15 Nov 2025 19:29:44 +0100 |
| parents | aeafa631147d |
| children |
| rev | line source |
|---|---|
|
985
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
1 /** |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
2 ****************************************************************************** |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
3 * @copyright heinrichs weikamp |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
4 * @file externLogbookFlash.c |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
5 * @author heinrichs weikamp gmbh |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
6 * @date 07-Aug-2014 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
7 * @version V0.0.4 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
8 * @since 29-Sept-2015 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
9 * @brief Main File to access the new 1.8 Volt Spansion S25FS256S 256 Mbit (32 Mbyte) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
10 * @bug |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
11 * @warning |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
12 * |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
13 @verbatim |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
14 ============================================================================== |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
15 ##### Logbook Header (TOC) ##### |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
16 ============================================================================== |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
17 [..] Memory useage: |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
18 NEW: Spansion S25FS-S256S |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
19 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
20 only 8x 4KB and 1x 32KB, remaining is 64KB or 256KB |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
21 Sector Size (kbyte) Sector Count Sector Range Address Range (Byte Address) Notes |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
22 4 8 SA00 00000000h-00000FFFh |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
23 : : |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
24 SA07 00007000h-00007FFFh |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
25 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
26 32 1 SA08 00008000h-0000FFFFh |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
27 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
28 64 511 SA09 00010000h-0001FFFFh |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
29 : : |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
30 SA519 01FF0000h-01FFFFFFh |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
31 OLD: |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
32 1kB each header |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
33 with predive header at beginning |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
34 and postdive header with 0x400 HEADER2OFFSET |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
35 4kB (one erase) has two dives with 4 headers total |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
36 total of 512 kB (with 256 header ids (8 bit)) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
37 Size is 280 Byte (as of 25.Nov. 2014) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
38 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
39 [..] Output to PC / UART is postdive header |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
40 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
41 [..] Block Protection Lock-Down is to erase logbook only |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
42 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
43 [..] Timing (see page 137 of LOGBOOK_V3_S25FS-S_00-271247.pdf |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
44 bulk erase is 2 minutes typ., 6 minutes max. |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
45 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
46 ============================================================================== |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
47 ##### DEMOMODE ##### |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
48 ============================================================================== |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
49 151215: ext_flash_write_settings() is DISABLED! |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
50 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
51 ============================================================================== |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
52 ##### bug fixes ##### |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
53 ============================================================================== |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
54 150917: end in header and length of sample was one byte too long |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
55 as stated by Jef Driesen email 15.09.2015 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
56 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
57 @endverbatim |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
58 ****************************************************************************** |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
59 * @attention |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
60 * |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
61 * <h2><center>© COPYRIGHT(c) 2015 heinrichs weikamp</center></h2> |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
62 * |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
63 ****************************************************************************** |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
64 */ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
65 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
66 /* Includes ------------------------------------------------------------------*/ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
67 #include "stm32f4xx_hal.h" |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
68 #include "externLogbookFlash.h" |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
69 #include "ostc.h" |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
70 #include "settings.h" |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
71 #include "gfx_engine.h" |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
72 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
73 /* Private types -------------------------------------------------------------*/ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
74 #define FLASHSTART 0x000000 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
75 //#define FLASHSTOP 0x01FFFFFF all 32 MB with 4byte addressing |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
76 #define FLASHSTOP 0x00FFFFFF |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
77 //#define FLASHSTOP 0x3FFFFF |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
78 #define RELEASE 1 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
79 #define HOLDCS 0 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
80 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
81 #define HEADER2OFFSET 0x400 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
82 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
83 typedef struct{ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
84 uint8_t IsBusy:1; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
85 uint8_t IsWriteEnabled:1; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
86 uint8_t BlockProtect0:1; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
87 uint8_t BlockProtect1:1; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
88 uint8_t BlockProtect2:1; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
89 uint8_t BlockProtect3:1; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
90 uint8_t IsAutoAddressIncMode:1; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
91 uint8_t BlockProtectL:1; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
92 } extFlashStatusUbit8_t; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
93 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
94 typedef union{ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
95 extFlashStatusUbit8_t ub; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
96 uint8_t uw; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
97 } extFlashStatusBit8_Type; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
98 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
99 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
100 /* Exported variables --------------------------------------------------------*/ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
101 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
102 /* Private variables ---------------------------------------------------------*/ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
103 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
104 static uint32_t actualAddress = 0; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
105 static uint32_t preparedPageAddress = 0; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
106 static uint32_t closeSectorAddress = 0; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
107 static uint32_t actualPointerHeader = 0; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
108 static uint32_t actualPointerSample = 0; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
109 static uint32_t actualPointerDevicedata = DDSTART; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
110 static uint32_t actualPointerVPM = 0; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
111 static uint32_t actualPointerSettings = SETTINGSSTART; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
112 static uint32_t actualPointerFirmware = 0; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
113 static uint32_t actualPointerFirmware2 = 0; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
114 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
115 /* Private function prototypes -----------------------------------------------*/ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
116 static void chip_unselect(void); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
117 static void chip_select(void); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
118 static void write_spi(uint8_t data, uint8_t unselect_CS_afterwards); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
119 static uint8_t read_spi(uint8_t unselect_CS_afterwards); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
120 static void write_address(uint8_t unselect_CS_afterwards); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
121 static void Error_Handler_extflash(void); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
122 static void wait_chip_not_busy(void); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
123 static void ext_flash_incf_address(uint8_t type); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
124 //void ext_flash_incf_address_ring(void); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
125 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
126 static void ext_flash_erase4kB(void); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
127 static void ext_flash_erase32kB(void); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
128 static void ext_flash_erase64kB(void); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
129 static uint8_t ext_flash_erase_if_on_page_start(void); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
130 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
131 static void ef_write_block(uint8_t * sendByte, uint32_t length, uint8_t type, uint8_t do_not_erase); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
132 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
133 static void ext_flash_read_block(uint8_t *getByte, uint8_t type); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
134 static void ext_flash_read_block_multi(void *getByte, uint32_t size, uint8_t type); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
135 static void ext_flash_read_block_stop(void); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
136 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
137 static void ef_hw_rough_delay_us(uint32_t delayUs); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
138 static void ef_erase_64K(uint32_t blocks); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
139 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
140 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
141 /* Exported functions --------------------------------------------------------*/ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
142 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
143 void ext_flash_write_firmware(uint8_t *pSample1, uint32_t length1)//, uint8_t *pSample2, uint32_t length2) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
144 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
145 general32to8_Type lengthTransform; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
146 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
147 lengthTransform.u32 = length1; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
148 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
149 actualPointerFirmware = FWSTART; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
150 ef_write_block(lengthTransform.u8,4, EF_FIRMWARE, 1); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
151 ef_write_block(pSample1,length1, EF_FIRMWARE, 1); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
152 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
153 // if(length2) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
154 // ef_write_block(pSample2,length2, EF_FIRMWARE, 1); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
155 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
156 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
157 uint8_t ext_flash_read_firmware_version(char *text) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
158 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
159 uint32_t backup = actualAddress; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
160 uint8_t buffer[4]; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
161 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
162 // + 4 for length data, see ext_flash_write_firmware |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
163 actualAddress = FWSTART + 4 + 0x10000; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
164 ext_flash_read_block_start(); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
165 ext_flash_read_block(&buffer[0], EF_FIRMWARE); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
166 ext_flash_read_block(&buffer[1], EF_FIRMWARE); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
167 ext_flash_read_block(&buffer[2], EF_FIRMWARE); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
168 ext_flash_read_block(&buffer[3], EF_FIRMWARE); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
169 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
170 ext_flash_read_block_stop(); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
171 actualAddress = backup; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
172 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
173 uint8_t ptr = 0; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
174 text[ptr++] = 'V'; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
175 ptr += gfx_number_to_string(2,0,&text[ptr],buffer[0] & 0x3F); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
176 text[ptr++] = '.'; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
177 ptr += gfx_number_to_string(2,0,&text[ptr],buffer[1] & 0x3F); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
178 text[ptr++] = '.'; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
179 ptr += gfx_number_to_string(2,0,&text[ptr],buffer[2] & 0x3F); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
180 text[ptr++] = ' '; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
181 if(buffer[3]) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
182 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
183 text[ptr++] = 'b'; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
184 text[ptr++] = 'e'; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
185 text[ptr++] = 't'; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
186 text[ptr++] = 'a'; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
187 text[ptr++] = ' '; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
188 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
189 return ptr; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
190 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
191 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
192 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
193 uint32_t ext_flash_read_firmware(uint8_t *pSample1, uint32_t max_length, uint8_t *magicByte) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
194 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
195 uint32_t backup = actualAddress; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
196 general32to8_Type lengthTransform; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
197 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
198 actualAddress = FWSTART; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
199 ext_flash_read_block_start(); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
200 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
201 ext_flash_read_block(&lengthTransform.u8[0], EF_FIRMWARE); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
202 ext_flash_read_block(&lengthTransform.u8[1], EF_FIRMWARE); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
203 ext_flash_read_block(&lengthTransform.u8[2], EF_FIRMWARE); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
204 ext_flash_read_block(&lengthTransform.u8[3], EF_FIRMWARE); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
205 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
206 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
207 if(lengthTransform.u32 == 0xFFFFFFFF) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
208 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
209 lengthTransform.u32 = 0xFFFFFFFF; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
210 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
211 else |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
212 if(lengthTransform.u32 > max_length) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
213 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
214 lengthTransform.u32 = 0xFF000000; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
215 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
216 else |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
217 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
218 for(uint32_t i = 0; i<lengthTransform.u32; i++) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
219 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
220 ext_flash_read_block(&pSample1[i], EF_FIRMWARE); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
221 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
222 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
223 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
224 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
225 ext_flash_read_block_stop(); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
226 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
227 if(magicByte) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
228 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
229 *magicByte = pSample1[0x10000 + 0x3E]; // 0x3E == 62 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
230 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
231 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
232 actualAddress = backup; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
233 return lengthTransform.u32; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
234 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
235 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
236 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
237 void ext_flash_write_firmware2(uint32_t offset, uint8_t *pSample1, uint32_t length1, uint8_t *pSample2, uint32_t length2) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
238 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
239 general32to8_Type lengthTransform, offsetTransform; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
240 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
241 lengthTransform.u32 = length1 + length2; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
242 offsetTransform.u32 = offset; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
243 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
244 actualPointerFirmware2 = FWSTART2; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
245 ef_write_block(lengthTransform.u8,4, EF_FIRMWARE2, 1); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
246 ef_write_block(offsetTransform.u8,4, EF_FIRMWARE2, 1); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
247 ef_write_block(pSample1,length1, EF_FIRMWARE2, 1); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
248 if(length2) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
249 ef_write_block(pSample2,length2, EF_FIRMWARE2, 1); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
250 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
251 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
252 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
253 uint32_t ext_flash_read_firmware2(uint32_t *offset, uint8_t *pSample1, uint32_t max_length1, uint8_t *pSample2, uint32_t max_length2) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
254 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
255 uint32_t backup = actualAddress; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
256 uint32_t length1, length2; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
257 general32to8_Type lengthTransform, offsetTransform; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
258 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
259 actualAddress = FWSTART2; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
260 ext_flash_read_block_start(); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
261 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
262 ext_flash_read_block(&lengthTransform.u8[0], EF_FIRMWARE2); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
263 ext_flash_read_block(&lengthTransform.u8[1], EF_FIRMWARE2); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
264 ext_flash_read_block(&lengthTransform.u8[2], EF_FIRMWARE2); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
265 ext_flash_read_block(&lengthTransform.u8[3], EF_FIRMWARE2); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
266 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
267 ext_flash_read_block(&offsetTransform.u8[0], EF_FIRMWARE2); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
268 ext_flash_read_block(&offsetTransform.u8[1], EF_FIRMWARE2); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
269 ext_flash_read_block(&offsetTransform.u8[2], EF_FIRMWARE2); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
270 ext_flash_read_block(&offsetTransform.u8[3], EF_FIRMWARE2); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
271 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
272 *offset = offsetTransform.u32; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
273 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
274 if(lengthTransform.u32 == 0xFFFFFFFF) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
275 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
276 lengthTransform.u32 = 0xFFFFFFFF; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
277 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
278 else |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
279 if(lengthTransform.u32 > max_length1 + max_length2) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
280 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
281 lengthTransform.u32 = 0xFF000000; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
282 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
283 else |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
284 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
285 if(lengthTransform.u32 < max_length1) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
286 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
287 length1 = lengthTransform.u32; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
288 length2 = 0; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
289 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
290 else |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
291 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
292 length1 = max_length1; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
293 length2 = lengthTransform.u32 - max_length1; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
294 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
295 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
296 if(pSample1) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
297 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
298 for(uint32_t i = 0; i<length1; i++) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
299 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
300 ext_flash_read_block(&pSample1[i], EF_FIRMWARE2); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
301 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
302 if(pSample2) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
303 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
304 for(uint32_t i = 0; i<length2; i++) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
305 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
306 ext_flash_read_block(&pSample2[i], EF_FIRMWARE2); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
307 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
308 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
309 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
310 else if(pSample2) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
311 { |
|
1048
493a5903ec20
Merge with 9d9d506a82d3162b6b2323819cc08652887d7dd4 (Bootloader)
Ideenmodellierer
parents:
985
diff
changeset
|
312 /* actualAddress += length1; do dummy read to get EEPROM to the correct address */ |
|
493a5903ec20
Merge with 9d9d506a82d3162b6b2323819cc08652887d7dd4 (Bootloader)
Ideenmodellierer
parents:
985
diff
changeset
|
313 for(uint32_t i = 0; i<length1; i++) |
|
493a5903ec20
Merge with 9d9d506a82d3162b6b2323819cc08652887d7dd4 (Bootloader)
Ideenmodellierer
parents:
985
diff
changeset
|
314 { |
|
493a5903ec20
Merge with 9d9d506a82d3162b6b2323819cc08652887d7dd4 (Bootloader)
Ideenmodellierer
parents:
985
diff
changeset
|
315 ext_flash_read_block(&pSample2[0], EF_FIRMWARE2); |
|
493a5903ec20
Merge with 9d9d506a82d3162b6b2323819cc08652887d7dd4 (Bootloader)
Ideenmodellierer
parents:
985
diff
changeset
|
316 } |
|
985
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
317 for(uint32_t i = 0; i<length2; i++) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
318 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
319 ext_flash_read_block(&pSample2[i], EF_FIRMWARE2); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
320 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
321 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
322 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
323 ext_flash_read_block_stop(); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
324 actualAddress = backup; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
325 return lengthTransform.u32; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
326 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
327 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
328 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
329 void ext_flash_read_fixed_16_devicedata_blocks_formated_128byte_total(uint8_t *buffer) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
330 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
331 SDeviceLine data[16]; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
332 uint8_t tempLengthIngnore; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
333 uint16_t count; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
334 uint8_t transfer; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
335 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
336 RTC_DateTypeDef Sdate; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
337 RTC_TimeTypeDef Stime; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
338 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
339 actualAddress = DDSTART; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
340 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
341 ext_flash_read_block_start(); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
342 ext_flash_read_block(&tempLengthIngnore, EF_DEVICEDATA); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
343 ext_flash_read_block(&tempLengthIngnore, EF_DEVICEDATA); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
344 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
345 ext_flash_read_block_multi((uint8_t *)data,16*3*4, EF_DEVICEDATA); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
346 ext_flash_read_block_stop(); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
347 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
348 count = 0; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
349 for(int i=0;i<16;i++) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
350 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
351 transfer = (data[i].value_int32 >> 24) & 0xFF; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
352 buffer[count++] = transfer; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
353 transfer = (data[i].value_int32 >> 16) & 0xFF; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
354 buffer[count++] = transfer; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
355 transfer = (data[i].value_int32 >> 8) & 0xFF; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
356 buffer[count++] = transfer; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
357 transfer = (data[i].value_int32) & 0xFF; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
358 buffer[count++] = transfer; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
359 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
360 translateDate(data[i].date_rtc_dr, &Sdate); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
361 translateTime(data[i].time_rtc_tr, &Stime); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
362 buffer[count++] = Sdate.Year; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
363 buffer[count++] = Sdate.Month; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
364 buffer[count++] = Sdate.Date; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
365 buffer[count++] = Stime.Hours; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
366 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
367 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
368 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
369 void ext_flash_erase_firmware(void) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
370 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
371 uint32_t size, blocks_64k; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
372 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
373 actualAddress = FWSTART; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
374 size = 1 + FWSTOP - FWSTART; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
375 blocks_64k = size / 0x10000; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
376 ef_erase_64K(blocks_64k); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
377 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
378 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
379 void ext_flash_erase_firmware2(void) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
380 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
381 uint32_t size, blocks_64k; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
382 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
383 actualAddress = FWSTART2; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
384 size = 1 + FWSTOP2 - FWSTART2; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
385 blocks_64k = size / 0x10000; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
386 ef_erase_64K(blocks_64k); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
387 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
388 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
389 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
390 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
391 static void ext_flash_erase4kB(void) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
392 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
393 wait_chip_not_busy(); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
394 write_spi(0x06,RELEASE);/* WREN */ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
395 write_spi(0x20,HOLDCS);/* sector erase cmd */ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
396 write_address(RELEASE); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
397 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
398 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
399 /* be careful - might not work with entire family and other products |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
400 * see page 14 of LOGBOOK_V3_S25FS-S_00-271247.pdf |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
401 */ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
402 static void ext_flash_erase32kB(void) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
403 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
404 uint32_t actualAddress_backup; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
405 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
406 actualAddress_backup = actualAddress; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
407 actualAddress = 0; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
408 wait_chip_not_busy(); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
409 write_spi(0x06,RELEASE);/* WREN */ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
410 write_spi(0xD8,HOLDCS);/* sector erase cmd */ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
411 write_address(RELEASE); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
412 actualAddress = actualAddress_backup; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
413 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
414 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
415 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
416 static void ext_flash_erase64kB(void) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
417 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
418 wait_chip_not_busy(); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
419 write_spi(0x06,RELEASE);/* WREN */ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
420 write_spi(0xD8,HOLDCS);/* sector erase cmd */ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
421 write_address(RELEASE); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
422 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
423 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
424 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
425 void ext_flash_read_block_start(void) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
426 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
427 wait_chip_not_busy(); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
428 write_spi(0x03,HOLDCS); /* WREN */ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
429 write_address(HOLDCS); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
430 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
431 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
432 /* 4KB, 32KB, 64 KB, not the upper 16 MB with 4 Byte address at the moment */ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
433 static uint8_t ext_flash_erase_if_on_page_start(void) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
434 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
435 if(actualAddress < 0x00008000) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
436 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
437 /* 4K Byte is 0x1000 */ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
438 if((actualAddress & 0xFFF) == 0) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
439 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
440 ext_flash_erase4kB(); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
441 return 1; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
442 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
443 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
444 else |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
445 if(actualAddress < 0x00010000) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
446 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
447 /* 32K Byte is only one page */ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
448 if(actualAddress == 0x00010000) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
449 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
450 ext_flash_erase32kB(); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
451 return 1; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
452 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
453 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
454 else |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
455 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
456 /* 64K Byte is 0x10000 */ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
457 if((actualAddress & 0xFFFF) == 0) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
458 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
459 if(preparedPageAddress == actualAddress) /* has page already been prepared before? (at the moment for samples only) */ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
460 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
461 preparedPageAddress = 0; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
462 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
463 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
464 else |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
465 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
466 ext_flash_erase64kB(); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
467 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
468 return 1; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
469 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
470 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
471 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
472 return 0; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
473 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
474 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
475 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
476 static void ext_flash_read_block(uint8_t *getByte, uint8_t type) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
477 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
478 *getByte = read_spi(HOLDCS);/* read data */ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
479 ext_flash_incf_address(type); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
480 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
481 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
482 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
483 static void ext_flash_read_block_multi(void *getByte, uint32_t size, uint8_t type) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
484 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
485 uint8_t *data; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
486 data = getByte; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
487 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
488 for(uint32_t i=0;i<size;i++) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
489 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
490 data[i] = read_spi(HOLDCS);/* read data */ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
491 ext_flash_incf_address(type); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
492 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
493 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
494 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
495 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
496 static void ext_flash_read_block_stop(void) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
497 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
498 chip_unselect(); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
499 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
500 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
501 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
502 /* Private functions ---------------------------------------------------------*/ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
503 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
504 static void ef_write_block(uint8_t * sendByte, uint32_t length, uint8_t type, uint8_t do_not_erase) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
505 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
506 uint32_t remaining_page_size, remaining_length, remaining_space_to_ring_end; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
507 uint32_t i=0; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
508 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
509 if(!length) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
510 return; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
511 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
512 uint32_t ringStart, ringStop; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
513 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
514 switch(type) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
515 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
516 case EF_HEADER: |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
517 actualAddress = actualPointerHeader; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
518 ringStart = HEADERSTART; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
519 ringStop = HEADERSTOP; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
520 break; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
521 case EF_SAMPLE: |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
522 actualAddress = actualPointerSample; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
523 ringStart = SAMPLESTART; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
524 ringStop = SAMPLESTOP; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
525 break; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
526 case EF_DEVICEDATA: |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
527 actualAddress = actualPointerDevicedata; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
528 ringStart = DDSTART; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
529 ringStop = DDSTOP; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
530 break; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
531 case EF_VPMDATA: |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
532 actualAddress = actualPointerVPM; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
533 ringStart = VPMSTART; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
534 ringStop = VPMSTOP; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
535 break; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
536 case EF_SETTINGS: |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
537 actualAddress = actualPointerSettings; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
538 ringStart = SETTINGSSTART; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
539 ringStop = SETTINGSSTOP; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
540 break; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
541 case EF_FIRMWARE: |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
542 actualAddress = actualPointerFirmware; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
543 ringStart = FWSTART; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
544 ringStop = FWSTOP; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
545 break; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
546 case EF_FIRMWARE2: |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
547 actualAddress = actualPointerFirmware2; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
548 ringStart = FWSTART2; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
549 ringStop = FWSTOP2; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
550 break; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
551 default: |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
552 ringStart = FLASHSTART; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
553 ringStop = FLASHSTOP; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
554 break; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
555 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
556 /* safety */ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
557 if(actualAddress < ringStart) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
558 actualAddress = ringStart; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
559 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
560 if(do_not_erase == 0) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
561 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
562 ext_flash_erase_if_on_page_start(); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
563 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
564 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
565 while( i<length) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
566 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
567 ef_hw_rough_delay_us(5); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
568 wait_chip_not_busy(); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
569 write_spi(0x06,RELEASE); /* WREN */ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
570 write_spi(0x02,HOLDCS); /* write cmd */ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
571 write_address(HOLDCS); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
572 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
573 remaining_length = length - i; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
574 remaining_page_size = 0xFF - (uint8_t)(actualAddress & 0xFF) +1; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
575 remaining_space_to_ring_end = ringStop - actualAddress; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
576 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
577 if(remaining_length >= 256) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
578 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
579 remaining_length = 255; /* up to 256 bytes may be written in one burst. Last byte is written with release */ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
580 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
581 else |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
582 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
583 remaining_length--; /* last byte needed for release */ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
584 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
585 if(remaining_length >= (remaining_page_size) ) /* use 256 byte page and calculate number of bytes left */ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
586 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
587 remaining_length = remaining_page_size - 1; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
588 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
589 if( (remaining_space_to_ring_end >= 256)) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
590 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
591 for(int j=0; j<remaining_length; j++) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
592 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
593 write_spi(sendByte[i],HOLDCS);/* write data */ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
594 actualAddress++; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
595 i++; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
596 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
597 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
598 /* byte with RELEASE */ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
599 write_spi(sendByte[i],RELEASE);/* write data */ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
600 actualAddress++; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
601 i++; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
602 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
603 if(actualAddress > ringStop) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
604 actualAddress = ringStart; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
605 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
606 if(do_not_erase == 0) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
607 ext_flash_erase_if_on_page_start(); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
608 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
609 switch(type) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
610 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
611 case EF_HEADER: |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
612 actualPointerHeader = actualAddress; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
613 break; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
614 case EF_SAMPLE: |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
615 actualPointerSample = actualAddress; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
616 break; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
617 case EF_DEVICEDATA: |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
618 actualPointerDevicedata = actualAddress; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
619 break; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
620 case EF_VPMDATA: |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
621 actualPointerVPM = actualAddress; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
622 break; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
623 case EF_SETTINGS: |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
624 actualPointerSettings = actualAddress; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
625 break; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
626 case EF_FIRMWARE: |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
627 actualPointerFirmware = actualAddress; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
628 break; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
629 case EF_FIRMWARE2: |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
630 actualPointerFirmware2 = actualAddress; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
631 break; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
632 default: |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
633 break; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
634 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
635 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
636 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
637 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
638 static void ef_erase_64K(uint32_t blocks) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
639 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
640 for(uint32_t i = 0; i < blocks; i++) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
641 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
642 wait_chip_not_busy(); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
643 write_spi(0x06,RELEASE);/* WREN */ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
644 write_spi(0xD8,HOLDCS);/* 64k erase cmd */ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
645 write_address(RELEASE); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
646 actualAddress += 0x10000; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
647 HAL_Delay(25); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
648 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
649 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
650 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
651 static void chip_unselect(void) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
652 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
653 HAL_GPIO_WritePin(EXTFLASH_CSB_GPIO_PORT,EXTFLASH_CSB_PIN,GPIO_PIN_SET); // chip select |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
654 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
655 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
656 static void chip_select(void) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
657 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
658 HAL_GPIO_WritePin(EXTFLASH_CSB_GPIO_PORT,EXTFLASH_CSB_PIN,GPIO_PIN_RESET); // chip select |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
659 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
660 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
661 static uint8_t read_spi(uint8_t unselect_CS_afterwards) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
662 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
663 uint8_t byte; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
664 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
665 chip_select(); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
666 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
667 if(HAL_SPI_Receive(&hspiDisplay, &byte, 1, 10000) != HAL_OK) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
668 Error_Handler_extflash(); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
669 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
670 while (HAL_SPI_GetState(&hspiDisplay) != HAL_SPI_STATE_READY) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
671 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
672 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
673 if(unselect_CS_afterwards) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
674 chip_unselect(); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
675 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
676 return byte; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
677 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
678 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
679 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
680 static void write_spi(uint8_t data, uint8_t unselect_CS_afterwards) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
681 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
682 chip_select(); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
683 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
684 if(HAL_SPI_Transmit(&hspiDisplay, &data, 1, 10000) != HAL_OK) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
685 Error_Handler_extflash(); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
686 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
687 while (HAL_SPI_GetState(&hspiDisplay) != HAL_SPI_STATE_READY) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
688 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
689 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
690 if(unselect_CS_afterwards) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
691 chip_unselect(); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
692 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
693 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
694 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
695 static void write_address(uint8_t unselect_CS_afterwards) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
696 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
697 uint8_t hi, med ,lo; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
698 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
699 hi = (actualAddress >> 16) & 0xFF; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
700 med = (actualAddress >> 8) & 0xFF; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
701 lo = actualAddress & 0xFF; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
702 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
703 write_spi(hi, HOLDCS); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
704 write_spi(med, HOLDCS); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
705 write_spi(lo, unselect_CS_afterwards); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
706 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
707 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
708 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
709 static void wait_chip_not_busy(void) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
710 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
711 uint8_t status; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
712 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
713 chip_unselect(); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
714 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
715 write_spi(0x05,HOLDCS); /* RDSR */ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
716 status = read_spi(HOLDCS);/* read status */ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
717 while(status & 0x01) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
718 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
719 HAL_Delay(1); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
720 status = read_spi(HOLDCS);/* read status */ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
721 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
722 chip_unselect(); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
723 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
724 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
725 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
726 static void ext_flash_incf_address(uint8_t type) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
727 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
728 uint32_t ringStart, ringStop; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
729 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
730 actualAddress += 1; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
731 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
732 switch(type) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
733 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
734 case EF_HEADER: |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
735 ringStart = HEADERSTART; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
736 ringStop = HEADERSTOP; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
737 break; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
738 case EF_SAMPLE: |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
739 ringStart = SAMPLESTART; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
740 ringStop = SAMPLESTOP; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
741 break; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
742 case EF_DEVICEDATA: |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
743 ringStart = DDSTART; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
744 ringStop = DDSTOP; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
745 break; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
746 case EF_VPMDATA: |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
747 ringStart = VPMSTART; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
748 ringStop = VPMSTOP; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
749 break; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
750 case EF_SETTINGS: |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
751 ringStart = SETTINGSSTART; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
752 ringStop = SETTINGSSTOP; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
753 break; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
754 case EF_FIRMWARE: |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
755 ringStart = FWSTART; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
756 ringStop = FWSTOP; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
757 break; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
758 case EF_FIRMWARE2: |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
759 ringStart = FWSTART2; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
760 ringStop = FWSTOP2; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
761 break; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
762 default: |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
763 ringStart = FLASHSTART; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
764 ringStop = FLASHSTOP; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
765 break; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
766 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
767 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
768 if((actualAddress < ringStart) || (actualAddress > ringStop)) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
769 actualAddress = ringStart; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
770 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
771 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
772 static void ef_hw_rough_delay_us(uint32_t delayUs) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
773 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
774 if(!delayUs) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
775 return; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
776 delayUs*= 12; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
777 while(delayUs--); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
778 return; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
779 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
780 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
781 static void Error_Handler_extflash(void) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
782 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
783 while(1) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
784 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
785 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
786 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
787 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
788 void ext_flash_CloseSector(void) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
789 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
790 uint32_t actualAddressBackup = actualAddress; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
791 int i=0; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
792 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
793 if(closeSectorAddress != 0) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
794 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
795 /* write some dummy bytes to the sector which is currently used for storing samples. This is done to "hide" problem if function is calles again */ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
796 actualAddress = closeSectorAddress; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
797 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
798 wait_chip_not_busy(); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
799 write_spi(0x06,RELEASE); /* WREN */ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
800 write_spi(0x02,HOLDCS); /* write cmd */ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
801 write_address(HOLDCS); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
802 for(i = 0; i<8; i++) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
803 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
804 write_spi(0xA5,HOLDCS);/* write data */ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
805 actualAddress++; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
806 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
807 /* byte with RELEASE */ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
808 write_spi(0xA5,RELEASE);/* write data */ |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
809 actualAddress = actualAddressBackup; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
810 closeSectorAddress = 0; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
811 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
812 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
813 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
814 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
815 uint8_t ext_flash_erase_firmware_if_not_empty(void) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
816 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
817 const uint8_t TESTSIZE_FW = 4; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
818 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
819 uint8_t data[TESTSIZE_FW]; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
820 uint8_t notEmpty = 0; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
821 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
822 actualAddress = FWSTART; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
823 ext_flash_read_block_start(); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
824 for(int i = 0; i < TESTSIZE_FW; i++) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
825 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
826 ext_flash_read_block(&data[i], EF_FIRMWARE); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
827 if(data[i] != 0xFF) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
828 notEmpty = 1; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
829 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
830 ext_flash_read_block_stop(); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
831 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
832 if(notEmpty) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
833 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
834 ext_flash_erase_firmware(); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
835 return 1; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
836 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
837 else |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
838 return 0; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
839 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
840 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
841 uint8_t ext_flash_erase_firmware2_if_not_empty(void) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
842 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
843 const uint8_t TESTSIZE_FW = 4; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
844 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
845 uint8_t data[TESTSIZE_FW]; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
846 uint8_t notEmpty = 0; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
847 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
848 actualAddress = FWSTART2; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
849 ext_flash_read_block_start(); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
850 for(int i = 0; i < TESTSIZE_FW; i++) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
851 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
852 ext_flash_read_block(&data[i], EF_FIRMWARE2); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
853 if(data[i] != 0xFF) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
854 notEmpty = 1; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
855 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
856 ext_flash_read_block_stop(); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
857 |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
858 if(notEmpty) |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
859 { |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
860 ext_flash_erase_firmware2(); |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
861 return 1; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
862 } |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
863 else |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
864 return 0; |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
865 } |
