Skip to content

Commit 44dc83f

Browse files
committed
Add support for NUCLEO-N657X0-Q board
1 parent 4c20e33 commit 44dc83f

24 files changed

+3135
-26
lines changed

Bootloader/Adapters/Inc/flash_adapter.h

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,11 @@
3838
#include <stdint.h>
3939
#include <stdbool.h>
4040

41-
#ifdef EXTERNAL_FLASH
41+
#ifdef EXTERNAL_FLASH // Selecting where will firmware go
4242

43-
#include "quadspi.h"
44-
#include "w25q.h"
45-
#define FIRMWARE_FLASH_SIZE_LIMIT W25Q_CHIP_SIZE
46-
#define PACKET_SIZE W25Q_PAGE_SIZE //TODO: this time size is 256 and 64 byte package can fit in, Check in the future.
43+
// TODO: add support for external flash chip
44+
#define FIRMWARE_FLASH_SIZE_LIMIT (100000U)
45+
#define PACKET_SIZE 256U //TODO: this time size is 256 and 64 byte package can fit in, Check in the future.
4746

4847
#else
4948
#define FIRMWARE_FLASH_SIZE_LIMIT (FLASH_SIZE - 0x8000u) //!< Max available flash size for firmware. Flash bank size - FW start address
@@ -68,6 +67,10 @@
6867
#define RAM_FIRMWARE_ADDRESS (0x20020000UL) //!< RAM address where firmware will be written
6968
#define MAGIC_KEY_ADDRESS_FLASH (0x08020200UL) //!< Flash address in internal flash for communication between bootloader and firmware
7069
#define MAGIC_KEY_ADDRESS_RAM (0x20070000UL) //!< Flash address in ram for communication between bootloader and firmware
70+
#elif defined(STM32N6xx)
71+
#define FLASH_FIRMWARE_ADDRESS (0x08020000UL) //!< Flash address where firmware will be written
72+
#define FLASH_BOOTLOADER_ADDRESS (0x08000000UL) //!< Flash address where bootloader will be written
73+
#define RAM_FIRMWARE_ADDRESS (0x34000000UL) //!< RAM address where firmware will be written
7174
#else // UnitTest
7275
#define FLASH_FIRMWARE_ADDRESS (0x08020000UL) //!< Flash address where firmware will be written
7376
#define FLASH_BOOTLOADER_ADDRESS (0x08000000UL) //!< Flash address where bootloader will be written

Bootloader/Adapters/Src/flash_adapter.c

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,27 +53,33 @@ static uint32_t type_program = FLASH_TYPEPROGRAM_FLASHWORD;
5353
#define FLASH_WORD_SIZE (4U) //!< Flash word size in bytes
5454
#endif
5555

56+
#ifdef INTERNAL_FLASH
5657
HAL_StatusTypeDef ActivateProtection(FLASH_OBProgramInitTypeDef* ob_struct, uint32_t protect_address_start, uint32_t protect_address_end);
58+
#endif
5759

5860
#ifdef EXTERNAL_FLASH
5961
bool
6062
FlashAdapter_erase(uint32_t firmware_size, uint32_t flash_address) {
61-
return W25q_dynamicErase(firmware_size, flash_address);
63+
//return W25q_dynamicErase(firmware_size, flash_address);
64+
return true;
6265
}
6366

6467
bool
6568
FlashAdapter_blockErase(uint32_t address) {
66-
return W25q_blockErase64k(address);
69+
//return W25q_blockErase64k(address);
70+
return true;
6771
}
6872

6973
bool
7074
FlashAdapter_program(uint32_t address, uint8_t* buffer, uint32_t length) {
71-
return W25q_quadPageProgram(address, buffer, length);
75+
//return W25q_quadPageProgram(address, buffer, length);
76+
return true;
7277
}
7378

7479
bool
7580
FlashAdapter_readBytes(uint32_t address, uint8_t* buffer, uint32_t length) {
76-
return W25q_readBytes(address, buffer, length);
81+
//return W25q_readBytes(address, buffer, length);
82+
return true;
7783
}
7884

7985
bool

