호스트 쪽에서 hex 파일을 전송해주는 시리얼 통신을 위한 프로그램을 분석한 내용으로 만들어졌다.
현재 개발환경이 windows 기반이기 때문에 기본적으로 제공되는 하이퍼 터미널이나 여타 다른 시리얼 통신프로그램들을 사용해봤다. 하지만 타겟보드 쪽에서 buffer 용량 제한으로 일정 용량보다 많은 데이터를 보내게 되면, 중간에 데이터가 깨지는 문제가 발생했다.
앞에서 얘기한 시리얼 프로그램의 경우에는 파일을 한번에 연속해서 보내기 때문에, 타겟보드의 문제를 피해갈 수 없었다. 결국 내가 작업에 필요한 시리얼 프로그램을 만들기로 생각했다.
내가 생각한 시리얼 프로그램은 다음과 같다.
- flash 의 r/w 단위인 블럭단위로 전송하게 한다
- 하나의 블럭마다 마지막에 특정 문자를 넣어서 제대로 전송이 되었는지 여부를 판단할 수 있게 한다
여기서는 Visual C++ 로 만든 시리얼 프로그램을 사용할 것이다.
임시 해결책
시간의 압박으로 인하여, 예전에 쓰던 프로그램을 그대로 사용하기로 했다. 사실 내가 C++ 모른다는 점이 가장 크게 작용하긴 했지만..-_-;
하지만, 이 프로그램 역시 완벽히 동작하지는 않았다. 몇가지 문제가 있었다.
'가장 마지막 블럭의 데이터와 부트 블럭의 데이터가 같이 붙어서 전송되는 문제' |
기존의 hex 파일의 경우, write 할 주소와 데이터 값의 형태로 존재한다. 결론적으로 flash write 함수를 써서, 정해진 주소에 정확한 데이터를 쓰는 것이 관건이다. 다행히 예전에 사용하던 프로그램은 이런 사항들이 해결되어 있었다.
하지만, 아무리 테스트를 해봐도 가장 마지막의 부트 블럭은 전송되지 않았다. 확인해본 결과, 시리얼 프로그램에서 마지막 블럭의 데이터 값과 부트 블럭의 데이터 값이 붙어서 나온다는 것을 알 수 있었다.
결국 마지막 데이터 블럭이 전송되어지는 것에서 부트 블럭을 추출해내는 방법 밖에는 없어 보였다.
이 문제를 해결하고 나니, 내 생각대로 동작하였다.
남겨진 문제
내가 사용한 시리얼 프로그램은 이래저래 부족한 점이 많다. 우선 기능적인 면도 그렇지만, 안정성 면에서도 부족하다.
차후에는 호스트와 타겟보드 간에 데이터 통신 뿐만 아니라, 직접 키보드를 이용한 통신이 필요할 것이다. 그래서 둘 간에 통신 메세지를 자세히 볼 수 있도록 해야 할 것이다.