기존의 타겟보드에는 2M 용량의 플래시 메모리가 붙어 있었다. 하지만 이번에 HD 를 개발하면서, 2M 용량 제한 때문에, 결국 8M 용량의 플래시 메모리를 사용하게 되었다.
나는 처음에 대수롭게 생각하지 않고는,
- 대상 HEX 파일(=arena.hex) : 시작 주소(0x7FE00000)
- 설정 파일(=mb382_um.cfg) : 플래시 영역(0x7FE00000 에서 2M)
- FLASH_BURNER : mb282.h(플래시 뱅크주소 → 0x7FE00000)
이런 상태에서 플래시에 구웠다. 지금 기억에는 오류없이 R/W 가 되었다. 하지만 문제는 플래시 부팅이 안되는 것이었다.
어떤 보드는 Write 과정에서 에러가 발생했다. 뭔가 문제가 있는 듯 해서, 8M 플래시 메모리의 데이터 시트를 봤다. 2M 플래시보다 훨씬 많은 135 Block 로 구성되어 있었다. 그래서 기존의 2M 플래시에 맞춰져 있던 FLASH_BURNER 프로그램을 아래와 같이 수정했다.
#define NUM_BLOCKS 135 // 총 블럭수 정의 STFLASH_Block_t BlockData_s[NUM_BLOCKS] = // 총 135 개의 블럭, 각 블럭당 용량과 위치는 데이터시트를 참조 { { 0x00010000, STFLASH_MAIN_BLOCK },/* 0 */ { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, /* 120 */ { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK }, { 0x00010000, STFLASH_MAIN_BLOCK },/*126*/ { 0x00002000, STFLASH_PARAMETER_BLOCK },/*8k*/ { 0x00002000, STFLASH_PARAMETER_BLOCK },/*8k*/ { 0x00002000, STFLASH_PARAMETER_BLOCK },/*8k*/ { 0x00002000, STFLASH_PARAMETER_BLOCK },/*8k*/ { 0x00002000, STFLASH_PARAMETER_BLOCK },/*8k*/ { 0x00002000, STFLASH_PARAMETER_BLOCK },/*8k*/ { 0x00002000, STFLASH_PARAMETER_BLOCK },/*8k*/ { 0x00002000, STFLASH_BOOT_BLOCK } }; /* 16k */ /*34*/
정확히 135 블럭이다. 또한 TOP 방식이기 때문에 데이터시트를 참조해서 설정했다. 그리고 나서,
- 설정 파일(=mb382_um.cfg) : 플래시 영역(0x7F800000 에서 8M)
- FLASH_BURNER : mb282.h(플래시 뱅크주소 → 0x7F800000)
수정했다. 그리고는 마지막으로
#gmake clean #gmake #gmake run
플래시에 구웠다. 결과는 예상대로 잘 동작하였다.