Bootloader/Adapters/Src/gpio_adapter.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ GpioAdapter_init(void) {
4545
__HAL_RCC_GPIOD_CLK_ENABLE();
4646
__HAL_RCC_GPIOE_CLK_ENABLE();
4747
__HAL_RCC_GPIOF_CLK_ENABLE();
48+
#if defined(STM32N657xx)
49+
__HAL_RCC_GPIOG_CLK_ENABLE();
50+
#endif
4851

4952
#if defined(LED1_Pin) && defined(LED1_Port) && defined(LED_OFF)
5053
HAL_GPIO_WritePin(LED1_Port, LED1_Pin, LED_OFF);

Bootloader/Adapters/Src/system_clock_adapter.c

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,5 +186,104 @@ SystemClock_Config(void) {
186186
Error_Handler();
187187
}
188188
}
189+
#elif defined(STM32N6xx)
190+
void
191+
SystemClock_Config(void) {
192+
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
193+
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
194+
195+
/** Configure the System Power Supply
196+
*/
197+
if (HAL_PWREx_ConfigSupply(PWR_EXTERNAL_SOURCE_SUPPLY) != HAL_OK) {
198+
Error_Handler();
199+
}
200+
201+
/* Enable HSI */
202+
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
203+
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
204+
RCC_OscInitStruct.HSIDiv = RCC_HSI_DIV1;
205+
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
206+
RCC_OscInitStruct.PLL1.PLLState = RCC_PLL_NONE;
207+
RCC_OscInitStruct.PLL2.PLLState = RCC_PLL_NONE;
208+
RCC_OscInitStruct.PLL3.PLLState = RCC_PLL_NONE;
209+
RCC_OscInitStruct.PLL4.PLLState = RCC_PLL_NONE;
210+
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
211+
Error_Handler();
212+
}
213+
214+
/* Wait HSE stabilization time before its selection as PLL source. */
215+
HAL_Delay(HSE_STARTUP_TIMEOUT);
216+
217+
/** Get current CPU/System buses clocks configuration and if necessary switch
218+
to intermediate HSI clock to ensure target clock can be set
219+
*/
220+
HAL_RCC_GetClockConfig(&RCC_ClkInitStruct);
221+
if ((RCC_ClkInitStruct.CPUCLKSource == RCC_CPUCLKSOURCE_IC1) ||
222+
(RCC_ClkInitStruct.SYSCLKSource == RCC_SYSCLKSOURCE_IC2_IC6_IC11)) {
223+
RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_CPUCLK | RCC_CLOCKTYPE_SYSCLK);
224+
RCC_ClkInitStruct.CPUCLKSource = RCC_CPUCLKSOURCE_HSI;
225+
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
226+
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct) != HAL_OK) {
227+
/* Initialization Error */
228+
Error_Handler();
229+
}
230+
}
231+
232+
/** Initializes the RCC Oscillators according to the specified parameters
233+
* in the RCC_OscInitTypeDef structure.
234+
*/
235+
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
236+
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
237+
RCC_OscInitStruct.PLL1.PLLState = RCC_PLL_ON;
238+
RCC_OscInitStruct.PLL1.PLLSource = RCC_PLLSOURCE_HSE;
239+
RCC_OscInitStruct.PLL1.PLLM = 1;
240+
RCC_OscInitStruct.PLL1.PLLN = 50;
241+
RCC_OscInitStruct.PLL1.PLLFractional = 0;
242+
RCC_OscInitStruct.PLL1.PLLP1 = 1;
243+
RCC_OscInitStruct.PLL1.PLLP2 = 1;
244+
RCC_OscInitStruct.PLL2.PLLState = RCC_PLL_NONE;
245+
RCC_OscInitStruct.PLL3.PLLState = RCC_PLL_NONE;
246+
RCC_OscInitStruct.PLL4.PLLState = RCC_PLL_NONE;
247+
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
248+
Error_Handler();
249+
}
250+
251+
/** Initializes the CPU, AHB and APB buses clocks
252+
*/
253+
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_CPUCLK | RCC_CLOCKTYPE_HCLK
254+
| RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1
255+
| RCC_CLOCKTYPE_PCLK2 | RCC_CLOCKTYPE_PCLK5
256+
| RCC_CLOCKTYPE_PCLK4;
257+
RCC_ClkInitStruct.CPUCLKSource = RCC_CPUCLKSOURCE_IC1;
258+
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_IC2_IC6_IC11;
259+
RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2;
260+
RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV1;
261+
RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV1;
262+
RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV1;
263+
RCC_ClkInitStruct.APB5CLKDivider = RCC_APB5_DIV1;
264+
RCC_ClkInitStruct.IC1Selection.ClockSelection = RCC_ICCLKSOURCE_PLL1;
265+
RCC_ClkInitStruct.IC1Selection.ClockDivider = 3;
266+
RCC_ClkInitStruct.IC2Selection.ClockSelection = RCC_ICCLKSOURCE_PLL1;
267+
RCC_ClkInitStruct.IC2Selection.ClockDivider = 6;
268+
RCC_ClkInitStruct.IC6Selection.ClockSelection = RCC_ICCLKSOURCE_PLL1;
269+
RCC_ClkInitStruct.IC6Selection.ClockDivider = 4;
270+
RCC_ClkInitStruct.IC11Selection.ClockSelection = RCC_ICCLKSOURCE_PLL1;
271+
RCC_ClkInitStruct.IC11Selection.ClockDivider = 3;
272+
273+
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct) != HAL_OK) {
274+
Error_Handler();
275+
}
276+
277+
__HAL_RCC_AXISRAM3_MEM_CLK_ENABLE();
278+
__HAL_RCC_AXISRAM4_MEM_CLK_ENABLE();
279+
__HAL_RCC_AXISRAM5_MEM_CLK_ENABLE();
280+
__HAL_RCC_AXISRAM6_MEM_CLK_ENABLE();
281+
__HAL_RCC_AHBSRAM1_MEM_CLK_ENABLE();
282+
__HAL_RCC_AHBSRAM2_MEM_CLK_ENABLE();
283+
__HAL_RCC_BKPSRAM_MEM_CLK_ENABLE();
284+
__HAL_RCC_FLEXRAM_MEM_CLK_ENABLE();
285+
__HAL_RCC_CACHEAXIRAM_MEM_CLK_ENABLE();
286+
__HAL_RCC_VENCRAM_MEM_CLK_ENABLE();
287+
}
189288
#endif
190289

