아래 w5100 추가 질문

아래 W5100 접속문제로 문의 드렸던 사람입니다.

W5100 질문
Attachment(s) by sangk » Tue Sep 02, 2014 11:26 am <---- 참조

이 문제가 아직 해결되지 않아…알려주신 것과 같이 Sn_IR을 초기 커넥팅 할때 보았더니…

Socket0를 사용함. S0_IR값이 초기 커넥팅할때 0x01 -> 0x05 이다가…디스커넥팅할때 0x07로 바뀌는것을 확인했습니다.
메뉴얼 확인결과 Timeout 이 걸리는거 같은데 … 그리고 0x01-> 0x05 (커넥팅) -> 0x07(디스커넥팅) 하고 난후 일정시간후에 Client측에서 Asynchronus socket error 10060을 띄우면서 Client가 죽습니다… 문제는 Timeout으로 인하여 인터럽트가 발생하지 않는것으로 보여지는데…어떤부분을 좀 더 살펴보는게 좋을까요? 조언 부탁드립니다.


Sn_IR 값을 추적하신 것을 보면 실제로 타임아웃이 발생한 것 아닙니다.
타임아웃이 발생하였다면 Sn_IR = 8로 관찰이 되어야 합니다.

그리고, Sn_IR 값을 전혀 클리어 하지 않는 것 같습니다.
Sn_IR 값이 1(CON)–>5(RECV|CON)–>7(DISCON|RECV|CON) 로 변경되어, Sn_IR 값이 항상 0 보다 크기 때문에
Sn_IR 값이 1일 때 한번 인터럽트가 발생하고 그 이후에는 발생하지 않게 되어 있습니다.

즉 Sn_IR 값을 클리어 하지 않는다면 Interrupt는 더 이상 발생할 수 없습니다.
Sn_IR값은 각 비트를 1로 Write하시면 됩니다.

Sn_IR의 정상적 흐름은 1->0->4->0->8->0 입니다. 이렇게 할 경우 각 비트가 설정될 때마다 인터럽트가 발생하게 됩니다.

Sn_IR = 8 이 되어야 한다는 말씀은 이해가 되었습니다. 빠른 답변 감사합니다. 하지만 Sn_IR값이 클리어 되지 않는 것은
인터럽트가 W5100-> MCU로 들어오지 않기 때문에 클리어가 되지 않는 것입니다. 현재 소스상에서 인터럽트가 MCU로 부터 확인이 되면 어떤 인터럽트 인지 확인 후 말씀하신 것과 같이 Bit를 Clear하도록 소스를 만들어 놓았습니다…

말씀하신 것과 같이 인터럽트 bit가 중복될 경우 인터럽트가 더 이상 안걸리는 것은 정상동작하는 MCU에서 확인한 사항입니다.

한가지 의문스러운 점은 정상동작되는 MCU(28335와 달리) 문제가 발생하는 MCU(28346)에서는 W5100의 네트워크를 초기화 하구 난 후 IR (Interrupt Register) [R] [0x0015] [0x00] 이 Register가 0x80으로 된다는 점입니다. 28335에서는 0x00임.

메뉴얼상에 이 비트는 소스 아이피로 부터 같은 아이피로부터 ARP 요청을 받았을 때라고 되어 있는데 …
IP Conflict It is set as „1‟, when there is ARP request with same IP address as Source IP address. This bit is cleared to „0‟ by writing „1‟ to this bit.
무엇인가가 정상적으로 W5100을 동작시키지 못하도록 하는 것으로 보여집니다. 정상 동작 MCU와 비정상 동작 MCU의 IR & Sn_IR 을 비교해보니 아래와 같습니다. 0x15(IR), 0x402(Sn_IR)

28335 MCU
네트워크 초기화 시 0x15 (0x00) , 0x402(0x00) -> mcu 28335 커넥팅시 0x15 (0x01) , 0x402(0x01) -> interrupt(mcu) -> Interrupt flag clear -> 0x15 (0x00) , 0x402(0x00)

mcu 28335 디스 커넥팅시 : 0x15 (0x01) , 0x402(0x02) -> interrupt(mcu) -> Interrupt flag clear -> 0x15 (0x00) , 0x402(0x00)
–> 정상적으로 잘 동작함을 확인하였습니다.

28346 MCU
네트워크 초기화 0x15 (0x80) , 0x402(0x00) -> mcu 28346 커넥팅시 0x15 (0x88) , 0x402(0x01) -> MCU에 인터럽트 안걸림 강제로 인터럽트 플레그 클리어 -> 0x15 (0x80) , 0x402(0x00)
mcu 28346 디스 커넥팅시 : 0x15 (0x88) , 0x402(0x02) -> interrupt(mcu) -> MCU에 인터럽트 안걸림 강제로 인터럽트 플레그 클리어 -> 0x15 (0x80) , 0x402(0x00)

–> 초기화시 IR에 0x80이 Read되는 것과 커넥팅 시 0x88이 Read되는것과 Socket0를 Connect하였음에도 Socket3의 인터럽트가 동작하는 것이 문제가 될 것으로 판단됨. MCU의 인터럽트 부분은 강제로 외부 에서 Active low시켰을때 인터럽트가 걸림을 확인한 사항입니다.

본 문제를 해결하기 위해 정상동작 MCU와 Read/Write timing과 CS를 모두 정상동작 MCU와 동일하게 맞추었고…회로를 몇번이나 다시 검토해보아도 동일한 회로인데 원인을 모르겠습니다. 소프트웨어적인 문제보다는 현재 H/W적인 문제로 의심이 되긴합니다만, 확실하게 어느부분때문에 문제가 발생하는지는 모르겠습니다. Artwork 자료와 회로를 비교분석해도 도저히 알수가 없네요. 시간이 촉박한데 일이 처리되지 않아 다소 두서없게 질문을 드려서 죄송합니다. 혹 회로와 PCB 파일을 보낼 수 있는 메일을 알려주시면 소스와 회로를 검토 요청드려도 될까요?

28335와 28346 가 동일 계열 MCU인가요?

28346쪽 Reset Timing을 먼저 확인해보시고, 질문 내용을 보아 뭔지 모르겠지만 칩이 잘못 동작하고 있다는 느낌이 많이 듭니다.
Reset도 문제가 없다면, Register Access에 문제가 있을 수 있으며, 칩이 손상되었을 가능성이 있으니, 다른 것으로 변경하여 테스트 부탁드립니다.