이전에 만들어 두었던 CLI 펌웨어에 IAP 기능을 추가해보았다.
보통은 ST-Link 디버거를 통해 코드를 보드에 다운받는데,
이 기능을 추가 하면서 디버거 없이, USART 통신만을 이용해 코드 다운이 가능하다.
게다가 Nucleo-f429ZI는 전원 USB케이블을 연결하면 Virtual Comport를 제공해준다.
따라서 별도의 Serial 선 없이 가능하다. 참고로 이 보드에서는 USART3으로 제공한다.)
md 0x08000000 126 명령을 이용해 Flash memory 영역을 읽어온다.
0x08000000 부터 0x0801FFFF 까지의 영역을 BootLoader, 즉 이 CLI 프로그램에게 할당해주었다.
Flash memory 0x08020000 영역부터는 사용자 Application이 올라가는 영역이다.
최초에 확인해보니 초기화가 되어있는 것을 확인했다.
download 명령어 입력하고, Teraterm의 File -> Transfer -> YModem -> Send에서
미리 STM32CubeIDE에서 추출해둔 .bin파일을 선택한다.
가만히 기다리면 된다. 성공하면 성공한다고 결과가 출력된다.
다운로드 후 0x08020000 부분을 출력해보면 무언가 write 되었다.
마지막으로 run 명령을 실행 하게 되면 다운받았던 .bin 파일의 동작이 실행된다.
위 사진처럼 Convert to binary file에 체크해야 한다.
사용자 Application을 만들 때 주의할 사항은
프로젝트에 xxxFLASH.ld 파일이 존재 할텐데 시작주소와 크기를 변경해주어야 한다.
system_stm32f4xx.c 파일에 들어가 94번 줄이 주석처리 되어 있는 경우가 있다.
주석 처리를 해제한 뒤 Vector offset을 변경해주어야 한다.
지금 같은 경우는 FLASH 메모리 시작주소가 0x08000000이고 사용자 APPLICATION은 0x08020000에 위치하길 원한다.
따라서 차이가 0x20000만큼 난다.