Bootloader/Inc/board_info.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@
6565
#define PRODUCT_TYPE (const char*)("IMProject_demo-pixhawk4") // Maximum allowed size is 100 characters (101 bytes)
6666
#elif defined(STM32H735G_DK)
6767
#define PRODUCT_TYPE (const char*)("IMProject_demo-stm32h735g_dk") // Maximum allowed size is 100 characters (101 bytes)
68+
#elif defined(NUCLEO_N657X0_Q)
69+
#define PRODUCT_TYPE (const char*)("IMProject_demo-nucleo_n657x0_q") // Maximum allowed size is 100 characters (101 bytes)
6870
#else
6971
#define PRODUCT_TYPE (const char*)("Product_type_name-board_name") // Maximum allowed size is 100 characters (101 bytes)
7072
#endif

Bootloader/Inc/boards_config.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,19 @@
7272
#define LED_ON GPIO_PIN_RESET
7373
#define LED_OFF GPIO_PIN_SET
7474
#define PWR_SUPPLY PWR_DIRECT_SMPS_SUPPLY
75+
#elif defined(NUCLEO_N657X0_Q)
76+
#define LED1_Pin GPIO_PIN_8 //!< Pin defined for blue LED
77+
#define LED1_Port GPIOG
78+
#define LED2_Pin GPIO_PIN_10 //!< Pin defined for red LED
79+
#define LED2_Port GPIOG
80+
#define LED_ON GPIO_PIN_RESET
81+
#define LED_OFF GPIO_PIN_SET
82+
#define BL_BUTTON_Pin GPIO_PIN_13 //!< Button for entering in BL if pressed at boot time
83+
#define BL_BUTTON_Port GPIOC
84+
#define BL_BUTTON_ON GPIO_PIN_SET
85+
#define BL_BUTTON_OFF GPIO_PIN_RESET
86+
#define BL_BUTTON_PRESS_TIME 500u //!< Time in [ms] needed for button to be pressed to enter in BL
87+
#define PWR_SUPPLY PWR_DIRECT_SMPS_SUPPLY
7588
#else
7689
#define LED1_Pin GPIO_PIN_13
7790
#define LED1_Port GPIOC

Bootloader/Inc/main.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,9 @@ extern "C" {
5353
#elif defined(STM32F7xx)
5454
#include "stm32f7xx.h"
5555
#include "stm32f7xx_hal.h"
56+
#elif defined(STM32N657xx)
57+
#include "stm32n6xx.h"
58+
#include "stm32n6xx_hal.h"
5659
#endif
5760

5861
void Error_Handler(void);

0 commit comments

Comments
 (0)