도와주세요!!
글 수 15,339
2004.06.10 07:17:53 (*.142.88.93)
6666
제가 밑에 적은 글에서 개구리님께서 답글을 적어주셔서 확인을 해보았습니다.
개구리 wrote..
: CS8900을 두개 다실때 다음을 점검해 보세요
:
: nCS3 ,nCS4 타이밍 설정 관련된 메모리 컨트롤러 설정 사항
: CS8900 의 초기화를 위한 LHE 핀 처리 문제
: CS8900의 주소는 0x0300을 더한 위치에서 시작하는 문제
:
: 이 부분을 모두 검토하시기 바랍니다
1. nCS3, nCS4등의 타이밍설정은 이지부트2.2의 기본설정을 그대로 사용하였습
니다. nCS4에 달린 칩은 제대로 인식을 하고있고요, nCS2와 nCS3가 타이밍이
같기때문에 nCS2에는 이지보드 기존의 CS8900이 달려있는데 잘 동작하고 있습
니다. 그런데 제가 추가한 것중의 하나인 nCS3는 제대로 인식이 안됩니다. ㅜ.
ㅡ
2. 제가 첨부한 소스코드에서도 0x0300을 더한 위치에서 CS8900의 주소가 시작
되게 수정되어 있습니다. 즉 nCS3,nCS4에 달린 칩모두 동작코드등은 동일하
고, 주소부분등만 수정되었는데, nCS3에 붙은것만 동작이 제대로 안됩니다.
3. CS8900의 칩 처리는 이지보드의 책자에 첨부된 CS8900의 책잘를 보고 nCS
와 GPIO만을 수정한것이라서 제대로 동작할것이라 생각되는데 nCS3만 동작이
안됩니다. (nCS4는 동작이 잘됩니다.)
4. 제가 수정한 사항들입니다.
1. ezboot/include/config.h
struct SConfig에서 다음 두줄을 추가한다.
Byte Local_MacAddress1[8]; // 보드 MAC Address
[xx:xx:xx:xx:xx:xx] default { 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF }
Byte Local_MacAddress2[8]; // 보드 MAC Address
[xx:xx:xx:xx:xx:xx] default { 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF }
2. ezboot/main/config.c
TConfig Cfg 에 다음 두줄을 추가한다.
Local_MacAddress1 : {0x01, 0xD2, 0xCA,
0xF1, 0x26, 0x25 }, // 보드 MAC Address1
[xx:xx:xx:xx:xx:xx]
Local_MacAddress2 : {0x03, 0xD4, 0xCA,
0xF1, 0x26, 0x25 }, // 보드 MAC Address2
[xx:xx:xx:xx:xx:xx]
char *CfgItemStr[] =
{
" 1. MAC Address [%02x:%02x:%02x:%02x:%02x:%02x]
",
" 2. LOCAL IP [%d.%d.%d.%d]
" ,
" 3. HOST IP [%d.%d.%d.%d]
" ,
" 4. Host tftp directory [%s]
" ,
" 5. zImage file name [%s]
" ,
" 6. ram disk file name [%s]
" ,
" 7. boot loader file name [%s]
" ,
" 8. zImage address on flash [0x%08x]
" ,
" 9. ramdisk address on flash [0x%08x]
" ,
" A. zImage address on memory [0x%08x]
" ,
" B. ramdisk address on memory [0x%08x]
" ,
" C. Autoboot wait time [%d]
" ,
" D. Boot Menu Key [%c]
" ,
" E. Kernel Command Line [%s]
" ,
" F. Architecture Number [%d]
" ,
" G. RAM Disk Size MBytes [%d]
" ,
" H. MAC Address1 [%02x:%02x:%02x:%02x:%
02x:%02x]
",
" I. MAC Address2 [%02x:%02x:%02x:%02x:%
02x:%02x]
",
" P.
Apply
" ,
" S.
Save
" ,
" 0.
Exit
" ,
};
while (1)
{
printf( "
" );
printf( CfgItemStr[ 0], SvCfg.Local_MacAddress[0],
SvCfg.Local_MacAddress[1], SvCfg.Local_MacAddress[2],
SvCfg.Local_MacAddress[3], SvCfg.Local_MacAddress[4],
SvCfg.Local_MacAddress[5] );
printf( CfgItemStr[ 1], (SvCfg.Local_IP>>0)&0xff,
(SvCfg.Local_IP>>8)&0xff, (SvCfg.Local_IP>>16)&0xff, (SvCfg.Local_IP>>24)
&0xff );
printf( CfgItemStr[ 2], (SvCfg.Host_IP >>0)&0xff,
(SvCfg.Host_IP >>8)&0xff, (SvCfg.Host_IP >>16)&0xff, (SvCfg.Host_IP >>24)
&0xff );
printf( CfgItemStr[ 3], SvCfg.TFTP_Directory );
printf( CfgItemStr[ 4], SvCfg.TFTP_zImageFileName );
printf( CfgItemStr[ 5], SvCfg.TFTP_RamDiskFileName );
printf( CfgItemStr[ 6], SvCfg.TFTP_LoaderFileName );
printf( CfgItemStr[ 7], SvCfg.FlashStart_Kernel );
printf( CfgItemStr[ 8], SvCfg.FlashStart_RamDisk );
printf( CfgItemStr[ 9], SvCfg.RamStart_Kernel );
printf( CfgItemStr[10], SvCfg.RamStart_RamDisk );
printf( CfgItemStr[11], SvCfg.AutoBootWaitTime );
printf( CfgItemStr[12], SvCfg.EntryBootLoaderKey );
printf( CfgItemStr[13], SvCfg.Kernel_CmdLine );
printf( CfgItemStr[14], SvCfg.Kernel_ArchNumber );
printf( CfgItemStr[15], SvCfg.Kernel_RamDiskSize >> 20 );
printf( CfgItemStr[16],
SvCfg.Local_MacAddress1[0], SvCfg.Local_MacAddress1[1],
SvCfg.Local_MacAddress1[2], SvCfg.Local_MacAddress1[3],
SvCfg.Local_MacAddress1[4], SvCfg.Local_MacAddress1[5] );
printf( CfgItemStr[17], SvCfg.Local_MacAddress2[0],
SvCfg.Local_MacAddress2[1], SvCfg.Local_MacAddress2[2],
SvCfg.Local_MacAddress2[3], SvCfg.Local_MacAddress2[4],
SvCfg.Local_MacAddress2[5] );
printf( "
" );
printf( CfgItemStr[18] );
printf( CfgItemStr[19] );
printf( CfgItemStr[20] );
switch ( rbuff[0] )
{
case '1' : GetMacAddress( CfgItemStr[0], (Byte *)&
(SvCfg.Local_MacAddress) ); break;
case '2' : GetIPAddress ( CfgItemStr[1], &
(SvCfg.Local_IP) ); break;
case '3' : GetIPAddress ( CfgItemStr[2], &
(SvCfg.Host_IP ) ); break;
case '4' : GetFileName ( CfgItemStr[3],
SvCfg.TFTP_Directory ); break;
case '5' : GetFileName ( CfgItemStr[4],
SvCfg.TFTP_zImageFileName ); break;
case '6' : GetFileName ( CfgItemStr[5],
SvCfg.TFTP_RamDiskFileName ); break;
case '7' : GetFileName ( CfgItemStr[6],
SvCfg.TFTP_LoaderFileName ); break;
case '8' : GetAddress ( CfgItemStr[ 7], &
(SvCfg.FlashStart_Kernel ) ); break;
case '9' : GetAddress ( CfgItemStr[ 8], &
(SvCfg.FlashStart_RamDisk) ); break;
case 'A' : case 'a' : GetAddress ( CfgItemStr[ 9], &
(SvCfg.RamStart_Kernel ) ); break;
case 'B' : case 'b' : GetAddress ( CfgItemStr[10], &
(SvCfg.RamStart_RamDisk ) ); break;
case 'C' : case 'c' : GetWaitTime( CfgItemStr[11], &
(SvCfg.AutoBootWaitTime ) ); break;
case 'D' : case 'd' : GetMenuKey ( CfgItemStr[12], &
(SvCfg.EntryBootLoaderKey) ); break;
case 'H' : case 'h' : GetMacAddress
( CfgItemStr[16], (Byte *)&(SvCfg.Local_MacAddress1) ); break;
case 'I' : case 'i' : GetMacAddress
( CfgItemStr[17], (Byte *)&(SvCfg.Local_MacAddress2) ); break;
case 'P' : case 'p' : // 적용한다.
memcpy( &Cfg, &SvCfg, sizeof(TConfig) );
printf( "
...Applyed" );
break;
case 'S' : case 's' : // 저장한다.
memcpy( &Cfg, &SvCfg, sizeof(TConfig) );
printf( "
" );
SaveConfig();
printf( "
...Saved" );
break;
case '0' : printf( "
" );
return 0; // exit
}
3. /ezboot/include/cs8900.h
//확장된 cs8900칩을 위해서 eth1
#define CS8900_BASE1 0x18000300 // 0x08000300
#define CS8900_RTX_DATA1 *((volatile short *)(CS8900_BASE1 +
0x00000000)) // RTx data.
#define CS8900_TXCMD1 *((volatile short *)(CS8900_BASE1 +
0x00000004)) // RTx command.
#define CS8900_TXLEN1 *((volatile short *)(CS8900_BASE1 +
0x00000006)) // transmit length.
#define CS8900_ISQ1 *((volatile short *)(CS8900_BASE1 +
0x00000008)) // interrupt.
#define CS8900_PPPTR1 *((volatile short *)(CS8900_BASE1 +
0x0000000a)) // packet page point.
#define CS8900_PPDATA1 *((volatile short *)(CS8900_BASE1 +
0x0000000c)) // packet page data.
//확장된 cs8900칩을 위해서 eth2
#define CS8900_BASE2 0x40000300 // 0x08000300
#define CS8900_RTX_DATA2 *((volatile short *)(CS8900_BASE2 +
0x00000000)) // RTx data.
#define CS8900_TXCMD2 *((volatile short *)(CS8900_BASE2 +
0x00000004)) // RTx command.
#define CS8900_TXLEN2 *((volatile short *)(CS8900_BASE2 +
0x00000006)) // transmit length.
#define CS8900_ISQ2 *((volatile short *)(CS8900_BASE2 +
0x00000008)) // interrupt.
#define CS8900_PPPTR2 *((volatile short *)(CS8900_BASE2 +
0x0000000a)) // packet page point.
#define CS8900_PPDATA2 *((volatile short *)(CS8900_BASE2 +
0x0000000c)) // packet page data.
4. /ezboot/main/cs8900.c
코드 길이가 많아서 위에서 제가 첨부한 코드를 봐주세요.
5. /ezboot/main/main.c
추가 코드
// CS8900을 초기화 한다.
CS8900_Init();
// CS8900 extend1를 초기화 한다.
CS8900_Init1();
// CS8900 extend2를 초기화 한다.
CS8900_Init2();
이렇게 수정하였습니다.
실제로 제대로 값이 나오지 않는 부분은 제가 수정해준 파일인
/ezboot/main/cs8900에서 추가한 부분인 BOOL CS8900_Init1( void )함수에서
DectectID = CS8900_PPPTR1;부분이 값이 제대로 들어가지가 않습니다.
다른 메모리 주소들은 모두 정확히 들어가는데 여기에서는 이상하게 잘 들어가
지 않네요.
제가 써준 코드들은 메모리 주소부분 말고는 nCS3와 nCS4가 모두 동일한데
nCS3만 동작을 안하니 정말 답답합니다. 고수님들 제가 하면서 뭐가 틀린것같
은지 혹은 의심가시는 부분있으시면 가차없이 적어주세요... 정말 부탁 드립니
다.
개구리 wrote..
: CS8900을 두개 다실때 다음을 점검해 보세요
:
: nCS3 ,nCS4 타이밍 설정 관련된 메모리 컨트롤러 설정 사항
: CS8900 의 초기화를 위한 LHE 핀 처리 문제
: CS8900의 주소는 0x0300을 더한 위치에서 시작하는 문제
:
: 이 부분을 모두 검토하시기 바랍니다
1. nCS3, nCS4등의 타이밍설정은 이지부트2.2의 기본설정을 그대로 사용하였습
니다. nCS4에 달린 칩은 제대로 인식을 하고있고요, nCS2와 nCS3가 타이밍이
같기때문에 nCS2에는 이지보드 기존의 CS8900이 달려있는데 잘 동작하고 있습
니다. 그런데 제가 추가한 것중의 하나인 nCS3는 제대로 인식이 안됩니다. ㅜ.
ㅡ
2. 제가 첨부한 소스코드에서도 0x0300을 더한 위치에서 CS8900의 주소가 시작
되게 수정되어 있습니다. 즉 nCS3,nCS4에 달린 칩모두 동작코드등은 동일하
고, 주소부분등만 수정되었는데, nCS3에 붙은것만 동작이 제대로 안됩니다.
3. CS8900의 칩 처리는 이지보드의 책자에 첨부된 CS8900의 책잘를 보고 nCS
와 GPIO만을 수정한것이라서 제대로 동작할것이라 생각되는데 nCS3만 동작이
안됩니다. (nCS4는 동작이 잘됩니다.)
4. 제가 수정한 사항들입니다.
1. ezboot/include/config.h
struct SConfig에서 다음 두줄을 추가한다.
Byte Local_MacAddress1[8]; // 보드 MAC Address
[xx:xx:xx:xx:xx:xx] default { 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF }
Byte Local_MacAddress2[8]; // 보드 MAC Address
[xx:xx:xx:xx:xx:xx] default { 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF }
2. ezboot/main/config.c
TConfig Cfg 에 다음 두줄을 추가한다.
Local_MacAddress1 : {0x01, 0xD2, 0xCA,
0xF1, 0x26, 0x25 }, // 보드 MAC Address1
[xx:xx:xx:xx:xx:xx]
Local_MacAddress2 : {0x03, 0xD4, 0xCA,
0xF1, 0x26, 0x25 }, // 보드 MAC Address2
[xx:xx:xx:xx:xx:xx]
char *CfgItemStr[] =
{
" 1. MAC Address [%02x:%02x:%02x:%02x:%02x:%02x]
",
" 2. LOCAL IP [%d.%d.%d.%d]
" ,
" 3. HOST IP [%d.%d.%d.%d]
" ,
" 4. Host tftp directory [%s]
" ,
" 5. zImage file name [%s]
" ,
" 6. ram disk file name [%s]
" ,
" 7. boot loader file name [%s]
" ,
" 8. zImage address on flash [0x%08x]
" ,
" 9. ramdisk address on flash [0x%08x]
" ,
" A. zImage address on memory [0x%08x]
" ,
" B. ramdisk address on memory [0x%08x]
" ,
" C. Autoboot wait time [%d]
" ,
" D. Boot Menu Key [%c]
" ,
" E. Kernel Command Line [%s]
" ,
" F. Architecture Number [%d]
" ,
" G. RAM Disk Size MBytes [%d]
" ,
" H. MAC Address1 [%02x:%02x:%02x:%02x:%
02x:%02x]
",
" I. MAC Address2 [%02x:%02x:%02x:%02x:%
02x:%02x]
",
" P.
Apply
" ,
" S.
Save
" ,
" 0.
Exit
" ,
};
while (1)
{
printf( "
" );
printf( CfgItemStr[ 0], SvCfg.Local_MacAddress[0],
SvCfg.Local_MacAddress[1], SvCfg.Local_MacAddress[2],
SvCfg.Local_MacAddress[3], SvCfg.Local_MacAddress[4],
SvCfg.Local_MacAddress[5] );
printf( CfgItemStr[ 1], (SvCfg.Local_IP>>0)&0xff,
(SvCfg.Local_IP>>8)&0xff, (SvCfg.Local_IP>>16)&0xff, (SvCfg.Local_IP>>24)
&0xff );
printf( CfgItemStr[ 2], (SvCfg.Host_IP >>0)&0xff,
(SvCfg.Host_IP >>8)&0xff, (SvCfg.Host_IP >>16)&0xff, (SvCfg.Host_IP >>24)
&0xff );
printf( CfgItemStr[ 3], SvCfg.TFTP_Directory );
printf( CfgItemStr[ 4], SvCfg.TFTP_zImageFileName );
printf( CfgItemStr[ 5], SvCfg.TFTP_RamDiskFileName );
printf( CfgItemStr[ 6], SvCfg.TFTP_LoaderFileName );
printf( CfgItemStr[ 7], SvCfg.FlashStart_Kernel );
printf( CfgItemStr[ 8], SvCfg.FlashStart_RamDisk );
printf( CfgItemStr[ 9], SvCfg.RamStart_Kernel );
printf( CfgItemStr[10], SvCfg.RamStart_RamDisk );
printf( CfgItemStr[11], SvCfg.AutoBootWaitTime );
printf( CfgItemStr[12], SvCfg.EntryBootLoaderKey );
printf( CfgItemStr[13], SvCfg.Kernel_CmdLine );
printf( CfgItemStr[14], SvCfg.Kernel_ArchNumber );
printf( CfgItemStr[15], SvCfg.Kernel_RamDiskSize >> 20 );
printf( CfgItemStr[16],
SvCfg.Local_MacAddress1[0], SvCfg.Local_MacAddress1[1],
SvCfg.Local_MacAddress1[2], SvCfg.Local_MacAddress1[3],
SvCfg.Local_MacAddress1[4], SvCfg.Local_MacAddress1[5] );
printf( CfgItemStr[17], SvCfg.Local_MacAddress2[0],
SvCfg.Local_MacAddress2[1], SvCfg.Local_MacAddress2[2],
SvCfg.Local_MacAddress2[3], SvCfg.Local_MacAddress2[4],
SvCfg.Local_MacAddress2[5] );
printf( "
" );
printf( CfgItemStr[18] );
printf( CfgItemStr[19] );
printf( CfgItemStr[20] );
switch ( rbuff[0] )
{
case '1' : GetMacAddress( CfgItemStr[0], (Byte *)&
(SvCfg.Local_MacAddress) ); break;
case '2' : GetIPAddress ( CfgItemStr[1], &
(SvCfg.Local_IP) ); break;
case '3' : GetIPAddress ( CfgItemStr[2], &
(SvCfg.Host_IP ) ); break;
case '4' : GetFileName ( CfgItemStr[3],
SvCfg.TFTP_Directory ); break;
case '5' : GetFileName ( CfgItemStr[4],
SvCfg.TFTP_zImageFileName ); break;
case '6' : GetFileName ( CfgItemStr[5],
SvCfg.TFTP_RamDiskFileName ); break;
case '7' : GetFileName ( CfgItemStr[6],
SvCfg.TFTP_LoaderFileName ); break;
case '8' : GetAddress ( CfgItemStr[ 7], &
(SvCfg.FlashStart_Kernel ) ); break;
case '9' : GetAddress ( CfgItemStr[ 8], &
(SvCfg.FlashStart_RamDisk) ); break;
case 'A' : case 'a' : GetAddress ( CfgItemStr[ 9], &
(SvCfg.RamStart_Kernel ) ); break;
case 'B' : case 'b' : GetAddress ( CfgItemStr[10], &
(SvCfg.RamStart_RamDisk ) ); break;
case 'C' : case 'c' : GetWaitTime( CfgItemStr[11], &
(SvCfg.AutoBootWaitTime ) ); break;
case 'D' : case 'd' : GetMenuKey ( CfgItemStr[12], &
(SvCfg.EntryBootLoaderKey) ); break;
case 'H' : case 'h' : GetMacAddress
( CfgItemStr[16], (Byte *)&(SvCfg.Local_MacAddress1) ); break;
case 'I' : case 'i' : GetMacAddress
( CfgItemStr[17], (Byte *)&(SvCfg.Local_MacAddress2) ); break;
case 'P' : case 'p' : // 적용한다.
memcpy( &Cfg, &SvCfg, sizeof(TConfig) );
printf( "
...Applyed" );
break;
case 'S' : case 's' : // 저장한다.
memcpy( &Cfg, &SvCfg, sizeof(TConfig) );
printf( "
" );
SaveConfig();
printf( "
...Saved" );
break;
case '0' : printf( "
" );
return 0; // exit
}
3. /ezboot/include/cs8900.h
//확장된 cs8900칩을 위해서 eth1
#define CS8900_BASE1 0x18000300 // 0x08000300
#define CS8900_RTX_DATA1 *((volatile short *)(CS8900_BASE1 +
0x00000000)) // RTx data.
#define CS8900_TXCMD1 *((volatile short *)(CS8900_BASE1 +
0x00000004)) // RTx command.
#define CS8900_TXLEN1 *((volatile short *)(CS8900_BASE1 +
0x00000006)) // transmit length.
#define CS8900_ISQ1 *((volatile short *)(CS8900_BASE1 +
0x00000008)) // interrupt.
#define CS8900_PPPTR1 *((volatile short *)(CS8900_BASE1 +
0x0000000a)) // packet page point.
#define CS8900_PPDATA1 *((volatile short *)(CS8900_BASE1 +
0x0000000c)) // packet page data.
//확장된 cs8900칩을 위해서 eth2
#define CS8900_BASE2 0x40000300 // 0x08000300
#define CS8900_RTX_DATA2 *((volatile short *)(CS8900_BASE2 +
0x00000000)) // RTx data.
#define CS8900_TXCMD2 *((volatile short *)(CS8900_BASE2 +
0x00000004)) // RTx command.
#define CS8900_TXLEN2 *((volatile short *)(CS8900_BASE2 +
0x00000006)) // transmit length.
#define CS8900_ISQ2 *((volatile short *)(CS8900_BASE2 +
0x00000008)) // interrupt.
#define CS8900_PPPTR2 *((volatile short *)(CS8900_BASE2 +
0x0000000a)) // packet page point.
#define CS8900_PPDATA2 *((volatile short *)(CS8900_BASE2 +
0x0000000c)) // packet page data.
4. /ezboot/main/cs8900.c
코드 길이가 많아서 위에서 제가 첨부한 코드를 봐주세요.
5. /ezboot/main/main.c
추가 코드
// CS8900을 초기화 한다.
CS8900_Init();
// CS8900 extend1를 초기화 한다.
CS8900_Init1();
// CS8900 extend2를 초기화 한다.
CS8900_Init2();
이렇게 수정하였습니다.
실제로 제대로 값이 나오지 않는 부분은 제가 수정해준 파일인
/ezboot/main/cs8900에서 추가한 부분인 BOOL CS8900_Init1( void )함수에서
DectectID = CS8900_PPPTR1;부분이 값이 제대로 들어가지가 않습니다.
다른 메모리 주소들은 모두 정확히 들어가는데 여기에서는 이상하게 잘 들어가
지 않네요.
제가 써준 코드들은 메모리 주소부분 말고는 nCS3와 nCS4가 모두 동일한데
nCS3만 동작을 안하니 정말 답답합니다. 고수님들 제가 하면서 뭐가 틀린것같
은지 혹은 의심가시는 부분있으시면 가차없이 적어주세요... 정말 부탁 드립니
다.