Mercurial > public > ostc4
annotate BootLoader/Src/externLogbookFlash_mini.c @ 1054:8fe6676f28c9 Icon_Integration tip
Restructure reset menu:
The reset for custom icon back to the default has been added. Without modification it would not have fit into the reset menu. To add some space all reset operations have been moved into a general "Reset" menu linke it is also implemented for the reboot options. The icon reset option is only show if an icon is stored.
| author | Ideenmodellierer |
|---|---|
| date | Wed, 31 Dec 2025 17:52:03 +0100 |
| parents | 493a5903ec20 |
| 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 } |
