NUCLEO L432KC

STM32 L432KC 부트로더 개발하기(1)

jisungjay 2023. 5. 29. 20:36

부트로더 개발을 위해 몇가지 기능들을 먼저 테스트 하고자 한다.

 

1. Flash Erase

2. Flash Write

3.UART Tx,Rx

정도...

 

우선 Flash 특정 영역을 지우기 위해, 현재 전체 Flash 사용중인 것을 수정해 본다.

STM32L432KCUX_FLASH.ld 파일의 Flash 영역 Length를 120K로 수정하였다.

 

 

 

main 코드에는 다음과 같은 코드를 작성하였다.

 

  /* USER CODE BEGIN 2 */
HAL_FLASH_Unlock();
EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES;
EraseInitStruct.Page = 95; //0x0802F800
EraseInitStruct.Banks= FLASH_BANK_1;
EraseInitStruct.NbPages = 1;
if (HAL_FLASHEx_Erase(&EraseInitStruct, &SECTORError) != HAL_OK) {
}

 

uint64_t data[2] = {0xaaaaaaaabbbbbbbb,0xccccccccdddddddd};
if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, ADDR_FLASH_PAGE_95, data[0]) == HAL_OK){
} else {

while (1) ;
}
   HAL_FLASH_Lock();
  /* USER CODE END 2 */

 

Erase 기능 확인하는데서 조금 오래 디버깅을 하게 되었는데, EraseInitStruct.Page = 95; //0x0802F800 에서 page 번호가 아닌 Flash 주소를 기입하는 바람에 계속 오류가 났던 것이다. 해당 구조체의 멤버가 pageaddress 로 되어있는 MCU의 경우에는 flash 주소를 적는게 맞지만,  L432KC 의 경우에는 page 번호를 넣어줘야 한다.

 

HAL_FLASH_PROGRAM을 통해 flash 영역에 데이터가 들어간 것을 확인할 수 있었다. 64bit 기준으로 program 되는것이 특징인것 같다.

 

 

 

 

[main.c 작성 내용]

추가 내용: PAGE 관련

page는 256Kbyte Flash 기준 128개 존재한다. (1개 page당 2Kbyte)

 

Page address
0 0x08000000
1 0x08000800
2 0x08001000
3 0x08001800
4 0x08002000
5 0x08002800
6 0x08003000
7 0x08003800
8 0x08004000
9 0x08004800
10 0x08005000
11 0x08005800
12 0x08006000
13 0x08006800
14 0x08007000
15 0x08007800
16 0x08008000
17 0x08008800
18 0x08009000
19 0x08009800
20 0x0800A000
21 0x0800A800
22 0x0800B000
23 0x0800B800
24 0x0800C000
25 0x0800C800
26 0x0800D000
27 0x0800D800
28 0x0800E000
29 0x0800E800
30 0x0800F000
31 0x0800F800
32 0x08010000
33 0x08010800
34 0x08011000
35 0x08011800
36 0x08012000
37 0x08012800
38 0x08013000
39 0x08013800
40 0x08014000
41 0x08014800
42 0x08015000
43 0x08015800
44 0x08016000
45 0x08016800
46 0x08017000
47 0x08017800
48 0x08018000
49 0x08018800
50 0x08019000
51 0x08019800
52 0x0801A000
53 0x0801A800
54 0x0801B000
55 0x0801B800
56 0x0801C000
57 0x0801C800
58 0x0801D000
59 0x0801D800
60 0x0801E000
61 0x0801E800
62 0x0801F000
63 0x0801F800
64 0x08020000
65 0x08020800
66 0x08021000
67 0x08021800
68 0x08022000
69 0x08022800
70 0x08023000
71 0x08023800
72 0x08024000
73 0x08024800
74 0x08025000
75 0x08025800
76 0x08026000
77 0x08026800
78 0x08027000
79 0x08027800
80 0x08028000
81 0x08028800
82 0x08029000
83 0x08029800
84 0x0802A000
85 0x0802A800
86 0x0802B000
87 0x0802B800
88 0x0802C000
89 0x0802C800
90 0x0802D000
91 0x0802D800
92 0x0802E000
93 0x0802E800
94 0x0802F000
95 0x0802F800
96 0x08030000
97 0x08030800
98 0x08031000
99 0x08031800
100 0x08032000
101 0x08032800
102 0x08033000
103 0x08033800
104 0x08034000
105 0x08034800
106 0x08035000
107 0x08035800
108 0x08036000
109 0x08036800
110 0x08037000
111 0x08037800
112 0x08038000
113 0x08038800
114 0x08039000
115 0x08039800
116 0x0803A000
117 0x0803A800
118 0x0803B000
119 0x0803B800
120 0x0803C000
121 0x0803C800
122 0x0803D000
123 0x0803D800
124 0x0803E000
125 0x0803E800
126 0x0803F000
127 0x0803F800