왜 듀얼 부팅이 필요한가?
두가지 경우에 필요하다. 참고로 이것은 듀얼 부팅을 설명을 한 문서이다.
- 펌웨어 업그레이드를 할 때
- 플래시로 부팅할 때
앞에서 stburner 를 사용해서, 플래시에 구워서 부팅도 해봤다. 나중에 제품을 양산하게 될때는 DCU 없이 플래시만으로 부팅해야 한다. 플래시의 동작 방식을 그림으로 나타냈다.
hex 파일을 만들어서 보면, 가장 위에 가장 낮은 주소가 지정된다. 그 주소대로 플래시가 써지기 때문이다. hex 파일의 가장 밑 부분을 보면, 0x7fffffe4 번지가 지정되어 있다. 여기서 부터 플래시의 마지막인 0x7fffffff 까지 27 byte 의 공간이 있다. 그것이 바로 위 그림에서의 boot data 영역이다.
이곳에는 하드웨어를 초기화 시켜주는 프로그램이 들어있으면, 가장 먼저 실행되는 주소번지이다.
이 프로그램이 다 실행되고 나면, 가장 윗 번지인 0x7fe00000 로 점프하게 된다. 그 때 부터 main 프로그램이 실행되는 것이다.
바로 이점을 염두해두자!!
자~ 그럼 처음에 얘기한 두가지 경우를 설명하겠다.
펌웨어 업그레이드를 할때는, 나중에 DACS1000 프로그램을 플래시에 구워야 한다.
알아 보아야 할 것들
일반적인 hex 파일의 경우, 부트 코드가 0x7fffffe4 로 잡혀있고, 프로그램의 가장 첫 번지가 0x7fe00000 으로 잡혀있다. 이 상태에서는 제대로 동작한다. 문제는 부트 코드의 주소를 바꾸거나, 프로그램의 첫 번지를 바꾸었을 때, 제대로 동작하는 지 여부다.
플래시 정리
그 동안, 듀얼부팅을 위해 몇가지 시도를 했다. testapplication 에 있던 callprog() 함수를 이용해서 flash 에 write 했지만, 실패했다.
ST 로 부터 받은 프로그램 역시 마찬가지다. 어찌되었던 간에, 부트로더 프로그램이 uart 까지는 open 을 시켜야만 flash 로부터의 부팅메세지를 확인할 수 있다.
그리고 나서, 어떤 특정 영역의 주소로 옮기기위한 jump 를 시도했다. 역시 마찬가지로 실패했다.
가장 곤란한 점은, 어디서 어떻게 잘못되었는지 확인할 길이 없다는 것이다. DCU 로 부팅한다면, 확인할 수 있겠지만 여기서는 얘기가 틀리다.