[질문]MP2530F+WinCE+LAN91C111
안녕하세요.
저는 MP2530F에 MES의 WinCE BSP(1.1.2)를 쓰고있습니다.
이번 개발 제품에 100M LAN이 필요해서 LAN91C111 칩을 써서 회로를 만들었습니다.
AESOP에서 공개하신 BSP#2를 참고로해서 LAN91C111 device driver를 제가 쓰는
BSP(1.1.2)에 포함시켜서 컴파일에 성공했습니다..^^
여기까지는 좋았는데, 부팅 중에 LAN91C111 칩을 인식하고 MiniPort 관련 동작을
하다가 DataAbort가 자꾸나더군요.
(AESOP의 BSP는 내려받은 그대로 돌렸을때 문제가 없더군요.)
질문입니다.
- AESOP BSP의 "platform.reg"의 LAN91C113 관련에서,
"IoBaseAddress"=dword:B0300300
에서 "B0300300" 값이 어디서 나온 것인지 알고싶습니다.
virtual address 같은데, BSP를 뒤져봐도...근거를 못찾겠네요.
이 부분(virtual address)이 제 BSP와 맞지 않아서 에러가 나는거 같습니다.
다음은 제가 해결한 방법입니다.
-환경
1.LAN91C111은 MP2530F의 nSCS[1]에 연결됨.
2."OEM_SYSTEM_MAIN.h"에서 "#define SYSTEM_EXTETHER_PHY_BASEADDR_ETHER 0x84000000"
3."OEM_ADDRESS_TABLE.h"에서 "0x90300000, 0x84000000, 1, // nSCS1"
로 MES에서 제공한 그대로 입니다.
4.기타 KITL에서 LAN91C111 드라이버 관련 잡다 수정. AESOP BSP 참조함.
-수정
1."LAN91C111_Init.C"에서(LAN91C111_MiniportInitialize" 내부, line 180)
#elif 1 <<<<==== '0'을 '1'로 수정
#pragma message( "-- WARNING: Change the IO BASE ADDRESS for VirtualAlloc/VirtualCopy functions in LAN91C111_Init.C")
lpIOBase = VirtualAlloc(0, 0x1000, MEM_RESERVE, PAGE_NOACCESS);
RetVal = VirtualCopy(lpIOBase, (LPVOID)((Adapter->IOBase)/256), 0x1000, PAGE_PHYSICAL | PAGE_READWRITE | PAGE_NOCACHE);
if (RetVal == TRUE)
PrintDebugMsg(ZONE_INIT, (TEXT("LAN91C111: VirtualAlloc/Copy Succeeded...........rn")));
else
PrintDebugMsg(ZONE_INIT, (TEXT("LAN91C111:ERROR : VirtualAlloc/Copy Failed...........rn")));
Adapter->IOBase = (UINT)lpIOBase + 0x300;
#else
2."platform.reg"의 LAN91C113 관련에서,
"IoBaseAddress"=dword:84000000
(virtual address를 IoBaseAddress에 직접 주지 않고, physical address로 kernel에서
virtual address를 할당받는 방법으로 알고있습니다.)
제가 수정해서 적용한 내용이 맞는지 검토해 주시면 감사하겠습니다.
WinCE를 시작한지 얼마 안되어서 동작을 잘 모르는데 여기서 많이 배워갑니다. ^^;
몇십대 생산하고 말게 아니라면 smsc9115 혹은 smsc9215 칩으로
바꾸시길 권장합니다.