도와주세요!!
글 수 15,339
2005.04.04 11:38:46 (*.118.56.115)
6691
별다른 답변이 없으시군요.ㅜㅜ
예전에 이 모듈을 한번 검토하셨다는 글을 본 적이 있어서..
그냥 경험에서 우러나오는 간단한 조언이나 추측이라도 해주심 너무 좋겠습니
다.
저번에 글 올린 뒤에 몇가지 추가 사항이 있습니다.
드라이버 소스를 수정하여 몇가지 테스트를 해봤습니다.
그렇게 해서 no such device의 이유는 찾았습니다.
대충 하드웨어가 문제인 거 같습니다.
처음 register_netdev()함수에서 init 호출하여 장치등록을 할 때 smc_probe()
함수의 식별정보 확인에 문제가 있었습니다.
이더넷 모듈의 특정 레지스터에서 모듈 식별 정보를 가져오는 데, 그 정보가
제대로 읽혀지지 않아 칩 detect에 실패하는 게 원인이었습니다.
inw로 읽어오는 모든 값이 0xffff 혹은 0xfff0 입니다.
이게 실제 읽어온 값인지, 그냥 쓰레기 값인지는 모르겠습니다.
저는 컴공전공이라 하드웨어 부분에 대해 잘은 모릅니다.
그래서 참고할 회로도를 더 찾아봤는데, 제가 참고한 회로도는 한X전자의
empos와 accelent의 IDP보드 입니다.
이 둘이 또 회로구성이 조금씩 차이가 나네요.
데이터시트를 보니 sync or async모드, dma or cpu모드 에 따라 연결방식이 틀
린 것 같기도 한데, 한계네요...
참고한 회로도와 똑같이 맞춰봐도 안되는 걸 보면 드라이버 단에서 무언가 더
처리를 해야 할 것이 있는 지도 모르겠습니다.
마지막으로 신호가 제대로 들어가고 나오는 지가 궁금해,
레지스터 내용을 읽어오는 함수를 이용, 무한 루프를 돌리며 핀의 상태를 오실
로스코프로 확인해 봤습니다.
씨피유에서 나오는 핀은 신호가 잘 잡히는데, 모듈에서 나가는 신호는 아무 것
도 안 잡히네요.
혹시 칩이 문제는 아니겠죠?
전원 들어온 상태에서 랜선 물려봐도 led는 안켜지던데..
nRD, nWR에 각각 nOE, nPWE 물려놓은 상태입니다. ARDY와 INTR은 씨퓨의 RDY,
GPIO3에 물려져 있습니다.
32비트 비동기 모드로 구성하려고 생각하고 있습니다.
제가 어디를 좀 더 봐야 할까요?
도움 부탁드립니다.
nautes wrote..
: 안녕하세요.
: 외부 이더넷 모듈을 달려고 하는데 잘 안되네요.
: 지금 보드는 x5(v1.2) + pi + pcmcia를 사용하고 있습니다.
:
: 저희가 하려는 건 smsc lan91c111 모듈을 두개 붙이는 겁니다.
: 칩셀렉트는 각각 nCS4, 5를 사용하구요.
: 비어있는 gpio가 없어 고생했는데, 인터럽트 핀은 x5보드에서 led에 할당 된 gpio3, 5번을 사용했습
: 니다. (led쪽 저항만 제거했습니다.)
: 인터럽트 핀은 active일때 high입니다.
:
: ez_x5.c, ez_x5_init_irq()에서 다음과 같이 설정했습니다.
: set_GPIO_IRQ_edge(3, GPIO_RISING_EDGE);
: set_GPIO_IRQ_edge(5, GPIO_RISING_EDGE);
:
: 드라이버는 cvs.arm.linux.org.uk에 있는 smcether트리를 가지고 왔습니다.
: 소스 내에 버젼 2.1로 되어 있고 smc91111_cfg.h라는 파일을 통해 환경설정 이 가능하게 되어 있습니
: 다.
:
: 그 소스에서 다음과 같이 설정했습니다.
: #elif CONFIG_ARCH_PXA_EZ_X5
:
: #define NETWORK_INTERFACE0_PHYS_DATA_ADDR (PXA_CS4_PHYS + 0x300 + DATA_REG)
: #define NETWORK_INTERFACE0_INTERRUPT IRQ_GPIO(3)
: #define NETWORK_INTERFACE0_USE_32_BIT 1
: #define NETWORK_INTERFACE0_REGISTER_BASE_ADDRESS (0xf4000000 + 0x300)
:
: #define NETWORK_INTERFACE1_PHYS_DATA_ADDR (PXA_CS5_PHYS + 0x300 + DATA_REG)
: #define NETWORK_INTERFACE1_INTERRUPT IRQ_GPIO(5)
: #define NETWORK_INTERFACE1_USE_32_BIT 1
: #define NETWORK_INTERFACE1_REGISTER_BASE_ADDRESS (0xf5000000 + 0x300)
: 이 외에 드라이버 소스에서 아직 건드린 부분은 없습니다.
:
: 일단 커널 모듈로 먼저 테스트 하기 위해 커널에서 모듈로 포함시켜놓고,
: make modules하면 일단 컴파일은 이상없이 잘 됩니다.
:
: 완성된 모듈을 타겟으로 옮기고
: [root@ez-x5 /app]$ insmod ./smc91111.o io=0xf4000300 irq=26 nowait=1
: Using ./smc91111.o
: insmod: init_module: smc91111: No such device
:
: 이렇게 에러가 뜹니다.
: 회로는 이 모듈이 달려있는 다른 보드의 회로도를 참고했기에 이상은 없어 보입니다.
: 인터럽트 핀만 다르게 연결되어 있구요.
: 여기저기 다 건드려봐도 어디가 문제인지 모르겠습니다. ㅜㅜ
: 도움 부탁드립니다.
예전에 이 모듈을 한번 검토하셨다는 글을 본 적이 있어서..
그냥 경험에서 우러나오는 간단한 조언이나 추측이라도 해주심 너무 좋겠습니
다.
저번에 글 올린 뒤에 몇가지 추가 사항이 있습니다.
드라이버 소스를 수정하여 몇가지 테스트를 해봤습니다.
그렇게 해서 no such device의 이유는 찾았습니다.
대충 하드웨어가 문제인 거 같습니다.
처음 register_netdev()함수에서 init 호출하여 장치등록을 할 때 smc_probe()
함수의 식별정보 확인에 문제가 있었습니다.
이더넷 모듈의 특정 레지스터에서 모듈 식별 정보를 가져오는 데, 그 정보가
제대로 읽혀지지 않아 칩 detect에 실패하는 게 원인이었습니다.
inw로 읽어오는 모든 값이 0xffff 혹은 0xfff0 입니다.
이게 실제 읽어온 값인지, 그냥 쓰레기 값인지는 모르겠습니다.
저는 컴공전공이라 하드웨어 부분에 대해 잘은 모릅니다.
그래서 참고할 회로도를 더 찾아봤는데, 제가 참고한 회로도는 한X전자의
empos와 accelent의 IDP보드 입니다.
이 둘이 또 회로구성이 조금씩 차이가 나네요.
데이터시트를 보니 sync or async모드, dma or cpu모드 에 따라 연결방식이 틀
린 것 같기도 한데, 한계네요...
참고한 회로도와 똑같이 맞춰봐도 안되는 걸 보면 드라이버 단에서 무언가 더
처리를 해야 할 것이 있는 지도 모르겠습니다.
마지막으로 신호가 제대로 들어가고 나오는 지가 궁금해,
레지스터 내용을 읽어오는 함수를 이용, 무한 루프를 돌리며 핀의 상태를 오실
로스코프로 확인해 봤습니다.
씨피유에서 나오는 핀은 신호가 잘 잡히는데, 모듈에서 나가는 신호는 아무 것
도 안 잡히네요.
혹시 칩이 문제는 아니겠죠?
전원 들어온 상태에서 랜선 물려봐도 led는 안켜지던데..
nRD, nWR에 각각 nOE, nPWE 물려놓은 상태입니다. ARDY와 INTR은 씨퓨의 RDY,
GPIO3에 물려져 있습니다.
32비트 비동기 모드로 구성하려고 생각하고 있습니다.
제가 어디를 좀 더 봐야 할까요?
도움 부탁드립니다.
nautes wrote..
: 안녕하세요.
: 외부 이더넷 모듈을 달려고 하는데 잘 안되네요.
: 지금 보드는 x5(v1.2) + pi + pcmcia를 사용하고 있습니다.
:
: 저희가 하려는 건 smsc lan91c111 모듈을 두개 붙이는 겁니다.
: 칩셀렉트는 각각 nCS4, 5를 사용하구요.
: 비어있는 gpio가 없어 고생했는데, 인터럽트 핀은 x5보드에서 led에 할당 된 gpio3, 5번을 사용했습
: 니다. (led쪽 저항만 제거했습니다.)
: 인터럽트 핀은 active일때 high입니다.
:
: ez_x5.c, ez_x5_init_irq()에서 다음과 같이 설정했습니다.
: set_GPIO_IRQ_edge(3, GPIO_RISING_EDGE);
: set_GPIO_IRQ_edge(5, GPIO_RISING_EDGE);
:
: 드라이버는 cvs.arm.linux.org.uk에 있는 smcether트리를 가지고 왔습니다.
: 소스 내에 버젼 2.1로 되어 있고 smc91111_cfg.h라는 파일을 통해 환경설정 이 가능하게 되어 있습니
: 다.
:
: 그 소스에서 다음과 같이 설정했습니다.
: #elif CONFIG_ARCH_PXA_EZ_X5
:
: #define NETWORK_INTERFACE0_PHYS_DATA_ADDR (PXA_CS4_PHYS + 0x300 + DATA_REG)
: #define NETWORK_INTERFACE0_INTERRUPT IRQ_GPIO(3)
: #define NETWORK_INTERFACE0_USE_32_BIT 1
: #define NETWORK_INTERFACE0_REGISTER_BASE_ADDRESS (0xf4000000 + 0x300)
:
: #define NETWORK_INTERFACE1_PHYS_DATA_ADDR (PXA_CS5_PHYS + 0x300 + DATA_REG)
: #define NETWORK_INTERFACE1_INTERRUPT IRQ_GPIO(5)
: #define NETWORK_INTERFACE1_USE_32_BIT 1
: #define NETWORK_INTERFACE1_REGISTER_BASE_ADDRESS (0xf5000000 + 0x300)
: 이 외에 드라이버 소스에서 아직 건드린 부분은 없습니다.
:
: 일단 커널 모듈로 먼저 테스트 하기 위해 커널에서 모듈로 포함시켜놓고,
: make modules하면 일단 컴파일은 이상없이 잘 됩니다.
:
: 완성된 모듈을 타겟으로 옮기고
: [root@ez-x5 /app]$ insmod ./smc91111.o io=0xf4000300 irq=26 nowait=1
: Using ./smc91111.o
: insmod: init_module: smc91111: No such device
:
: 이렇게 에러가 뜹니다.
: 회로는 이 모듈이 달려있는 다른 보드의 회로도를 참고했기에 이상은 없어 보입니다.
: 인터럽트 핀만 다르게 연결되어 있구요.
: 여기저기 다 건드려봐도 어디가 문제인지 모르겠습니다. ㅜㅜ
: 도움 부탁드립니다.