Flash 의 전반적인 동작과 그에 따른 부가적인 내가 이해한 내용을 바탕으로 만들었다. 언제까지나 나의 생각, 내가 이해한 것이 잘못될 수도 있다.
하지만, 실험을 통해 입증된 것이니 만큼 50% 혹은, 80%이상은 맞다고 본다.
Flash 란
정확히 말해서 Flash Memory 다. 우리가 흔히 메모리라고 하면, 램(RAM)을 생각한다. 프로그램이 수행되기 위해서는 반드시 메모리상에 올라가야 한다. 플래시 메모리는 기존의 램과 롬의 장점을 합친 메모리다.
자유롭게 읽고 쓸 수 있다. 내가 알기로 백만번 정도 읽고 쓸 수 있다고 들었다. 속도나 다른 면에서 요즘 가장 많이 쓰이는 메모리라고 할 수 있다.
어디에 쓰이나?
그럼 우리가 개발하는 셋탑에서 플래시는 하드 디스크와 같은 존재이다. 컴퓨터를 켰을 때, 누가 실행하지도 않았는데, 하드웨어가 초기화 되고, 자동으로 OS가 부팅이 된다.
이와 역할이 비슷하다고 보면 된다.
셋탑의 전원을 넣었을 때, 케이블로 부터 오는 스트림을 받아서 튜너에서 재 가공한 뒤에 화면에 영상을 뿌려줘야 한다. 이것은 누가 해주는 것이 아니고, 바로 플래시에 들어 있는 메인 프로그램이 전원을 넣음과 동시에 시작되어서, 처리해주는 것이다. 결국, 플래시에 메인 프로그램을 일정 형태의 이미지(hex) 형태로 만들어서 write 해야 한다.
마치 리눅스의 커널 이미지와 같다고 보면 된다.
가장 중요한 기능은 부팅이라고 할 수 있다.
읽기와 쓰기
플래시는 크게 3가지 연산을 한다. 쓰기와 읽기 그리고 지우기이다. 이것만 제대로 이해한다면, 플래시는 거의 끝났다고 봐도 될 것이다. 특이할 점이라면, 플래시는 write 할 때, 반드시 지워야 한다. 그리고 한 블럭씩(byte) 쓸 수 있는 데, 반드시 하나의 전체 블럭을 지워야 만 한다. 읽을 때도 마찬가지로 한 블럭씩 읽는다.
직접 써보기
우선 hex 파일을 만들어야 한다. testapp1 으로 hex 파일을 만들 수 있다.
#gmake flashapp1.hex
만일 mb382_um.cfg 의 설정에 따라서 hex 파일의 첫 주소가 결정된다. 앞의 문서에서 언급한 바 있다. 여기서는 0x7fe00000 로 하자!
이제 만든 hex 파일로 직접 써보자!! flash_burner 로 말이다.
잠깐, 쓰기 전에 flash_burner 프로그램에서 주소가 0x7fe00000 로 되어있는 지 확인해야 한다. 그렇지 않으면 지우는 과정에서 에러가 날 것이다.
5517ref/include/Mb382.h 파일에서
#define FLASH_BANK_0_BASE_ADDRESS 0x7Fe00000
위와 같이 되어 있는 지 확인한다. 그러니까, hex 파일의 주소와 동일해야 한다. 이제 쓰기 위한 준비는 끝났다. 직접 써보자!!
지우고(Erase), 쓰고(Program), 검증(Verified) 작업이 모두 성공했다면, 제대로 써진 거다.
이제 제대로 써졌는지 타겟 보드와 SMPS를 껏다가 켜보자!!