플래시 메모리에 구워서 실행할 때, 주의해야 할 점을 적어놓았다.
당면한 문제는 이랬다. 기존의 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() 함수를 수정해주어야 한다!!!