annotate BootLoader/Src/externCPU2bootloader_mini.c @ 1002:23e94766d00a BootloaderOstc5

Bootloader remove not needed fonts: Only font48 and 24 are used by the bootloader. To reduce bootloader size the other fonts have been removed and the character set of font24 was reduce (no special characters)
author Ideenmodellierer
date Thu, 01 May 2025 17:48:25 +0200
parents aeafa631147d
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 * @file externCPU2bootloader.c Template
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
4 * @author heinrichs weikamp gmbh
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
5 * @version V0.0.1
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
6 * @date 23-Oct-2014
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
7 * @version V0.0.1
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
8 * @since 23-Oct-2014
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
9 * @brief Main Template to communicate with the second CPU in bootloader mode
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
10 * bootloader ROM build by ST and defined in AN4286
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
11 *
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
12 @verbatim
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
13 ==============================================================================
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
14 ##### How to use #####
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
15 ==============================================================================
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
16 @endverbatim
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
17 ******************************************************************************
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
18 * @attention
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 * <h2><center>&copy; COPYRIGHT(c) 2016 heinrichs weikamp</center></h2>
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
21 *
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
22 ******************************************************************************
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
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
25 /* Includes ------------------------------------------------------------------*/
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
26 #include "stm32f4xx_hal.h"
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
27 #include "stdio.h"
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
28 #include "ostc.h"
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
29 #include "settings.h"
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
30 #include "externCPU2bootloader.h"
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
31 #include "externLogbookFlash.h"
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
32 #include "tComm.h"
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
33
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
34
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
35 /* Exported variables --------------------------------------------------------*/
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
36
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
37 /* Private types -------------------------------------------------------------*/
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 /* Private variables ---------------------------------------------------------*/
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 /* Private function prototypes -----------------------------------------------*/
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 static uint8_t boot_sync_frame(void);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
44 static uint8_t boot_ack(void);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
45 static uint8_t boot_get_id(uint8_t *RxBuffer);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
46 static uint8_t boot_get_version(uint8_t *RxBuffer);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
47 static uint8_t boot_write_memory(uint32_t address, uint8_t length_minus_1, uint8_t *data);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
48 static uint8_t boot_erase_memory(void);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
49 static void Bootloader_send_command(uint8_t command);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
50 static void Bootloader_spi_single(uint8_t TxByte);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
51 static void Bootloader_spi(uint16_t lengthData, uint8_t *aTxBuffer, uint8_t *aRxBuffer);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
52
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 /* Exported functions --------------------------------------------------------*/
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
55
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
56 uint8_t extCPU2bootloader_start(uint8_t *version, uint16_t *chipID)
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
57 {
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
58 uint8_t aRxBuffer[256] = { 0 };
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
59
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
60 HAL_GPIO_WritePin(SMALLCPU_CSB_GPIO_PORT,SMALLCPU_CSB_PIN,GPIO_PIN_RESET);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
61
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
62 boot_sync_frame();
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
63 boot_get_version(aRxBuffer);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
64 *version = aRxBuffer[1];
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
65 HAL_Delay(10);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
66 boot_get_id(aRxBuffer);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
67 *chipID = ((uint16_t)aRxBuffer[2]) << 8;
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
68 *chipID += (uint16_t)aRxBuffer[3];
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
69 HAL_Delay(10);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
70 if((*chipID == 0x431) && (*version > 10) && (*version < 32))
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
71 return 1;
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
72 else
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
73 return 0;
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
74 }
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
75
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
76
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
77 uint8_t extCPU2bootloader_internal(uint8_t* buffer, uint32_t length, char* display_text)
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
78 {
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
79 uint8_t version = 0;
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
80 uint16_t chipID = 0;
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
81
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
82 if(!extCPU2bootloader_start(&version,&chipID))
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
83 return 0;
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
84 if(!boot_erase_memory())
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
85 return 0;
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
86 HAL_Delay(100);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
87 uint16_t i=0;
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
88 uint32_t lengthsave = length;
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
89 uint8_t percent = 0;
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
90
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
91 while(length)
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
92 {
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
93 percent = (100 * (i * 256)) /lengthsave;
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
94 tComm_verlauf(percent);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
95
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
96 if(length > 256)
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
97 {
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
98 if( !boot_write_memory(0x08000000 + (i * 256), 255, &buffer[i * 256]) )
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
99 return 0;;
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
100 length -= 256;
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 }
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
103 else
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
104 {
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
105 if(!boot_write_memory(0x08000000 + (i * 256), length - 1, &buffer[i * 256]))
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
106 return 0;
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
107 length = 0;
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
108 }
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
109 i++;
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
110 }
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
111 return 2;
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
112 }
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
113
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 uint8_t extCPU2bootloader(uint8_t* buffer, uint32_t length, char* display_text)
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
116 {
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
117 uint8_t result = 0;
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
118
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
119 MX_SmallCPU_Reset_To_Boot();
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
120 result = extCPU2bootloader_internal(buffer,length,display_text);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
121 MX_SmallCPU_Reset_To_Standard();
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
122 return result;
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
123 }
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
124
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
125 /* Private functions --------------------------------------------------------*/
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
126
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
127 static uint8_t boot_sync_frame(void)
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
128 {
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
129 Bootloader_spi_single(0x5a);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
130 return boot_ack();
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
131 }
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 uint8_t boot_get_version(uint8_t *RxBuffer)
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
134 {
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
135 Bootloader_spi_single(0x5a);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
136 Bootloader_send_command(0x01);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
137 if(!boot_ack())
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
138 return 0;
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
139 Bootloader_spi(3, NULL, RxBuffer);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
140 return boot_ack();
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
141 }
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
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
144 static uint8_t boot_get_id(uint8_t *RxBuffer)
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
145 {
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
146 Bootloader_spi_single(0x5a);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
147 Bootloader_send_command(0x02);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
148 if(!boot_ack())
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
149 return 0;
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
150 Bootloader_spi(5, NULL, RxBuffer);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
151 return boot_ack();
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
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
154
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
155 uint8_t boot_write_memory(uint32_t address, uint8_t length_minus_1, uint8_t *data)
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 addressNew[4];
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
158 uint8_t checksum = 0;
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
159 uint16_t length;
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
160
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
161 Bootloader_spi_single(0x5a);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
162 Bootloader_send_command(0x31);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
163 if(!boot_ack())
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
164 return 1;
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
165 HAL_Delay(5);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
166 addressNew[0] = (uint8_t)((address >> 24) & 0xFF);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
167 addressNew[1] = (uint8_t)((address >> 16) & 0xFF);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
168 addressNew[2] = (uint8_t)((address >> 8) & 0xFF);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
169 addressNew[3] = (uint8_t)((address >> 0) & 0xFF);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
170 Bootloader_spi(4, addressNew, NULL);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
171 checksum = 0;
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
172 checksum ^= addressNew[0];
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
173 checksum ^= addressNew[1];
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
174 checksum ^= addressNew[2];
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
175 checksum ^= addressNew[3];
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
176 Bootloader_spi_single(checksum);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
177 if(!boot_ack())
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
178 return 0;
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
179 HAL_Delay(1);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
180 Bootloader_spi_single(length_minus_1);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
181 length = ((uint16_t)length_minus_1) + 1;
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
182 Bootloader_spi(length, data, NULL);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
183 HAL_Delay(26);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
184 checksum = 0;
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
185 checksum ^= length_minus_1;
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
186 for(int i=0;i<length;i++)
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
187 checksum ^= data[i];
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
188 Bootloader_spi_single(checksum);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
189
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
190 if(!boot_ack())
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
191 return 0;
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
192 HAL_Delay(1);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
193 return 1;
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
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
196 static uint8_t boot_erase_memory(void)
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 uint8_t special_erase_with_checksum[3] = {0xFF, 0xFF, 0x00};
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
199
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
200 Bootloader_spi_single(0x5a);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
201 Bootloader_send_command(0x44);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
202 if(!boot_ack())
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
203 return 0;
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
204 Bootloader_spi(3, special_erase_with_checksum, NULL);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
205 HAL_Delay(11000); /* 5.5 to 11 seconds */
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
206 if(!boot_ack())
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
207 return 0;
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
208 return 1;
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
209 }
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 /* write unprotect does reset the system !! */
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
212 uint8_t boot_write_unprotect(void)
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 Bootloader_spi_single(0x5a);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
215 Bootloader_send_command(0x73);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
216 if(!boot_ack())
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
217 return 0;
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
218 return boot_ack();
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
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
221 static uint8_t boot_ack(void)
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 uint8_t answer = 0;
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 Bootloader_spi_single(0x00);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
226 for(int i=0; i< 1000; i++)
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
227 {
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
228 Bootloader_spi(1, NULL, &answer);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
229 if((answer == 0x79) || (answer == 0x1F))
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 Bootloader_spi_single(0x79);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
232 break;
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
233 }
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
234 HAL_Delay(10);
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 if(answer == 0x79)
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
237 return 1;
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
238 else
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
239 return 0;
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
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
242 static void Bootloader_send_command(uint8_t command)
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 uint8_t send[2];
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
245 uint8_t receive[2];
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
246
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
247 send[0] = command;
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
248 send[1] = 0xFF ^ command;
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
249 Bootloader_spi(2, send, receive);
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 static void Bootloader_spi_single(uint8_t TxByte)
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
253 {
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
254 Bootloader_spi(1,&TxByte, 0);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
255 }
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
256
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
257
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
258 static void Bootloader_spi(uint16_t lengthData, uint8_t *aTxBuffer, uint8_t *aRxBuffer)
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
259 {
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
260 uint8_t dummy[256] = { 0 };
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
261 uint8_t *tx_data;
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
262 uint8_t *rx_data;
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
263
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
264 tx_data = aTxBuffer;
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
265 rx_data = aRxBuffer;
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 if(aTxBuffer == NULL)
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
268 tx_data = dummy;
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
269 if(aRxBuffer == NULL)
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
270 rx_data = dummy;
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 //HAL_GPIO_WritePin(OSCILLOSCOPE_GPIO_PORT,OSCILLOSCOPE_PIN,GPIO_PIN_RESET); // only for testing with Oscilloscope
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
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
275 HAL_SPI_TransmitReceive(&cpu2DmaSpi, (uint8_t *)tx_data, (uint8_t *)rx_data, (uint16_t)lengthData,1000);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
276 /*
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
277 if(HAL_SPI_TransmitReceive_DMA(&cpu2DmaSpi, (uint8_t *)tx_data, (uint8_t *)rx_data, (uint16_t)lengthData) != HAL_OK)
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
278 if(HAL_SPI_TransmitReceive_DMA(&cpu2DmaSpi, (uint8_t *)tx_data, (uint8_t *)rx_data, (uint16_t)lengthData) != HAL_OK)
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
279 Bootloader_Error_Handler();
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 while (HAL_SPI_GetState(&cpu2DmaSpi) != HAL_SPI_STATE_READY)// only for testing with Oscilloscope
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 }
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
284 HAL_GPIO_WritePin(OSCILLOSCOPE_GPIO_PORT,OSCILLOSCOPE_PIN,GPIO_PIN_SET); // only for testing with Oscilloscope
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
285 */
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
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
288
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 static void Bootloader_Error_Handler(void)
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 while(1);
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
293 }
aeafa631147d Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff changeset
294 */