[W5100S] ioLibrary 포팅시 레지스터 엑세스에 대하여
Ethernet Chips
No replies yet. Be the first to reply.
Join the discussion.
Ethernet Chips
No replies yet. Be the first to reply.
Join the discussion.
Share projects and connect with makers.
Joined before the site update? first.
New to WIZnet Makers?
We sent a verification link to your address. Open it to activate your account, then log in.
Accounts from this email provider are reviewed by an administrator after verification. Approval usually takes one business day.
Already have an account?
Enter your email address. If it belongs to an account, we'll send a link to set a new password. Members who joined before the site update use this to set their password.
If an account uses that address, we sent a link to set a new password. The link works once and expires in 30 minutes.
Know your password?
Need an account?
RE: [W5100S] ioLibrary 포팅시 레지스터 엑세스에 대하여
by irina WIZnet ·
안녕하세요.
말씀하신대로 Indirect mode를 사용할 경우,
와 같이 동작을 합니다.
단, MR의 경우는 조금 다르다고 볼수 있습니다.
MR의 경우 ADDR의 00이 MR의 주소를 나타냅니다.
→ 이는 W5100를 사용하고 있는 사용자들이 W5100S로 변경하기 원할때, 별도의 firmware작업없이 사용할수 있게 만들어졌기때문입니다.
아래의 그림은 W5100의 DataSheet에서 발췌한것입니다.

