플래시 메모리에 구워서 실행할 때, 주의해야 할 점을 적어놓았다.
당면한 문제는 이랬다. 기존의 SD 보드에서는 HEX 파일을 플래시에 구워서 제대로 부팅이 되었지만, HD 보드에서는 얘기가 달랐다.
초기의 TBX 까지의 초기화 과정정도 만이 성공적으로 수행 되었을 뿐, 그 뒤에 실제로 영상을 보여주지는 못했다. UART 를 통해서 디버깅을 한 결과, HD 보드에서 새로 붙은 7020 EMI 를 엑세스 하는 루틴에서 프로세스가 죽는 것을 발견했다.
CPU 에서 7020 의 존재에 대해서 모르는 것 같다는 생각이 들었다. 아니나 다를까.. HEX 파일을 만들 때, 참조하는 initfunc() 함수에 답이 있었다.
직접 이 함수에는 EMI 의 세팅을 해주는 루틴이 있었다. 이 곳의 세팅을 현재 DCU 로 실행할 때의 mb382_emi.cfg 파일의 7020 세팅과 같이 해주고는, HEX 파일을 만들고 플래시에 구웠더니, 잘 동작하였다.
void EMIpokes5514(void) { volatile int config_E_val; #ifdef M58LW032 /* ## Reconfigure bank 3 top address (0x70000000-0x7f7 */ /* ## Reconfigure bank 4 top address (0x7f800000-0x7fbfffff) */ STSYS_WriteRegDev32(0x202ff830,0xfd); STSYS_WriteRegDev32(0x202ff830,0xFD); STSYS_WriteRegDev32(0x202ff840,0xFE); #endif /* ## Bank 0 ## configured for 32Mb sdram (non-subdecoded) */ /* ## ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /* ## Parameters:-strobeonfalling 0 -busreleasetime 3 -subbanks 1 -subbanksize 256 -shiftamount 9 -portsize 16 */ /* ## -rasbits 0x1fffc -prechargetime 3 -modesetdelay 3 -refreshtime 9 -activatetoread 3 */ /* ## -activatetowrite 3 -caslatency 3 -drambanks 1 -writerecoverytime 2 -sdrammodereg 0x32 */ /* ## -latencymode 3 -bursttype 0 -burstlength 2 */ /* ## ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ STSYS_WriteRegDev32(0x20200100,0x00004352); STSYS_WriteRegDev32(0x20200108,0x000FFFFC); STSYS_WriteRegDev32(0x20200110,0x00000020); STSYS_WriteRegDev32(0x20200118,0x0001092a); /* Bank 1 ## STEM0. Configured as 16-bit peripheral */ /* ## Original STEM config edited out by MGB 9/4/02 */ STSYS_WriteRegDev32(0x20200140,0x002006f1); STSYS_WriteRegDev32(0x20200148,0x1f200044); STSYS_WriteRegDev32(0x20200150,0x1f220000); STSYS_WriteRegDev32(0x20200158,0x0000000a); /* ## Bank 2 - STEM1 Configured as 16-bit peripheral */ STSYS_WriteRegDev32(0x20200180,0x001116f1); STSYS_WriteRegDev32(0x20200188,0x06210000); STSYS_WriteRegDev32(0x20200190,0x06210000); STSYS_WriteRegDev32(0x20200198,0x0000000a); /* ## !!! Note - Commented out. These are extra safe slow timings for debug only !!! */ /* ## Bank 3 - ATAPI/DVB-CI. Configured as 16-bit peripheral */ /* ## Amended by AL 30/4/02 for ATA Register mode 0 timings */ /* STSYS_WriteRegDev32(0x202001c0,0x010f8791); */ /* STSYS_WriteRegDev32(0x202001c8,0xbe028f21); */ /* STSYS_WriteRegDev32(0x202001d0,0xbe028f22); */ /* STSYS_WriteRegDev32(0x202001d8,0x0000000a); */ /* ## !!! Note - These are faster timings to support up to PIO mode 4. !!! */ /* ## Bank 3 - ATAPI/DVB-CI. Configured as 16-bit peripheral */ /* ## Amended by AL 17/5/02 for ATA PIO mode 4 timings */ STSYS_WriteRegDev32(0x202001c0,0x00360791); STSYS_WriteRegDev32(0x202001c8,0x10028722); STSYS_WriteRegDev32(0x202001d0,0x10028722); STSYS_WriteRegDev32(0x202001d8,0x0000000a); /* ## Bank 4 - Configured as 16-bit flash normal */ STSYS_WriteRegDev32(0x20200200,0x00000e91); STSYS_WriteRegDev32(0x20200208,0x10004000); STSYS_WriteRegDev32(0x20200210,0x10220000); STSYS_WriteRegDev32(0x20200218,0x00000040); /* ## Bank 5 - Configured as 16-bit flash normal */ STSYS_WriteRegDev32(0x20200240,0x00000e91); STSYS_WriteRegDev32(0x20200248,0x10004000); STSYS_WriteRegDev32(0x20200250,0x10220000); STSYS_WriteRegDev32(0x20200258,0x00000040); /* PS:24/06/03 Old Bank 5 version taken out */ /* STSYS_WriteRegDev32(0x20200240,0x001016f1); */ /* STSYS_WriteRegDev32(0x20200248,0x9d200000); */ /* STSYS_WriteRegDev32(0x20200250,0x9d220000); */ /* STSYS_WriteRegDev32(0x20200258,0x00000000); */ /* ## EMI4.LOCK */ STSYS_WriteRegDev32(0x20200020,0x00000000); /* Set bit 17 of GenConfig E for dvb logic enable. Use RmW type operation. */ /* Set Bank 5 subbank size to 64Mbit */ config_E_val = STSYS_ReadRegDev32(0x20010028); config_E_val |= EMI_CONFIG_VAL; STSYS_WriteRegDev32(0x20010028, config_E_val); STSYS_WriteRegDev32(0x20200028,0x000007c1); STSYS_WriteRegDev32(0x20200038,0x00320032); STSYS_WriteRegDev32(0x20200048,0x00000fff); STSYS_WriteRegDev32(0x20200050,0x00000000); STSYS_WriteRegDev32(0x20200058,0x00000000); STSYS_WriteRegDev32(0x20200060,0x00000000); STSYS_WriteRegDev32(0x20200068,0x00000001); /* ## EMI4.SDRAMINIT */ STSYS_WriteRegDev32(0x20200040,0x00000001); }
마치며
지금 생각해 보면, POD 또한 기존의 EMI 설정에서 변화가 있었다. 하지만, 그동안 나는 플래시로 구워서 테스트를 해보지 않았기 때문에 이런 사실을 알 수 없었다.
앞으로 기존의 EMI 세팅을 수정해야 한다면, 반드시 initfunc() 함수를 수정해주어야 한다!!!