Mercurial > public > ostc4
annotate BootLoader/Src/externCPU2bootloader_mini.c @ 1003:f1b78bc8de10 BootloaderOstc5
Bootloader improve init sequence:
Initialization of the BT module failed with the previous version. Root cause could be that the commands were send to fast to the module and the error counter expired before the configuration was stored. To avoid this problem a timer has been added which delays the transmission of commands by 100ms.
| author | Ideenmodellierer |
|---|---|
| date | Thu, 01 May 2025 17:52:17 +0200 |
| parents | aeafa631147d |
| children |
| rev | line source |
|---|---|
|
985
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
1 /** |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
2 ****************************************************************************** |
|
aeafa631147d
Exchange shared files with Bootloader specific mini version
Ideenmodellierer
parents:
diff
changeset
|
3 * @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>© 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 */ |