해당하는 부분은 Datasheet에 추가 설명해 놓겠습니다.
감사합니다.
irina
RE: RE: [W5100S] ioLibrary 포팅시 레지스터 엑세스에 대하여
by infoic ·
신속한 답변에 감사합니다.
그런데, 제 질문의 의도가 제대로 전달되지 않은것 같습니다.
#define setMR(mr) (((uint8_t)MR) = mr) 이므로,
setMR(0x80) 은 아래처럼 해석됩니다.
(((uint8_t)(0x60000000 + (0x0000))) = 0x80)
즉, 0x60000000 번지에 0x80을 쓰게 됩니다.
결국, 이 번지는 대부분의 마이컴에서는 기술되지 않은 부분이어서 익셉션이 발생하게 될꺼라는 질문이었습니다.
제가 무슨 착각을 하고있는건가요?? ^^;;
결론적으로, 아래 코드가 indir 모드에서는 제대로 동작하지 않는게 아닌가 하는 질문입니다.
RE: [W5100S] ioLibrary 포팅시 레지스터 엑세스에 대하여
by irina WIZnet ·
안녕하세요.
말씀해 주시는 부분이 맞습니다.
Indirect mode를 사용할 경우, 아래의 주소를 사용하기 때문에, 말씀하신대로 0x6000_0000이 맞습니다
여기에서 아셔야 할점은, W5100와 W5100S에서의 IDM_OR은 실제 MR 을 나타내는 주소입니다.
이전에도 말씀드렸듯이 W5100에서 W5100S을 변경하고자하는 고객을 위해 설계된부분이고,
W5100에서는 Direct mode에서 indirect mode로 변경시 IDM_OR의 한 bit를 세팅해주면 변경이 되었습니다.
이 부분에 관해서는 W5100S에서 해당 비트는 사용하지 않지만, W5100사용자들을 위해 0x6000_0000에 값을 쓰거나 읽게 되면, MR register에 접근을 하게 됩니다.
이부분은 테스트 완료 된 부분이기때문에, 익센셥이 발생하지 않습니다.
기술되지 않은 부분이란 어떤걸 얘기하시는건지…
Indirect mode 일때,WIZCHIP_IO_BASE 의 값은 MCU 마다 다른 부분입니다.
Wiznet에서 제공하는 예제의 MCU에서 는 해당 address를 사용하기 때문에, 0x6000_0000에 Base address로 세팅되어있는 것입니다.
다른 MCU를 사용하신다면, MCU에 맞는 주소를 설정하셔서 사용하셔야합니다.
감사합니다.
irina
RE: [W5100S] ioLibrary 포팅시 레지스터 엑세스에 대하여
by infoic ·
아… 이제 말씀하시는 의미를 알겠습니다.
즉, W5100s에서 AD0,1은 (외부메모리 인터페이스에 사용되는) 어드레스 버스신호선(보통 AD[31:0])의 최하위 2비트를 W5100s에 연결하는 경우를 말씀하시는 거군요.
예, 맞습니다.
이 경우에는 정성동작하겠네요.
(그런데, 이렇게 사용하는 유저는 별로 없을 듯…)
저도 CORTEX-M0의 GPIO를 AD0,1에 연결해서 사용합니다.
이경우에는 0x6000_0000은 사용되지 않는 영역이므로 메모리 익셉션이 발생하게 됩니다.(확인했습니다)
저와 같은 경우에는 ioLibrary의 함수를 그대로 사용하면 않되겠네요.
수정이 필요하겠네요.
혹시 수정할 점에 대하여 도움될 코드가 있으면 좋겠는데…
하여튼 감사합니다.
이제야 왜 아래처럼 선언했는지 이해가 됩니다.
#define WIZCHIP_IO_BASE 0x60000000 // for 5100S IND
#define IDM_OR ((_WIZCHIP_IO_BASE + 0x0000))
#define IDM_AR0 ((WIZCHIP_IO_BASE + 0x0001))
#define IDM_AR1 ((WIZCHIP_IO_BASE + 0x0002))
#define IDM_DR ((WIZCHIP_IO_BASE + 0x0003))
RE: [W5100S] ioLibrary 포팅시 레지스터 엑세스에 대하여
by irina WIZnet ·
ioLibrary 를 사용하여 쓰실경우
WIZCHIP_IO_BASE의 값을 사용가능한 memory 주소로 매핑하신다면 어렵지 않게 사용하실수 있을것 같습니다.
감사합니다.
irina
RE: [W5100S] ioLibrary 포팅시 레지스터 엑세스에 대하여
by infoic ·
예 감사합니다.
위 코드를 실행한 후
다시 netinfo를 읽어보니 정상적으로 읽어지는 것을 확인했습니다.
그런데, 또 문제가 발생했습니다.ㅠㅠ
int8_t close(uint8_t sn) 에서
이부분에서 Sn_CR 값이 0으로 되질 않습니다.
참고로,
ADDR0,ADDR1 은 GPIO를 사용하고 있습니다.
혹시나 해서 PCB도 다시 조립해 봤지만 마찬가지 였습니다.
어느 부분을 검토해 봐야 할까요?
조언을 부탁드립니다.
RE: RE: [W5100S] ioLibrary 포팅시 레지스터 엑세스에 대하여
by irina WIZnet ·
안녕하세요 .
Sn_CR의 경우 로직상
자동으로 Clear되도록 설계되어있습니다.
어떤 동작을 한후 Sn_CR의 값이 0이 되지 않는건가요?
예를 들어 connect 함수에서 동작하지 않는다…
사용하는 SOCKET의 Sn_CR이 맞는지 확인해야할것 같습니다.
감사합니다.
irina 드림.
RE: [W5100S] ioLibrary 포팅시 레지스터 엑세스에 대하여
by infoic ·
실행한 프로그램을 순서대로 코드를 나열하면 아래와 같습니다.
위처럼 리셋 작업을 한 후
위에서 처럼 초기화 했습니다.
ip, subnet,gw는 정상적으로 써졌다는것을 확인했습니다.
마지막으로 위처럼 TcpServer를 실행했는데,
여기서부터는 ioLibrary내의 코드이므로 잘 알고 계실것으로 생각되는데,
을 호출하고,
또 socket()에서는
또, close() 에서는
위의 코드가 있습니다.
여기서 while 문에서 무한루프를 돕니다.
값을 확인해보면 0으로 리셋되지 않고 Sn_CR_CLOSE가 그대로 있 습니다.