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