ãã®èšäºã§ã¯ãããšãã°ãWiznetã®çŽ æŽãããå®äŸ¡ãªW5100ãããäžã§WebãµãŒããŒãå®è¡ããæ¹æ³ãç°¡åãã€è©³çŽ°ã«ãæ確ã«èª¬æããŸãã
ãªã圌女ã¯çŽ æŽãããã®ã§ããïŒ
第äºã«-å®äŸ¡ã
ãããŠæåã«ã圌女ã¯ããªãã®ããã«ãã¹ãŠã®ä»äºãããŸãã é 延ããŠTEXTïŒãŸãã¯-HTMLïŒããŒã¿ãéåä¿¡ããå¿ èŠããããŸãã
å 責äºé 1ïŒ20幎以äžã®çµéšãæã€é»åæè¡è ã¯ããã§ã«ïŒããããïŒå¯Ÿè±¡ã«ãªã£ãŠãããããè¡šé¢çã§åçŽã«èŠãããããããŸããã ãã®èšäºã¯ãé»åå·¥åŠããŸãã¯å°ãªããšããã€ã¯ãã³ã³ãããŒã©ãŒã®ããã°ã©ãã³ã°ã®çµéšãããããããå®è¡ããããšãæçµçã«ïŒå®å šã«ïŒæãã§ãã人ã察象ãšããŠããŸã...ïŒåãæ¶ãç·ïŒïŒããããŸããããçŽ æŽãããã ïŒãããW5100ã
å 責äºé 2ïŒæ®éçãªåŠç¿ãããŒã¿ã·ãŒãã®å®å šãªç¿»èš³ãããã³ãã®ãã¹ãŠã®ãã€ã³ãã®è§£éã®ç®æšãèšå®ããŸããã§ããã ç§ã®ã¿ã¹ã¯ã¯ãçŽããããç¹ãæ確ã«ããW5100ãããã®äœ¿çšæ¹æ³ãšãã®ã¢ããªã±ãŒã·ã§ã³ïŒWebãµãŒããŒãªã©ïŒãå®è¡ããæ¹æ³ã瀺ãããšã§ãã
ç§ã®èª¬æãšå¿çšäŸã«åºã¥ããŠããã€ã¯ãã³ã³ãããŒã©ã®çµéšãããããããã¯ãŒã¯ã®å°ãªããšãåºæ¬çãªæŠå¿µãæã£ãŠãã人ãªã誰ã§ããä»ã®ãã¹ãŠãèªåã§ç解ããããšãã§ããŸãã
å 責äºé 3ïŒãã®å®éšã¯èªå® ã§è¡ããªãã§ãã ããã ãããŠã倧人ã®äžäººãè¿ãã«ããããšãæãŸããã
ç¯å²
ãã®èšäºã¯ãåºç¯ãªãããã¯ãŒã¯ãããã¯ã«é¢ããå æ¬çãªç¥èãæäŸããããšãæå³ãããã®ã§ã¯ãªããããã«é¢ããããã¥ã¢ã«ããããŸãããååãšããŠãäœãèµ·ãã£ãŠããã®ãããªãããããŠã©ã®æ å ±ãäž»é¡ã®è©³çŽ°ãªç解ãæ±ããŠããã®ããç解ããæ©äŒãæäŸããŸãã
ãã ããæåŸã«ç€ºããäŸã§ã¯ããã€ã¯ãã³ã³ãããŒã©ãŒäžã®ã¢ããªã±ãŒã·ã§ã³ã§ã€ã³ã¿ãŒãããïŒããæ£ç¢ºã«ã¯ã€ãŒãµããããšTCP / IPïŒã䜿çšããæ¹æ³ãææ¡ã§ããŸãããã®åçŽãã«ãããããããå®éã«å®å šã«é©çšã§ããŸãã ã¯ã©ã€ã¢ã³ããšãµãŒããŒã®æ¥ç¶ã®æäœæ¹æ³ãç解ããæçµçã«ã¯äœããæå ã«çœ®ããŠããããã¯ãããããç解ã§ããããã«ãªãããã説æãè€éã«ãªããŸã-説æä»ãã§äœåããŒãžã«ãããã£ãŠç ãããšãªããç¥èãæ·±ããããšãã¯ããã«å®¹æã«ãªããŸãã¬ãžã¹ã¿ã®å²ãåœãŠãNATãã¥ãŒãã³ã°ã®ååããŸãã¯ãã±ããå ã®ãã©ã°ã¡ã³ããªãã»ããã®æ£ããæ瀺ã
ïŒ "...ãã±ããå ã®ãã©ã°ã¡ã³ã.."ãŠããã£ã¢ã¬ã³ã®ãããªãã®ïŒïŒ
ç§èªèº«ã®çµéšããïŒéåžžãèšäºãæžã人ã«ãšã£ãŠãäž»é¡ã¯æ確ã§ç解ããããã®ã§ã圌ã¯ç°¡æœãã€ãæ確ã«ãæžãã
ããããããã¯å€ãã®å Žåãèªè ã®å Žåã«ã¯åœãŠã¯ãŸããã話é¡ããå€ããŠãèè ãäœã念é ã«çœ®ããŠããã®ãããããŠãã®ãããªå£°æãç解ããã¹ããããããšããŸã£ããéãªã®ããçåã«æãããããšããããããŸããïŒ ãããã£ãŠãå¯èœãªéããç§ã¯è§£æ£ãããå®å šã«æå¿«ã§ç解ãæ確ã«ãªããŸã§åãå¿ èŠãããå Žæã§ã¯ãèšèãç¯çŽããŸããã
åæã«ãå®ç§ãªäººã¯èª°ãããªãããšãå¿ããªãã§ãã ããïŒç§ã§ããïŒã
æåŸãŸã§èªãã 人ã«ã¯ããŒãã¹ã§ããèšäºã®æåŸã«ãç°¡åãªãCãã«WORKINGã³ãŒããšå€æ°ã®ã³ã¡ã³ãã衚瀺ããã5幎çã§ãããã°ã©ã ã§äœãèµ·ãã£ãŠããããç解ã§ããŸãã ã³ãŒãã¯éåžžã®PICaçšã«æžãããŠããŸãïŒãã¹ãŠãAVR-shikiãšArduin-shikiã®åšèŸºã«ããããã§ã¯ãããŸãããïŒïŒã
æå
ããŒããåºããŠTQFP80ããã±ãŒãžã«ããããã¯ãã ä»ãããç¹å¥ãªæ¬²æ±ããªãå Žåã¯ãW5100ã«åºã¥ãéåžžã®Arduinoã€ãŒãµãããã·ãŒã«ãã䜿çšããããšããå§ãããŸãã ãŸããæäœäžã«ãµãŒããŒå ã§äœãèµ·ãã£ãŠãããã«çªç¶èå³ãããå Žåã«åããŠãã·ã³ãã«ã§å®äŸ¡ãªPICãPICaã®ãã¬ããããŒããããã€ãã®æ¥ç¶ã¯ã€ã€ãã€ãŒãµããããããã³ãŒããããã³å¥œã¿ã«å¿ããŠã·ãªã¢ã«RS232ã±ãŒãã«ãå¿ èŠã«ãªããŸãïŒåºåã®è¡ãã³ãŒãã«æ¿å ¥ãããŸãé¢é£æ å ±-端æ«ãžïŒã
æè©ïŒã¹ãããïŒ
éçºã®çµéšããã人ãªã誰ã§ãããã®ç¶æ³ã¯ããªãã¿ã§ãïŒããã§ãªãã®ãããããšãç§ã ããè² ããŠããã®ã§ããããïŒïŒ
ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããå¿ èŠãããç¹å®ã®ãããã䜿çšããŸãã ç°¡åã«ããããã«ããã®ã¢ããªã±ãŒã·ã§ã³ã䜿çšããããããã¯/é åïŒã€ãŒãµããããTCP / IPãHTTPãCGIãªã©ïŒã«ã粟éããŠãããšããŸãããã
æåã«ããããäžã®ããŒã¿ã·ãŒãã100,500ããŒãžã§ååŸãã
æè©ããèŠéããªã
泚ææ·±ãèªãã§ãã ããã ãã®åŸããããããã«æ°åèªã¿çŽããæçµçã«ãã®ãããã®äœ¿çšæ¹æ³ãç解ãå§ããŸãã ãã®åŸãæ£èª€è¡šãäœæããŠåãç¹°ãè¿ããç¹°ãè¿ããŸãã
ããããèªãã åŸãæçµçã«ãããã®åäœæ¹æ³ãæ£ããããã°ã©ã ããæ¹æ³ïŒ100500ã¬ãžã¹ã¿-1ïŒãç解ã§ããŸããããããŸã§ã®ãšãããé©åã«å®è¡ããæ¹æ³ã¯å®å šã«ã¯æããã§ã¯ãããŸããã ïŒããšãã°ãã¬ãžââã¹ã¿ãŒã«ã¢ã¯ã»ã¹ããé åºã¯éèŠã§ããïŒãã®å Žåãã©ã®é åºãæ£ãããããããéèŠã§ãªãå Žåã¯ãééããªãéèŠã§ããïŒïŒã
ãã¡ãããå€ãã®æçšãªæ å ±ã¯ã€ã³ã¿ãŒããããšãã©ãŒã©ã ã§èŠã€ããããšãã§ããŸãããããã«ãããã¹ãŠã®äŸãããã©ããå®éã«æ©èœããããæãããééããããããããã«ããããããã©ã®æ©èœãæ©èœããã®ãïŒãŸã çããªãïŒãã©ã®ãäŸã-æžããããã§ãã¯ã¯ããªãã£ãã圌ããããããããšãæãã§ããèè ã®ç©ºæ³ã®åãªãæ³åã
ããŠãããªãã¯ãããã®ãã¹ãŠã®æ®µéãçµãŠãä»ã§ã¯ç¢ºãã«ãã¹ãŠãç解ããŠããŸãã
ãããã®ãã¹ãŠã®ãã³ãå¿ èŠãªãã®ã«æ£ããæ¥ç¶ããããããããã»ããµã«æ£ããæ¥ç¶ãããã¹ãŠã®ã¬ãžã¹ã¿ãšãã®äžã«ããä»ã®ãã®ãæ£ããèšå®ããŸãã -æåŸã«...
ã¯ããã¯ãããã¹ãŠãæ£åžžã§ã-äœãæ©èœããŸããã§ããã
ããã¯æãåä»ãªæ®µéã§ã-ããŒã¿ã·ãŒãäžã§ãã¹ãŠãæ£ç¢ºãã€å³å¯ã«è¡ãããŠãããããŸã æ©èœããªãå Žåã åé¡ãé·ãéå±ãªãã®ã§ããããææ¡ããæçµçã«1 ... 5 ... 17ã®ãã°ãèŠã€ããŸãã ãã¡ããã§ãïŒ ããã¯ãããŒã¿ã·ãŒã/ãšã©ã¹ã§è¿°ã¹ãããŠããããšã§ãã ããŠãä»ã圌ããäœãæå³ããŠããã®ããæ確ã«ãªããŸããïŒãããŠãããªãèªèº«ãæšæž¬ã§ããããšïŒã
ããã ãã§ã
ã¢ããªã±ãŒã·ã§ã³ãç²åŸããŸããã
ä»ãããªãã¯ãã®ãããã§ç¹å¥ã§ãã
ãã¡ã³ãã¡ãŒã¬ã è³ã ããŒã« ãã¡ã³ã®çŸ€è¡ã æ å ãšæ¬¡ã®ãã£ãã©ã€ã³ã
泚ææ·±ãèªãã§ãã ããã ãã®åŸããããããã«æ°åèªã¿çŽããæçµçã«ãã®ãããã®äœ¿çšæ¹æ³ãç解ãå§ããŸãã ãã®åŸãæ£èª€è¡šãäœæããŠåãç¹°ãè¿ããç¹°ãè¿ããŸãã
ããããèªãã åŸãæçµçã«ãããã®åäœæ¹æ³ãæ£ããããã°ã©ã ããæ¹æ³ïŒ100500ã¬ãžã¹ã¿-1ïŒãç解ã§ããŸããããããŸã§ã®ãšãããé©åã«å®è¡ããæ¹æ³ã¯å®å šã«ã¯æããã§ã¯ãããŸããã ïŒããšãã°ãã¬ãžââã¹ã¿ãŒã«ã¢ã¯ã»ã¹ããé åºã¯éèŠã§ããïŒãã®å Žåãã©ã®é åºãæ£ãããããããéèŠã§ãªãå Žåã¯ãééããªãéèŠã§ããïŒïŒã
ãã¡ãããå€ãã®æçšãªæ å ±ã¯ã€ã³ã¿ãŒããããšãã©ãŒã©ã ã§èŠã€ããããšãã§ããŸãããããã«ãããã¹ãŠã®äŸãããã©ããå®éã«æ©èœããããæãããééããããããããã«ããããããã©ã®æ©èœãæ©èœããã®ãïŒãŸã çããªãïŒãã©ã®ãäŸã-æžããããã§ãã¯ã¯ããªãã£ãã圌ããããããããšãæãã§ããèè ã®ç©ºæ³ã®åãªãæ³åã
ããŠãããªãã¯ãããã®ãã¹ãŠã®æ®µéãçµãŠãä»ã§ã¯ç¢ºãã«ãã¹ãŠãç解ããŠããŸãã
ãããã®ãã¹ãŠã®ãã³ãå¿ èŠãªãã®ã«æ£ããæ¥ç¶ããããããããã»ããµã«æ£ããæ¥ç¶ãããã¹ãŠã®ã¬ãžã¹ã¿ãšãã®äžã«ããä»ã®ãã®ãæ£ããèšå®ããŸãã -æåŸã«...
ã¯ããã¯ãããã¹ãŠãæ£åžžã§ã-äœãæ©èœããŸããã§ããã
ããã¯æãåä»ãªæ®µéã§ã-ããŒã¿ã·ãŒãäžã§ãã¹ãŠãæ£ç¢ºãã€å³å¯ã«è¡ãããŠãããããŸã æ©èœããªãå Žåã åé¡ãé·ãéå±ãªãã®ã§ããããææ¡ããæçµçã«1 ... 5 ... 17ã®ãã°ãèŠã€ããŸãã ãã¡ããã§ãïŒ ããã¯ãããŒã¿ã·ãŒã/ãšã©ã¹ã§è¿°ã¹ãããŠããããšã§ãã ããŠãä»ã圌ããäœãæå³ããŠããã®ããæ確ã«ãªããŸããïŒãããŠãããªãèªèº«ãæšæž¬ã§ããããšïŒã
ããã ãã§ã
ã¢ããªã±ãŒã·ã§ã³ãç²åŸããŸããã
ä»ãããªãã¯ãã®ãããã§ç¹å¥ã§ãã
ãã¡ã³ãã¡ãŒã¬ã è³ã ããŒã« ãã¡ã³ã®çŸ€è¡ã æ å ãšæ¬¡ã®ãã£ãã©ã€ã³ã
ãã®èšäºã¯ãèªè ãéå±ãªæ®µéãã¹ãããããããã«ãããŸããã£ãã段éã«é²ãã§ããæ¬æãèªã¿ãããããããšãç®çãšããŠããŸãã
æè©-2ïŒã¹ãããã§ããŸãïŒ
äœå¹ŽãåïŒããå°ãïŒãWindows98以åã®æ代ã§ãããç§ã®å人ã¯ãããã®åœã®ãŠãŒã¶ãŒãšé¢å©ãããšäžå¹³ãèšã£ãŠããŸãããDOSããŒã ãç¥ãããWindows 3.11ãããã®ã§config.sysã«å ¥ããšæããŸãå¿ ãããã§ã¯ãããŸããããããã«ã-圌ãã¯ã³ã³ãã¥ãŒã¿ãŒãæã¡ããã§ãã
Lyric 2ãã¹ãããããŸããïŒ
ããã³ã«è¡ãããã«...ããã¯ã©ããªã³ãŒãã§ããïŒã
ç§ã¯ãã€ã誰ããäžãæ©ãåãã®ã奜ãã ãšæã£ãŠããŸããã ãããŠãäž¡æ¹ã®çš®ã«ã¯ååšããæš©å©ããããŸãã ïŒGuy KawasakiïŒ "...é»åã¬ã³ãžã¯ã©ã®ããã«ãšã©ãŒã¡ãã»ãŒãžãåºãããšãã§ããŸããïŒé»åã¬ã³ãžã¯ãŠã©ãŒã ã¢ããããå¿
èŠããããŸãïŒèª°ãç¹å¥ãªãã€ã¯ãæ³¢ããã°ã©ãã³ã°ã³ãŒã¹ãåãã¹ãã§ã¯ãããŸããïŒ"ïŒ
ä»æ¥ãèŠæ ãããèãããŸããããã圌ãã¯ãããã®Arduinsã人ã ãå°ç¡ãã«ããŠç¡ç¥ãçã¿åºããŠãããšèšããŸã-äœå¹ŽãåŠã°ãn + 1幎ã§ãçµéšãç©ãããã«-ããã°ã©ãã³ã°ãšé»åå·¥åŠã®æ·±ãç¥èãåŸãããšããã誰ãã圌ãã®ãããžã§ã¯ãããªãããããããã«æ¥ãã§è¡ããŸããã
ãã©ãŒããã©ãŒã
ããã§äœïŒ
ããã¯æ£åžžã ãšæããŸã-åµé çãªç²Ÿç¥ãšåµé æ§ãåãã人ãã¢ã€ãã¢ãæãã€ãïŒãŸãã¯ãã®éïŒããããå®è£ ããããšæããŸãã æãæ·±ãç¥èãæã£ãŠããªãã ããã¯æ£åžžã§ãã
ãŸããã€ã³ã¿ãŒãããã®å€æãã«ã¯ãããŒãžã®äžéšã«èªãããã«ç€ºããããªãã¡ãã·ã§ã³ããããŸãããããã®ãµã€ãã¯ãnotepad.exeã§å®å šã«æåã§äœæãããŸããã HTMLãšãã£ã¿ãŒã¯ãããŸããïŒã äœã«ã䌌ãŠããŸãããïŒ
åæã«ãããšãã°ãCãŸãã¯ã¢ã»ã³ãã©ãŒã§ããéå§ããŸããã§ãã-æåã®ã³ã³ãã¥ãŒã¿ãŒã¯ããŒãããçµã¿ç«ãŠãããŠå®å šã«ç©ºã§ãå°ãªããšãããŒãããŒããŒãåããããã«ãã¢ãã¬ã¹ãã¹ã®16ã®ãã°ã«ã¹ã€ãããš8ããŒã¿ãã¹ãã°ã«ã¹ã€ããã
倢ã®äžã§é·ãéãããããã®èµ€ããŒããš1ã®é·ãåãç§ã«æ¥ãŸããããããŠç§ã®æ¯ããã³ãè²·ãããã«ç§ãéã£ããšããç§ã®æåã®èãã¯ïŒ
ä»æ¥ãèŠæ ãããèãããŸããããã圌ãã¯ãããã®Arduinsã人ã ãå°ç¡ãã«ããŠç¡ç¥ãçã¿åºããŠãããšèšããŸã-äœå¹ŽãåŠã°ãn + 1幎ã§ãçµéšãç©ãããã«-ããã°ã©ãã³ã°ãšé»åå·¥åŠã®æ·±ãç¥èãåŸãããšããã誰ãã圌ãã®ãããžã§ã¯ãããªãããããããã«æ¥ãã§è¡ããŸããã
ãã©ãŒããã©ãŒã
ããã§äœïŒ
ããã¯æ£åžžã ãšæããŸã-åµé çãªç²Ÿç¥ãšåµé æ§ãåãã人ãã¢ã€ãã¢ãæãã€ãïŒãŸãã¯ãã®éïŒããããå®è£ ããããšæããŸãã æãæ·±ãç¥èãæã£ãŠããªãã ããã¯æ£åžžã§ãã
ãŸããã€ã³ã¿ãŒãããã®å€æãã«ã¯ãããŒãžã®äžéšã«èªãããã«ç€ºããããªãã¡ãã·ã§ã³ããããŸãããããã®ãµã€ãã¯ãnotepad.exeã§å®å šã«æåã§äœæãããŸããã HTMLãšãã£ã¿ãŒã¯ãããŸããïŒã äœã«ã䌌ãŠããŸãããïŒ
åæã«ãããšãã°ãCãŸãã¯ã¢ã»ã³ãã©ãŒã§ããéå§ããŸããã§ãã-æåã®ã³ã³ãã¥ãŒã¿ãŒã¯ããŒãããçµã¿ç«ãŠãããŠå®å šã«ç©ºã§ãå°ãªããšãããŒãããŒããŒãåããããã«ãã¢ãã¬ã¹ãã¹ã®16ã®ãã°ã«ã¹ã€ãããš8ããŒã¿ãã¹ãã°ã«ã¹ã€ããã
倢ã®äžã§é·ãéãããããã®èµ€ããŒããš1ã®é·ãåãç§ã«æ¥ãŸããããããŠç§ã®æ¯ããã³ãè²·ãããã«ç§ãéã£ããšããç§ã®æåã®èãã¯ïŒ
çµéšè±å¯ãªãã¬ãŒã§ãããé²æ©ããµããŒãããæ°äººãåãæ©äŒãå¢ãããããŸããŸãªã¿ã€ãã®ãŠãŒã¶ãŒããµããŒãããŠããŸãã
ã¯ã©ã€ã¢ã³ã-ãµãŒããŒã äžè¬çã«
ããããæåŸããå§ããŠäžã«ç§»åããã®ãçã«ããªã£ãŠããŸãã
ãã©ãŠã¶ãŒããã°ã©ã ãèµ·åãããµã€ãã®ååãå ¥åããŸã-ç»é¢ã«WebããŒãžã®ã³ã³ãã³ãã衚瀺ãããŸãã
ãã¡ããããã©ãŠã¶ã¯åçä»ãã®çŸããããŒãžãåä¿¡ããŸãããã倧éã®ããã¹ããHTMLã¿ã°ãåç/ãããªãžã®ãªã³ã¯ãªã©ããã¹ãŠããŸãšããŠãçŸããïŒæã«ã¯ïŒWebããŒãžãæäŸããŸãã
ããã¯ãã¹ãŠãHTTPãããã³ã«ã䜿çšããŠãµãŒããŒãšãã©ãŠã¶ãŒã®éã§éä¿¡ãããŸããHTTPãããã³ã«ã¯ããããã®éã®æ¥ç¶ã®ç¢ºç«ãšãã®åäœãå¶åŸ¡ããŸãã
ãããã¯ãŒã¯/ã€ã³ã¿ãŒããããæ±ã£ãŠããããããããã¯ãŒã¯/ã€ã³ã¿ãŒãããã§æ¡çšãããŠããã«ãŒã«ã«åŸã£ãŠéä¿¡ããããã«ããã®ããŒã¿ïŒHTMLãHTTPããã©ãããããïŒã¯ãã¹ãŠæ°ãããã¬ã€ã€ãŒã-TCP / IPã§ã©ãããããŸãã
TCPïŒTransmission Control ProtocolïŒã¯ãä¿èšŒãããæ¥ç¶ã®ç¢ºç«ãšããŒã¿ãã±ããã®é ä¿¡ãä¿èšŒããããã«äœ¿çšãããŸãã Webãã©ãŠã¶ïŒé»åã¡ãŒã«ã¯ã©ã€ã¢ã³ããªã©ïŒã¯æ£ç¢ºã«TCPã䜿çšããŸãã
ãããããTCPã«å ããŠãUDPïŒUser Datagram ProtocolïŒããããŸããUDPã¯ãæ¥ç¶ã®ç¢ºç«ãã¡ãã»ãŒãžã®é ä¿¡ã®ä¿èšŒãªã©ã®äºçŽ°ãªããšã«ãŸã£ããå°æãããæéãè²»ãããªãããããã·ã³ã¬ã³ã®ããã«ãã±ãããèœæžãããŸãããã ããæ¥ç¶ïŒãã£ãã«ïŒãé«å質ã§ä¿¡é Œæ§ã®é«ãå ŽåããŸãã¯ãã±ããã®æ倱ïŒãŸãã¯æ倱ã§ã¯ãªãïŒã«å³ããèŠä»¶ã課ãããŠããªãå Žåã«ã®ã¿äœ¿çšã§ããŸãïŒç¥ãããããæ°ããŸãïŒïŒã
ãã®èšäºã§ã¯UDPã¯èæ ®ãããŸããããW5100ã§ãå¯èœã§ãã
WebãµãŒããŒã¯ã€ãŒãµãããæ¥ç¶ãä»ããŠã³ã³ãã¥ãŒã¿ãŒã«æ¥ç¶ããããããããããã¹ãŠã¯å¥ã®ã¬ã€ã€ãŒã§ãããã€ãŒãµããããã¬ãŒã ãã«ãã©ããããããŸãã
å®éããåç¥ã®ããã«ãã€ãŒãµãããã䜿çšããã«æšæºã®RS-232ãã£ãã«çµç±ã§ãTCP / IPãéä¿¡ã§ããŸãã
ãã®ããããã¹ãã£ã³ã°ããŒã«ããããŸãããµãŒãã¹ãã€ãïŒãããããŒãïŒãšå®éã®ããŒã¿ïŒãã€ããŒãïŒãæã€ãã€ãã§æ§æãããã€ãŒãµããããã¬ãŒã ã§ãã
ãã®ããŒã¿ã«ã¯TCP / IPãã±ãããå«ãŸããŠããããã®ãã±ããã«ã¯ããããŒãã€ããšããŒã¿èªäœãå«ãŸããŠããŸãã
ãããŠããã®æåŸã®ããŒã¿ã¯ãHTTPããããŒã§æ§æãããŠãããé·ãéåŸ ãããŠãããHTML圢åŒã®ããã¹ããç»åãå°ãå·ããæéããããŸããã
EtheretetãTCPãããã³IPã«ã€ããŠã®è©±-W5100ã¯ããããã¹ãŠã®å°é£ã«å¯ŸåŠããé çãåãé€ããŸãïŒãããé åã§ãïŒïŒïŒé çã§ã¯ãªããW5100ã®é åã§ãïŒã
ããããHTTPã«ã€ããŠè©³ããèŠãŠãããŸããããW5100ããHTTPãååŸããŠåŠçããå¿ èŠãããããã§ãïŒWebãã©ãŠã¶ãŒããµãŒããŒã«èŠæ±ãéä¿¡ããå ŽåïŒãéã®å Žåãåæ§ã§ã-Webã«å¿çãããšãã«HTTPãäœæããŠW5100ã«æäŸããŸããã©ãŠã¶ã«ã
ãã®èšäºã§HTTPãããã³ã«ã®ãã¹ãŠã®ãã¥ã¢ã³ã¹ãå®å šã«é瀺ããããšã¯ã§ããŸããïŒç§ã¯HTTP / 1.1 RFC 2616ã«èå³ãæã£ãŠããŸãïŒãããã§ã¯æãåºæ¬çã§ãã·ã³ãã«ãªïŒãããéåžžã«äœ¿ããããïŒïŒWebãµãŒããŒãäžããã®ã«åœ¹ç«ã€ãã®ãæ€èšããŸãã
ãã©ãŠã¶ãŒã§Webãµã€ããéããšïŒäŸïŒ opticaldt.us-åºåã§ã¯ãããŸããïŒïŒããã©ãŠã¶ãŒã¯Webãµã€ããµãŒããŒã«ãªã¯ãšã¹ããéä¿¡ããŸãã
GET / HTTP/1.1
Host: opticaldt.us
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8,ru;q=0.6
ãã®è¡ã«æ³šæããŠãã ããïŒGET ...
ã... /ãã®åŸããHTTP / 1.1ãã®å-空ã
ã€ãŸããããã©ã«ãã§ã¯ãindex.htmlãã¡ã€ã«ïŒãŸãã¯index.htmïŒãèŠæ±ãããŸãã
ãµãŒããŒã®index.htmlãã¡ã€ã«ããã®ãµããã£ã¬ã¯ããªã«å®éã«ããå Žåããã©ãŠã¶ã¯ãããæ£åžžã«éããŸãã ãã®ãã¡ã€ã«ãååšããªãå ŽåïŒãŸãã¯ãäžè¬ã«ãä»»æã®ååãšæ¡åŒµåãæã€æ¬ èœãã¡ã€ã«ã®ãªã¯ãšã¹ããè¡ã£ãå ŽåïŒããµãŒããŒã¯ãšã©ãŒ404ããŒãžãè¿ããŸãïŒãããæåãã衚瀺ãããŸã-äžæ£ãªãªã¯ãšã¹ããžã®å¿çãšããŠãããäžããã®ã¯ãµãŒããŒã®ã¿ã¹ã¯ã§ãïŒå人çã«ãã®ãããªããŒãžãäœæããå¿ èŠããããŸãïŒã
ã¿ã€ãã«ãããããããã«ãã¯ã©ã€ã¢ã³ãïŒãã©ãŠã¶ïŒã¯ãèªèº«ã«é¢ããå€ãã®èå³æ·±ãæçšãªæ å ±ãå ±åããŸãã
ãµãŒããŒã¯éåžžã«ã·ã³ãã«ã§ãã¯ã©ã€ã¢ã³ãã«ç¹å¥ãªãã®ãéä¿¡ããŸããïŒããšãã°ãããããŒãã芪å¯ãªè©³çŽ°ããã¹ãŠæœåºãã次ã®ãããªããšã§ãŠãŒã¶ãŒãæããããããšã¯ãããŸããã 2éã®äœæãã¢ããŒãã¯ããªãã®ãã®ã§ã¯ãããŸãããããããã€ããŒã®ã¢ã«ãŠã³ãã¯3æ¥ã§çµäºããŸããè£å ããããšãå¿ããªãã§ãã ããããã®ãããªç»é¢è§£å床ãšWindowsXPã§ç«Fedorã«é€ãããæéã§ãããªããŸãã Mozillaã§ã¯ãªããIE 11ããããããããªãã¯ãŠã¯ã©ã€ãã®IPãæã£ãŠããã®ã§ãã倧ããªããããããããŸããããããããã¯Yevpatoriyaãªã®ã§ããhello againããªã©ïŒãæã ããã©ãŠã¶ããã®ãªã¯ãšã¹ãã§ã¯ãæåã®è¡ã®ã¿ã察象ã«ãªããŸããã¯ã©ã€ã¢ã³ãïŒãã©ãŠã¶ïŒããµãŒããŒããåä¿¡ããããã¡ã€ã«ãèŠã€ããããã«ã解æããšèšãããããã«ããããå¿ èŠã«ãªããŸãã
æãåçŽãªããŒãžã§ã³ã§ã¯ããµãŒããŒãæ©èœããŠããããšããã¹ãããããã«ããã¹ãŠã®èŠæ±ïŒã€ãŸãããã¹ãŠã®ãã¡ã€ã«ã®èŠæ±ïŒã«å¯ŸããŠåãHTMLããŒãžãéä¿¡ã§ããŸãã
ïŒå ã»ã©ããã®äŸã§ã¯ãããã¡ã€ã«ãindex.htmlãèŠæ±ãããå Žåã¯ããããä»ã®äœããèŠæ±ãããå Žåã¯ãšã©ãŒã®ããããŒãžãæž¡ããŸãïŒã
ããã§ã幞ããªããšã«ããã®ãµã€ãã®index.htmlãã¡ã€ã«ãããããµãŒããŒã¯ãããããŒãšindex.htmlãã¡ã€ã«ã®å®éã®ã³ã³ãã³ãã§æ§æãããã¡ãã»ãŒãžã§ãã©ãŠã¶ãŒã«å¿çããŸãã
HTTP/1.1 200 OK
Date: Sun, 13 Jul 2014 21:32:49 GMT
Server: Apache
Accept-Ranges: bytes
Vary: Accept-Encoding
Content-Length: 185
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html
<html> <head> <meta http-equiv = "Content-Type" content = "text / html; charset = Windows-1251"> <title> W5100 WebServer </ title> </ head> <body> <center>ããŠã<br> <b> Hello World ?! </ b> </ center> </ html>
æåã®è¡ïŒ "... 200 OK .."ïŒã§ã¯ããµãŒããŒã¯èŠæ±ãæ£ããïŒã€ãŸãããã®ãããªãã¡ã€ã«ãååšããïŒããšãå ±åããŸãã
ãContent-LengthïŒ185ãã®è¡ã§ã¯ããµãŒããŒã¯ãéä¿¡ããããã¡ã€ã«ã®é·ãïŒããæ£ç¢ºã«ã¯ãå ·äœçã«ã¯HTTPããããŒã®çŽåŸã«ç¶ãWebããŒãžã®é·ãïŒã«ã€ããŠã¯ã©ã€ã¢ã³ãïŒã€ãŸããã©ãŠã¶ãŒïŒã«èŠåããŸãã
ãã©ãŠã¶ãŒã§ã®äœæ¥ãå€å°ãªããšãæ£ãããªãããã«ããã«ã¯ãïŒãµãŒããŒïŒå¿çãšããŠïŒHTMLãã¡ã€ã«ã«å ããŠïŒHTTPããããŒã§å°ãªããšã3ã€ã®ãã©ã¡ãŒã¿ãŒãæå®ããå¿ èŠããããŸãã
HTTP / 1.1 200 OK
Content-TypeïŒtext / htmlïŒããšãã°ãåçã§ã¯ãªããããéä¿¡ããå ŽåïŒã
ã³ã³ãã³ãã®é·ãïŒïŒåŸã§ã«ãŠã³ãïŒ
å®éãææ°ã®ãã©ãŠã¶ã¯éåžžã«èªç±åºŠãé«ãããã3çªç®ã®ããããŒè¡ãåé€ã§ããŸãã ããã«ããã®äŸã§ã¯ããWebããŒãžããã¯ã©ã€ã¢ã³ãã«æäŸããåŸãåæããŸãããã®ãããã¯ã©ã€ã¢ã³ãïŒãã©ãŠã¶ãŒïŒã¯ãã¹ãŠãåãåã£ããšæšæž¬ããŸãã
ããã...ããŒãžãé·ãå ŽåããŸãã¯ãããšãã°ãåçãªã©ãéä¿¡ããå Žå -éä¿¡ããããŒã¿ãããã¯ã®é·ãïŒContent-LengthïŒã瀺ãæ¹ãé©åã§ãã
TCP / IPã«ã€ããŠå°ãã ã
äžèšã§W5100ãã€ãŒãµããããšTCP / IPã䜿çšããŠãã¹ãŠã®äœæ¥ãè¡ã£ãŠãããšæžãããšããç§ã¯çŸå®ãå°ãè£ é£ŸããŸããã äœãïŒã»ãã®å°ãïŒç§ãã¡ã¯ãŸã èªåã§ãããªããã°ãªããŸããã ããªãã¡ïŒæ¥ç¶ã確ç«ããããã»ã¹ãšãã®å®äºã管çããã
èŠããã«ããµãŒããŒãšã¯ã©ã€ã¢ã³ãã¯ãäºãã«IPãã±ããã転éããããšã§éä¿¡ããŸããIPãã±ããã«ã¯ãæçšãªãããŒã¿ïŒããšãã°HTMLããŒãžïŒãå«ãŸãããããæçšãªãããŒã¿ã®ãªãçŽç²ãªãµãŒãã¹ããŒã¿ã«ãªããŸãã
W5100ãããã»ããããŒã¿ã·ãŒããéããŠïŒã¯ããã¯ããä»ã§ãïŒããµãŒããŒã¢ãŒãã§ã¯ã©ã€ã¢ã³ãïŒãã©ãŠã¶ãŒïŒãšW5100ãéä¿¡ããæ¹æ³ãèããŠã¿ãŸãããã
ãŸããOPENã¢ãŒãã®W5100ã¯ããœã±ããïŒãããã¯ãŒã¯æ¥ç¶ïŒãéããŠäœæããããªã¹ãã³ã°ãã¢ãŒãïŒLISTENïŒã«åãæ¿ããŠãã¯ã©ã€ã¢ã³ãïŒãã©ãŠã¶ãŒãªã©ïŒããã®èŠæ±ãåŸ ã¡ãŸãã
ã¯ã©ã€ã¢ã³ãããã®èŠæ±ãå°çãããµãŒããŒãšã¯ã©ã€ã¢ã³ãéã§æ¥ç¶ã確ç«ããããšããµãŒããŒïŒW5100ïŒã¯ESTABLISHEDã¢ãŒãã«åãæ¿ããã ããŒã¿ãåœäºè éã§äº€æãããŸãã
泚ïŒæ²ç« ã«ãããšãIPãã±ããã®æ倧ããŒã¿ãµã€ãºã¯1500ãã€ãã§ãã ããŒã¿ã1ã€ã®ããã±ãŒãžã«åãŸããªãå ŽåïŒå€§ããªHTMLã³ãŒãããŸãã¯ç»åã転éããå¿ èŠãããå Žåãªã©ïŒãããŒã¿ã1500ãã€ãæªæºã®éšåã«åå²ãã1ã€ãã€è»¢éããå¿ èŠããããŸãã
ããã«ãåœäºè ãéã§çããŠãããã¹ãŠã®ãã®ãäºãã«è¡šæãããšãã圌ãã®ãã¡ã®1人ïŒäººçã®ããã«ïŒã¯åæèŠæ±ãéä¿¡ããããšã«ãã£ãŠæåã«ãé»è©±ãåããŸãããã
泚ïŒïŒå®å šãªïŒããŒã¿è»¢éåŸã«åžžã«åæãçºçãããšã¯éããŸããã ããšãã°ããã£ãã«ãé ãããŸãã¯å¹²æžãããããã©ãŠã¶ã¯å®äºãåŸ ã€ã®ã«ããããããŠãããã¿ã€ã ã¢ãŠãã§æ¥ç¶ãçµäºããŸããã ãŸãã¯ãWebãµãŒããŒã§äœãåé¡ãçºçããæãèå³æ·±ãå Žæã§åæããããšã«ããŸããã ãŸããäžè¬çã«ããã¹ãŠã¯äººçã§èµ·ãããŸãã
ãããã®éã®æ¥ç¶ãåæãããåŸããµãŒããŒã¯éããæ¥ç¶ïŒãœã±ããïŒã¢ãŒãã«ãªããŸã-éããããŸããïŒãŸããå¿ èŠãªããšã¯ãã¹ãŠèšããã/éä¿¡ãããŸããããªãä»ã«åŸ ã€ã®ã§ããïŒïŒã
ããã ãã§ã
ããªããã€ãã®éã®çµã®æ¯æè ã§ããå Žåãããã³/ãŸãã¯äžåºŠåå以äžãããå Žåã¯ãããã§åæ¢ã§ããŸãã
ããªãã人çã®æ¥œèŠ³äž»çŸ©è ïŒãŸãã¯æ°žç¶çïŒã§ããããµãŒããŒããããã2å以äžæ¥ç¶ããããšèããŠããå Žåã¯ããOPENãã¹ãããã«æ»ã£ãŠãåçã«åŸãã ãã§ãã ïŒéåžžãé©åãªãµãŒããŒããããè¡ããŸãïŒã ããããããããå°æ¥çã«ã¯å®äŸ¡ãªãã©ã¹ããã¯è£œã®äœ¿ãæšãŠãµãŒããŒãããã§ããããïŒ ã¿ã€ãã¯1å䜿çšããŸãã-ãããŠãããæšãŠãŸãããïŒ
ãããªãã§ãã§ããŸãïŒW5100ã®ãããã§ãïŒããããã«ã€ããŠã¯åŒãç¶ãèšåããŸãã å®éã«ã¯ãã¯ã©ã€ã¢ã³ããšãµãŒããŒéã§aketsã亀æãããæ¥ç¶ã¹ããŒã¿ã¹ãå€æŽããããã³ã«ã転éããããã±ããã§ãã©ã°ãéä¿¡ãããçŸåšäœãèµ·ãã£ãŠããã®ããã©ã®ããã«å¯Ÿå¿ããã®ãã瀺ãããŸãã
æãäžè¬çãªIPã¹ã¿ãã¯ã䜿çšããŸãã
IBM-360ãšAS-400ã®éè¡åž«ãšéè¡åž«ã¯ããã¹ã¿ãã¯ããšããçŸããèšèã§èª°ãæãããªãããã«ããŸãããã å®éãããã¯åãªããããã³ã«ã§ããããµãŒãã¹ãã£ãŒã«ããšå®éã®ããŒã¿ãã©ã®ãããªé åºã§ã©ã®ãããªé åºã§æç»ããããã瀺ãããŒã¿è»¢éãã©ãŒãããã§ãã ïŒZhvanetskyïŒã...ãããŠãã«ã¬ãªã¢äººã§ãããç§ãã¡ã®è¡šçŸãç解ããããšã¯ã§ããŸãããããã¯å€©åæ¡ä»¶ã«ãããããããåã«éšãæå³ããïŒãïŒ
7çªç®ã®ãã€ãã®3ã€ã®æäžäœãããFLAGSã«èå³ããããŸãã
ãããã®3ãããã®çµã¿åããã«ãããFINãSYNãRSTãPSHãACKãURGã®ãã©ã°ã圢æãããŸãã
FIN-ã»ãã·ã§ã³ã®çµäºã瀺ããŸãã
SYN-æ¥ç¶ã®åæåã
RST-æ¥ç¶ã®äžæïŒéåžžã¯ãšã©ãŒãžã®å¿çïŒ;
ACK-åé 確èªïŒããã±ãŒãžïŒ;
PSH-ç°¡ç¥å-確èªãããã«éä¿¡ããããã®èŠä»¶ã
URG-ããã±ãŒãžã®ã¢ãŒããã¯ãã£ã®è¡šç€ºã
奜å¥å¿IfçïŒç§°è³ã«å€ãã䟿å©ïŒãå®éã«ãã±ããã亀æãããã©ã®ãã©ã°ãèšå®ãããã©ã®ãããªå Žåã«ãä»ã®ãã¹ãŠã«-ä»ã®ããããŒãã£ãŒã«ãã¯äœã§ããïŒãŸããè¯ãããã¹ã¿ãã¯ãïŒ-èªåã§èŠã€ããªããã°ãªããŸããã ãã®èšäºã§ã¯ãW5100ãããã±ãŒãžãšãã©ã°ããã¹ãŠåŠçãããããããã«ã€ããŠã¯èæ ®ããŸããããçŸæç¹ã§ã®æ¥ç¶ã®ã¹ããŒã¿ã¹ïŒOPENãLISTENãESTABLISHEDãCLOSEDïŒãåŠçããŸãã
W5100ã®å¯èœãªéãç°¡åãªèª¬æ
ããŠãããã«ãã®ç¬éãé ãããããšã¯ã§ããŸãããéãšãœãããŠã§ã¢ã®åŽé¢ããW5100ãæ€èšããæã§ãã
äžæ¹ã§ã¯ãW5100ã¯ã€ãŒãµãããã³ãã¯ã¿ã«ïŒãã©ã³ã¹ãšæŽååè·¯ãä»ããŠïŒæ¥ç¶ããä»æ¹ã§ã¯ãã€ã¯ãã³ã³ãããŒã©ãŒããæ¥ç¶ããŸãã
ã¢ãã¬ã¹ãã¹ãšããŒã¿ãã¹ã䜿çšããŠããŸãã¯SPIã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠãïŒå¥œã¿ãç¶æ³ã«å¿ããŠïŒãã€ã¯ãã³ã³ãããŒã©ã«æ¥ç¶ã§ããŸãã
ããããã©ã®ããã«æ£ç¢ºã«æ¥ç¶ããã-ç§ã¯ãã€ã³ã¿ãŒãããäžã§å®å šãªèª¬æã§æ¢è£œã®åè·¯ããã€ã³ãããŸããã ããã«ïŒç§å¯ãã話ãããŸãïŒããã®äŸã§ã¯ããã®ããããåããæ¢è£œã®ããŒãã䜿çšããŸãã
ãããã«ã¯ãã€ãŒãµãããPHYããã³MACãã€ãŒãµããããã¬ãŒã ã®ãã³ãã©ãŒãããŒããŠã§ã¢ã«å®è£ ãããããã€ãã®IPã°ã«ãŒããããã³ã«ãå«ãŸããæ倧4ã€ã®ãœã±ããïŒãããã¯ãŒã¯æ¥ç¶ïŒãäœæã§ãããããã8KBã®ã¡ã¢ãªã®RXããã³TXãããã¡ãŒãå«ãŸããåãœã±ããã§çžäºã«å ±æã§ããŸããŸãã¯å ¬å¹³ã«ïŒãŸãã¯åçã«ïŒããœã±ããããšã«1.2.4ãŸãã¯8 KBãå²ãåœãŠãŸãïŒãã ãããããã¡ãŒå šäœã®ãµã€ãºãåä¿¡çšã«8KBã転éçšã«8KBã§ããããšãå¿ããªãã§ãã ããïŒã
ã¡ã¢ãªå²ãåœãŠïŒ
å³ãããããããã«ïŒ
ã¢ãã¬ã¹0x0000ããã¢ãã¬ã¹0x002FãŸã§ã¯ãã¹ãŠã®å ±éã¬ãžã¹ã¿ã§ããã
ã¢ãã¬ã¹0x0400ããã¢ãã¬ã¹0x07FFãŸã§-ã¬ãžã¹ã¿ã®4ã€ã®åäžã°ã«ãŒã-åãœã±ããã«1ã€ã
ã¢ãã¬ã¹0x4000ããã¢ãã¬ã¹0x5FFFãž-éä¿¡ãããã¡ïŒ8KBïŒãèªç±ã«ãœã±ããéã§åé ã§ããŸãã
ã¢ãã¬ã¹0x6000ããã¢ãã¬ã¹0x7FFF-åä¿¡ãããã¡ãŒïŒ8KBïŒãããã¯ãç¬èªã®å€æã§ãœã±ããéã§é åžããããšãã§ããŸãã
ãã¹ãŠã®ã¬ãžã¹ã¿ã¯8ãããã§ãã ã»ãšãã©ã®äººãèªã¿æžãã§ããŸãã
ãã¹ãŠã®ã¬ãžã¹ã¿ãæ€èšããã®ã§ã¯ãªããWebãµãŒããŒã®äœæã«å¿ èŠãªã¬ãžã¹ã¿ã®ã¿ãæ€èšããŸãããäžè¬çãªã¢ã€ãã¢ãç°¡åã«ç解ããç¹å®ã®ã¿ã¹ã¯çšã«ããã«éçºããããšãã§ããŸãã
éèŠãªãã€ã³ãïŒW5100ã¯ãäžè¬ã«ãããã°ãšã³ãã£ã¢ã³ããŸãã¯ããããã¯ãŒã¯ãªãŒããŒããšåŒã°ãããã€ããªãŒããŒã䜿çšããŸãã æ·±ãç§åŠçæå³ã¯ãæäžäœãã€ãã®æäžäœããããæåã«æ¥ãŠïŒéä¿¡ããïŒãæåŸãæäžäœãã€ãã®æäžäœãããã§ãããæãéèŠãªããšã«ã¯ãæäžäœãã€ããäžäœã¡ã¢ãªã¢ãã¬ã¹ã«ãããšããäºå®ã«èŠçŽãããŸãã ã€ãŸããããšãã°ããµãŒããŒã®IPã¢ãã¬ã¹ïŒããšãã°192.168.0.155ïŒã®4ãã€ãããœãŒã¹IPã¢ãã¬ã¹0x000F ... 0x0012ïŒSIPR0 ... SIPR3ïŒã¬ãžã¹ã¿ã«æžã蟌ãã«ã¯ãSIPR0ãã168ãã¬ãžã¹ã¿ã«ã192ããæžã蟌ãå¿ èŠããããŸãã -SIPR1ã§ã¯ãSIPR2ã§ã0ããSIPR3ã§ã155ãã
æ±çšã¬ãžã¹ã¿
ïŒäžè¬-ãããå šäœãšãã¹ãŠã®ãœã±ããã®åäœã«åœ±é¿ãäžããããšãæå³ããŸããã€ãŸãã ç¹å®ã®ãœã±ããã«ã¯é©çšãããŸãã ïŒã
0x0000 MR-ã¢ãŒã-ããã§ã¯ãã¹ãŠãæ確ã§ã-ããããéããŠãåäœã¢ãŒããèšå®ããŸãã
0x0001 ..0x0004 GAR0..3-ã²ãŒããŠã§ã€ã¢ãã¬ã¹ïŒäŸïŒ192.168.0.254ïŒ;
0x0005 ... 0x0008 SUBR0..3-ãµãããããã¹ã¯ã¢ãã¬ã¹ïŒäŸïŒ255.255.255.0ïŒ;
0x0009..0x000E SHAR0..5-ãœãŒã¹ããŒããŠã§ã¢ã¢ãã¬ã¹
ïŒã€ãŸããMACã¢ãã¬ã¹ãããšãã°0A 1B 2C 3D 4E 5FïŒã
ïŒãµãŒããŒã§åžå Žãããµããããªãå Žåãä»»æã®MACãæå®ã§ããŸããäž»ãªããšã¯ããããã¯ãŒã¯ã«åãMACã¢ãã¬ã¹ãæã€ããã€ã¹ããªãããšã§ã-競åã¯å¿ èŠãããŸããããïŒïŒ
0x000F ... 0x0012 SIPR0..3-éä¿¡å IPã¢ãã¬ã¹-WebãµãŒããŒã®ã¢ãã¬ã¹ãäŸïŒ192.168.0.155;
0x001A-RMSR-RXã¡ã¢ãªãµã€ãº-ããã§ã¯ãåãœã±ããã®åä¿¡ãããã¡ã®ã¡ã¢ãªéãæå®ããŸãã
0x001B-TMSR-TXã¡ã¢ãªãµã€ãº-ããã§ã¯ãåãœã±ããã®è»¢éãããã¡ã®ã¡ã¢ãªéãæå®ããŸãã
ãœã±ããã¬ãžã¹ã¿
ãã®äŸã§ã¯ã1ã€ã®ãœã±ãããšãTCP / IPãµãŒããŒã«å¿ èŠãªã¬ãžã¹ã¿ã®ã¿ãæäœããããããããã®ã¬ãžã¹ã¿ã®ã¿ãèæ ®ããŸãã
0x400 S0_MR-Socket0ã¢ãŒãã¬ãžã¹ã¿-ãã®ç¹å®ã®ãœã±ããã®åäœã¢ãŒããèšå®ããŸãã
0x0401 S0_CR-Socket0ã³ãã³ãã¬ãžã¹ã¿-ããã§ã¯ãæ¥ç¶ã®ç¶æ ãå¶åŸ¡ããã³ãã³ããèšå®ããŸãã
0x0403 S0_SR-Socket0ã¹ããŒã¿ã¹ã¬ãžã¹ã¿-ãããããçŸåšã®ã¹ããŒã¿ã¹ã«é¢ããããŒã¿ãèªã¿åããŸãã
0x0404ã0x0405 S0_PORT0ãS0_PORT1-Socket0ãœãŒã¹ããŒã-ãµãŒããŒã䜿çšå¯èœãªããŒãïŒããæ£ç¢ºãªå Žå-éãããœã±ããã䜿çšå¯èœãªããŒãïŒã
æ£çŽã«èšããšããµãŒãã¹ãåç §ãããšãã¯ããããã³ã«ããã®ãµãŒãã¹ã®ãµãŒããŒã¢ãã¬ã¹ãããŒãçªå·ïŒããã³ãã¡ã€ã«ã®ååãšãã®ãã«ãã¹ïŒãå®å šã«ç€ºãå¿ èŠããããŸãã
ããšãã°ãããŒã123ãä»ããŠãœã±ããã«ã¢ã¯ã»ã¹ã§ããã¢ãã¬ã¹192.168.0.155ã®ãµãŒããŒã«ããindex.htmlãã¡ã€ã«ãå¿ èŠãªå Žåããã©ãŠã¶ã®URLããŒïŒã€ãŸããã¢ãã¬ã¹ããŒïŒã«æ¬¡ã®ããã«èšè¿°ããå¿ èŠããããŸãã
192.168.0.155ïŒ123 / index.html ïŒEnterããŒãæŒããŸã§åŸ ã¡ââãŸãïŒã
ããã...ãhttpïŒ// ...ãã®ãããªæ¥ç¶ã®å ŽåïŒã€ãŸããHTTPãããã³ã«ã®å ŽåïŒãããŒã80ãå²ãåœãŠãã®ãæ £äŸã§ãã
ãããã£ãŠãSocket0 Source Portã«ããŒãçªå·80ãå²ãåœãŠãå Žåããã©ãŠã¶ãŒã®ã¢ãã¬ã¹ããŒã«ããŒãçªå·ãå ¥åã§ããŸãããããŒããæå®ãããŠããªãå Žåããã©ãŠã¶ãŒã¯å®çŸ©äžã 192.168.0.155 / indexãšãã圢åŒã®URLã®çµæãšããŠãã®ããŒãã䜿çšããããã§ãhtmlã¯ãšã©ãŒãªãã§æ©èœããŸãã ïŒããäžè¬çã«ã¯ãããã¯ããã©ã«ãããŒãããããã¹ãŠã®å Žåã«åœãŠã¯ãŸããŸã
-ãµãŒãã¹ãžã®ã¢ã¯ã»ã¹æã«ããããæå®ããªãå Žåãã¯ã©ã€ã¢ã³ãã¯ããã©ã«ãããŒãïŒHTTPã®å Žåã¯80ãTelnetã®å Žåã¯23ãªã©ïŒãééããŸãã
ãŸãã以åã«åæããããã«ãèŠæ±ããããã¡ã€ã«ã®ååãæå®ããªãå Žåãåæ¹ãindex.htmlïŒãŸãã¯index.htmïŒïŒãŸãã¯index.phpïŒãã¡ã€ã«ã«ã€ããŠè©±ããŠãããšæ³å®ããã®ãæ £äŸã§ãã ãã®ããããã©ãŠã¶ã®ã¢ãã¬ã¹ããŒ192.168.0.155ã§æå®ãããšããµãŒããŒããæ£ããå¿çãè¿ãããŸãïŒã€ãŸããã¯ã©ã€ã¢ã³ããç¹å®ã®ãã¡ã€ã«åãèŠæ±ããªãå Žåãã€ã³ããã¯ã¹ãã¡ã€ã«ãæåŸ ããŠããããšãããããŸãïŒïŒããšãã°ãã¯ã©ã€ã¢ã³ãããã£ã¬ã¯ããªãèŠæ±ãããã®å 容ãã¿ããªãšã¿ããªã«èŠããŠæ¥ããããïŒããšãã°ãç«ãã¹ã¯ãªããã®åçãªã©ïŒå ŽåãããŒãžã«ã404ãšã©ãŒããäžããã®ã¯éåžžã«é¢çœããªãã§ãããïŒã
ã¢ãã¬ã¹ã®å ¥åã«ãããæéãå®å šã«ç¯çŽããããã«ããããã³ã«ã®ã¿ã€ããæå®ããªãå Žåããã©ãŠã¶ã¯èªåçã«ãããHTTPã§ãããšèŠãªããŸãïŒãã¡ããããã©ãŠã¶ããããæããIEã§ãªãéã... OKãããã¯éèŠã§ã¯ãããŸãããå¿ããŠããŸããŸããïŒã
ãããã£ãŠãã¢ãã¬ã¹ããŒ192.168.0.155ã«æžã蟌ãã ãã§ããã¹ãŠã®é¢ä¿è ã¯192.168.0.155ã«ã€ããŠè©±ããŠããããšãç解ã§ããŸãïŒ80 / index.html
ã ãããããã¯æ±ºãŸã£ãŠãããïŒ ãµãŒããŒã®ãœã±ããããŒãã¢ãã¬ã¹ã80ã«èšå®ããŸãã
åæã«ããããã°ãšã³ãã£ã¢ã³ããå¿ããªãã§ãã ããããããã£ãŠã80ïŒããæ£ç¢ºã«ã¯-0080ïŒã¯æ¬¡ã®ããã«èšè¿°ãããŸããS0_PORT0= 00ãS0_PORT1 = 80ïŒã¯ãããããã¯10é²æ°ã®ã80ãã§ããã16é²æ°ã§ã¯ãªãããšãå¿ããªãã§ãã ããïŒã
0x0420ã0x0421 S0_TX_FSR0ãS0_TX_FSR1-Socket0 TX Free Size-ãœã±ãã0éä¿¡ãããã¡ãŒã®ç©ºãé åã®ãµã€ãºã
0x0422ã0x0423 S0_TX_RD0ãS0_TX_RD1-Socket0 TXèªã¿åããã€ã³ã¿ãŒïŒ*èªã¿åãå°çšïŒ-転éãããã¡ãŒå ã§ãã¯ã©ã€ã¢ã³ãã«éä¿¡ããïŒããŒã¿ïŒããŒã¿ãããã¯ã®å é ã瀺ããŸãã
ããã«ã¯æ±ãã«ããå°ããªãã®ããããŸãïŒWiznetã¯ãããŒãã€ã¶ããããšã«æ±ºããŸããïŒãããšãã°ãSocket0 TXèªã¿åããã€ã³ã¿ãŒãèªã¿åããããšãã°ã¢ãã¬ã¹0x4200ãæããŠããå Žåã...æ£ãã-ããã¯ã転éã«ããŒã¿ãæžã蟌ãå¿ èŠããããšããæå³ã§ã¯ãããŸãããã®å Žæããå§ãŸããããã¡ã ããããã...ïŒãé転ããŠãã女æ§ãå·Šæã瀺ããŠããå Žå-ããã¯åœŒå¥³ããŸã£ããã«è¡ãããšãæå³ããªãïŒãïŒCïŒïŒã ããã«ã€ããŠã¯åŸã§è©³ãã説æããŸãã
0x0424ã0x0425 S0_TX_WR0ãS0_TX_WR1-Socket0 TXæžã蟌ã¿ãã€ã³ã¿ãŒ-ã¯ã©ã€ã¢ã³ãã«éä¿¡ïŒããŒã¿ïŒããããŒã¿ãããã¯ã®çµããã転éãããã¡ãŒã§ç€ºããŸãã
ããã§éèŠãªèª¬æãããå¿ èŠããããŸãã
æåŸã®2ã€ã®ã¬ãžã¹ã¿ã¯ããããã¡ã«éä¿¡ããããŒã¿ã®ãããã¯ãæžã蟌ãå¿ èŠãããç©çã¢ãã¬ã¹ã決å®ããŸããã ãããã®ã¢ãã¬ã¹ãèªåã§ææ¡ããå¿ èŠããããŸãã
ãã1ã€ã®æ³šæïŒè»¢éãããã¡ã«2KBãå²ãåœãŠããšããŸãããã Socket0 TXèªã¿åããã€ã³ã¿ãŒãèªã¿åãããããã¡ãŒã®æåŸã®10ãã€ããæãããšãå€æããŸããã ãŸããäžè¬çã«1000ãã€ãã転éïŒã€ãŸãããããã¡ã«æžã蟌ãïŒããããšãæå³ããŠããŸããã ã©ããã
ç°¡åã§ãïŒãããã®10ãã€ãã«è»¢éããããŒã¿ãæžã蟌ãã§ããããããã¡ãŒã®å é ã«ç§»åããæ®ãã®ããŒã¿ãããã«æžãç¶ããŸãïŒã€ãŸããããŒã¿ã®1000ãã€ãããã10ãã€ãããããã¡ãŒã®æåŸã«é 眮ããã990ãã€ãã®æ®ãã®éšåãå é ã«ãªããŸãïŒãããã¡ïŒã
W5100ã¯ãã®äžåèªãç¥ã£ãŠããïŒå®éããããäœã£ãã®ã¯åœŒã§ããïŒããããã£ãŠãçµããã«éããåŸããããã¡ã®å é ã«ãžã£ã³ãããŠãæ®ãã®éšåãèŸæ±åŒ·ãèªã¿äžããŸãã
ããŠããã®åé¡ã«å¯ŸåŠããŸããããã¬ãžã¹ã¿ã§æå®ããããã€ã³ã¿ããã転éãããã¡ã«ããŒã¿ãæžã蟌ãç©çã¢ãã¬ã¹ãèšç®ããæ¹æ³ã§ãã
ãã¡ããããã¹ãŠã®ã¢ãã¬ã¹ãããŒãã³ãŒãã£ã³ã°ããŠã¹ã³ã¢ä»ãããããšãã§ããŸãããç§ãã¡ãæãæ£ç¢ºãªããã°ã©ããŒã§ãããã€ã³ã人ã®ãããªãã®ã§ã¯ãªãã1æéããã3ãã«ã§èšç®ããäžè¬çãªååãèæ ®ããããããå Žé¢ã§æãæ®éçãªããã°ã©ã ãäœæããŸãã
誰ããããŒã¿ã·ãŒããèªãããšã«æ±ºããå Žåãå®æ°ãšå€æ°ã®ããŒã¢ããã¯ãã§ããã ãããŒã¿ã·ãŒãã«è¿ã¥ããŠããã®ã§ãç§ã®äŸãããŒã¿ã·ãŒãã®èª¬æãšæ··åããªãããã«ããŠãã ãããïŒã¬ãžã¹ã¿ã®ååã¯ããŒã¿ã·ãŒããšãŸã£ããåãããã«ç€ºããŸãã;ãã¡ãããã¢ãã¬ã¹ãïŒã
ãã®ããã䟿å®äžãå€æ°
S0_TX_BASE-Socket0éä¿¡ãããã¡ãŒã®ããŒã¹ã¢ãã¬ã¹ã玹ä»ããŸãã
ã¡ã¢ãªå²ãåœãŠã®å³ãèŠããšã0x4000ã®ããã§ãã
W5100ãããããŒãã¢ãã¬ã¹ã«ãªãå Žåã¯ã©ãã§ããããïŒã€ãŸããããšãã°ãã·ã¹ãã ã®ã¢ãã¬ã¹ç©ºéã§ãããã®ããŒããã¢ãã¬ã¹ãã·ãããããã·ã¹ãã ã§ïŒããšãã°ïŒãããã®ãŒãã¢ãã¬ã¹ã¯0x1984ã§ãã
ããã«ïŒSocket0ã§ãã¹ãŠãã¯ãªã¢ãªå ŽåãSocket1ã®ããŒã¹ã¢ãã¬ã¹ïŒãããã¢ãã¬ã¹ã®æœåšçãªãªãã»ããã«å ããŠïŒã¯ãåãœã±ããã®ãããã¡ãŒã«å²ãåœãŠãã¡ã¢ãªéã«ãäŸåããŸãã
ã€ãŸããåã³ããŒããã©ã€ããå®è¡ããããTMSRã¬ãžã¹ã¿ïŒè»¢éãããã¡ãŒã®å ŽåïŒããæ£ããæ¹æ³ã§ãèªã¿åããåãœã±ããã«å²ãåœãŠãããŠãããããã¡ãŒã¡ã¢ãªã®éã確èªããŠãåãœã±ããã®ãããã¡ãŒã¡ã¢ãªé åã®éå§äœçœ®ããèšç®ãããããšãã§ããŸãã
äžè¬ã«ãç§ã¯ããªãã«èŠåããŸããããããŠãç§ã®äŸã§ã¯ãç°¡åã«ããããã«ã圌ãæ¿ããæã¡ãŸããïŒ
S0_TX_BASE = 0x4000ã
S0_TX_MASK-ãã¹ã¯ããèšç®ãã§ããã«å¿ èŠã«ãªããŸãã
åæ§ã«ããã¹ã¯ã¯ãè¯ãæ¹æ³ã§ããœã±ããéã®ãããã¡ãŒã¡ã¢ãªå²ãåœãŠã¬ãžã¹ã¿ïŒTMSRïŒã«æžã蟌ãŸãããã®ïŒæ¹æ³ãæ¹æ³ïŒã«åºã¥ããŠããœã±ããããšã«èšç®ããå¿ èŠããããŸãã
ç§ã¯äœãèšç®ããŸããïŒç§ã¯ãã€ãŠç§ãå°ã£ãããšã ãšæã£ãŠããŸããããå®æçãªèªè ã«ãªã£ããšããHabrã¯ãã¹ãŠãæ£åžžã§ããããšã«æ°ä»ããŸãã-ç§ã¯ãã å 延ã°ãããŠããïŒãç§ã¯åãœã±ããã«2KBãå²ãåœãŠãŸããïŒããªããèŠããŠããããã«ãããã¯2000ã°ã©ã ããã ã2048ãã€ãïŒããããããã¹ã¯ã¯2048 -1 = 2047ïŒ0x07FFïŒã§ãã
åèšããã®äŸã§ã¯ãS0_TX_MASK = 0x07FFã«ãªããŸãã
æ··ä¹±ãè¿œå ããåèªãæã£ãŠè§£ããŸãã
äžã§æžããããã«ãã¬ãžã¹ã¿ïŒèªã¿åãå°çšïŒS0_TX_RD0ãS0_TX_RD1ã¯ããœã±ãã転éãããã¡ãŒã«ãã転éããŒã¿ã®ãããã¯ã®å é ãžã®ãã€ã³ã¿ãŒã§ãã
ãã£ãšæ£ç¢ºã«èšãã°ãããã¯ãçŸæç¹ã§ãããã¯ãŒã¯ã®å€éšã«éä¿¡ãããããŒã¿ã®ç¹å®ã®ãã€ããžã®ãã€ã³ã¿ãŒã§ãïŒããã¯ãä»èªãã§ããããã«ãéä¿¡ã«é¢ããŠã¯ããã§ã¯ãããŸããïŒã
ãããŠãããŒã¿ã¯ãéä¿¡ããããã€ãã®çŸåšã®ã¢ãã¬ã¹ïŒãããã¡å ïŒãããŒã¿ã®ãããã¯ã®çµããã«éãããŸã§éä¿¡ãããŸããããŒã¿ã®ãããã¯ïŒãããã¯ã®çµãããžã®ãã€ã³ã¿ïŒã¯ãã¬ãžã¹ã¿S0_TX_WR0ãS0_TX_WR1ã®ãã¢ã«èšé²ãããŸãã
ã€ãŸããå®éã«ã¯ãW5100ã¯è»¢éãããã¡ãŒããããŒã¿ã®ãã€ããåŒãåºããŸããããã¯ãS0_TX_RD0ãS0_TX_RD1ã®ã¬ãžã¹ã¿ãŒã®ãã¢ã§ç€ºããããããã¯ãŒã¯ã«ãããåãåºãããã®åŸãã¬ãžã¹ã¿ãŒãã€ã³ã¯ãªã¡ã³ããããã®ã¬ãžã¹ã¿ãŒãæã次ã®ãã€ãã«é²ã¿ãŸãã ïŒãã¬ãžã¹ã¿S0_TX_WR0ãS0_TX_WR1ã®ãã¢ãšå€ãçãããªããŸã§ã€ã³ã¯ãªã¡ã³ãããããã®æç¹ã§ããŒã¿è»¢éãçµäºããŸããïŒãããã£ãŠããã¹ãŠã®ããŒã¿ã転éãããšãS0_TX_RD0ãS0_TX_RD1ã®å 容ã¯S0_TX_WR0ãS0_TX_WR1ã®å 容ãšçãããªããŸãïŒã
玳士ãç§ã¯ãã®ãã¹ãŠã®éå±ãã®ããã«ç§ã®èš±ããèš±ããŸããç§ã¯æ¬åœã«èª°ãããŒãããããããŸããã§ãããããããªãã§ã¯ã§ããŸããã§ããïŒç§ã¯å¿ã§ããºããããåãå ¥ããŸããïŒãããå°ãèããŠãããã¯ããã«çµäºããŸããã³ãŒããŒãã¬ã€ã¯ã¯éåžžã«è¿ãã§ãã
OKã転éãããã¡ã«äœããæžãå§ããŸãããã
5ã€ã®ã¢ã¯ã·ã§ã³ã§ãã¹ãŠã1è¡ã§å®è¡ããããã§ã¯ãããŸããããäœãèµ·ãã£ãŠããã®ããæ確ã«ãªãããã«ãã¹ãããããšã«å解ããŸãã
ããã€ãã®å€æ°ãçæããŸãïŒ
OffsetïŒS0_TX_OFFSET = make16ïŒS0_TX_RD0ãS0_TX_RD1ïŒ
// 2ã€ã®8ãããã¬ãžã¹ã¿ãã€ã³ã¿ãŒãã16ãããå€æ°ããªãã»ããããäœæããŸã
//ãããã°ãšã³ãã£ã¢ã³ããªã®ã§ãæäžäœãã€ããã¬ãžã¹ã¿ãŒã«ããããšãå¿ããªãã§ãã ããS0_TX_RD0ã
//ããã³æ幎å°-S0_TX_RD1ã®å Žå
ããã®ãã€ã³ã¿ãŒã¯éåžžããããã®ã¢ãã¬ã¹ç©ºéã®å€åŽãæãããšããããŸãïŒã©ã€ãã¢ããªã±ãŒã·ã§ã³ã§ãããã®ã¬ãžã¹ã¿ãèªã¿åãå Žåã¯ãèªåã§ç¢ºèªããŠãã ããïŒããã®ãœã±ããçšã«äºçŽããããŸãŒã³å ïŒã€ãŸããé£ã¹ãïŒ b ïŒã¢ãã¬ã¹ã®ç©ççç¯å²å ã
ïŒç§ãã¡ã¯ãã¬ãžã¹ã¿ã®å€ãè¿ãå€ïŒå€ïŒã®çŸå®ã«ãããŸããã
S0_TX_OFFSET =ïŒS0_TX_OFFSETïŒS0_TX_MASKïŒ
ç§ãã¡ã¯ä»ãæ¬åœã®ãèšç®ç©çæã ã¯è»¢éã«æã ã®ããŒã¿ã®æžã蟌ã¿ãéå§ããå¿ èŠããããŸãã¢ãã¬ã¹ïŒ
S0_TX_Start_Addr = S0_TX_OFFSET + S0_TX_BASE
ãŸãããä»æã ãæã£ãŠããŸã転éãã€ãã®èªã¿åããéå§ããå Žæããããã«æ瀺ãããã€ã³ã¿ãŒããœã±ããã®è»¢éãããã¡ãŒïŒSocket0ïŒã®ç©çã¢ãã¬ã¹ãèšç®ããïŒããšãã°ïŒè»¢éã«ããŒã¿ãã¢ããããŒãããŸãã-èšç®ããç©çã¢ãã¬ã¹ãããããã®è»¢éãããã¡ãŒã«ã
ãããã¯ã転éãããã¡ããããŒã¿ãèªã¿åãæéãã©ã®ããã«ç¥ãã®ã§ããïŒ
ããã¯ãåè¿°ã®ã¬ãžã¹ã¿ïŒãã¢ïŒ-Socket0 TX Write Pointerã«ãã£ãŠåœŒã«ç€ºãããŸãã
ãããŸã§ã®ãšãããSocket0 TXèªã¿åããã€ã³ã¿ãŒãšSocket0 TXæžã蟌ã¿ãã€ã³ã¿ãŒã®å€ã¯åãã§ãã
ïŒäžèšãåç §ïŒããŒã¿ãããã¯ã転éãããåŸããããã®å 容ã¯åãã«ãªããããŒã¿ã»ããå ã®åèªã§ã¯ãªãããããã®ãªã»ããåŸãçãããããã§ãã
æåŸã®ä»äžã-転éãããã¡å ã®ããŒã¿ãããã¯ã®æåŸãæãå¿ èŠããããŸãã
泚æïŒ-転éãããã¡ã«ããŒã¿ãããŒãããããã«å¿ èŠãªç©çã¢ãã¬ã¹ãšã¯ç°ãªããããã§ã¯ãã¡ã¢ãªå ã®èªåèªèº«ã®å éšãããè¡šçŸã§åäœããŸãã
ã€ãŸããéä¿¡ããŒã¿ãããã¯ã®é·ãã ããæžã蟌ã¿ãã€ã³ã¿ãŒã®å 容ãå¢ããã ãã§ã
ãSocket0TXæžã蟌ã¿ãã€ã³ã¿ãŒ= Socket0 TXæžã蟌ã¿ãã€ã³ã¿ãŒ+ Data_Block_Lengthã
é ãæ¢ã«å転ããŠãããšä»®å®ãããšããSocket0 TX Write PointerãïŒ16ãããïŒãšã¯ã8ãããã®ã¬ãžã¹ã¿S0_TX_WR0ïŒäžäœãã€ãïŒãšS0_TX_WR1ïŒäžäœãã€ãïŒã®å 容ãæå³ããããšãæãåºããŸãã
ïŒãããŠ-ã¯ãã-ããªããç²ããŠããå Žå-ããªãã¯ã³ãŒããŒãšç ã飲ãããšãã§ããŸããç§ã¯åŸ ã¡ãŸã...ïŒ
! ⊠, ⊠. , , â â â , .
: ? , . - â . Deal?
èšäºãžã®æåŸ ãåžæããŠããã°ãæ°ãã段èœããšã«æº¶ããŠããŸããŸãã
ã¯ã-èªè ã¯ããããã...ãµãŒããŒã5åã§ïŒãã§ãããè²·ã£ããšæããŸããåŸ ã£ãŠãã ãã-ããªãã¯ãŸã ã³ãŒããèŠãŠããŸããïŒããããããã¯ãã¡ãããçããã®ã§ã¯ãããŸããããå°ãéããããŸãããããã¯ãã¹ãŠã³ã¡ã³ããè±å¯ãªããã§ãããŸãã«ãå€ãåé€ããŠãæçšãªã³ãŒãã ããæ®ã£ãŠããå Žåã¯ããããã³ã«æžãçããŸãïŒãããŠã100ããŒãžã®ããŒã¿ã·ãŒããèªãã®ã«2æ¥éããããããã10åéèªãæ¹ãè¯ãã§ãã 5åéã®ãã¬ãŒãã³ã°ã§ã®æŠé-ã誰ããã£ã³ã»ã«ããŸããã§ããã
ã¯ããããã§ã-ã¢ã«ãŽãªãºã ã
ååãšããŠãç§ã¯ããã°ã©ã ã§äœãè¡ãããŠããããç解ããã®ã奜ãã§ããããŒãã£ãŒããæã€ããšã奜ã¿ãŸããåæ§ã«ãããã«ã³ãŒããæžããããšããå§åçãªæ¬²æ±ã«ãããããããç§ã¯éåžžããããŒãã£ãŒããäœæããŠæåã«äœæ¥ããããžãã¯ããããã°ããããããã³ãŒãã«ç§»ããŸãã WebãµãŒããŒãã©ã®ããã«æ©èœããããç解ããŸãããïŒåçãåç §ïŒã
ã1åèãããã100åèŠãæ¹ãè¯ãããšããååããŸã æ©èœããŠããå Žåãããããåçã«æžãããŠããããšã説æããŠãæå³ããããŸããã
ã¡ããã©2ã€ã®åèªïŒ
ããã»ã¹å¶åŸ¡ã¯ãS0_CRïŒSocket0ã³ãã³ãã¬ãžã¹ã¿ïŒïŒ0x0401ïŒãä»ããŠè¡ãããŸãã
çŸåšã®ã¹ããŒã¿ã¹ïŒæ¥ç¶ãªã©ïŒã®ç¢ºèª-S0_SRïŒSocket0ã¹ããŒã¿ã¹ã¬ãžã¹ã¿ïŒïŒ0x0403ïŒãä»ããŠã
ååãšããŠãç¶æ ãã§ãã¯ã¯ãœã±ããå²ã蟌ã¿ã¬ãžã¹ã¿ãä»ããŠïŒã€ãŸããå²ã蟌ã¿ã«ãã£ãŠïŒå®è¡ã§ããŸãããã»ãšãã©ã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯è¶ é«éã¯äžèŠã§ããããã®ãããªå Žåã«ã¯ãã¹ããŒã¿ã¹ã¬ãžã¹ã¿ã®ããŒãªã³ã°ã«ããäœæ¥ãæ£åœåãããŸãã
ã€ãŒãµãããã·ãŒã«ãæ¥ç¶-PICã³ã³ãããŒã©ãŒãž
ããã§ããé žæŽã«ã¯æå³ããããŸãã-åçã«ãã¹ãŠã瀺ãããŠããŸãã
ãã³ãïŒããŒãã®2x3ããããŒïŒããŒãã®äžã«ãããå³ã«ã¯è¡šç€ºãããŠããŸããïŒã¯ãèã£ãºãã§ãã°ããããŸãã䜿çšãããã³ã³ããŒãã³ãã®åŽé¢ããçŽæ¥ã¯ã€ã€ãããŒãã«ã¯ãã ä»ãããããšããå§ãããŸãã
ããŒãæ¥ç¶-ãã€ã¯ãã³ã³ãããŒã©ãŒã®ãã³ãåŒããŸããã§ãããããã¯ããã°ã©ã ã§èª¬æãããŠãããããã«ããã³å²ãåœãŠããã°ã©ã ãã奜ã¿ã«å€æŽããã ãã§ã奜ããªããã«æ¥ç¶ã§ããŸãã
ããã°ã©ã ïŒãã§ãã¯æžã¿-åäœããŸãïŒïŒ
æ¬ç©ã®ç§åŠè ïŒïŒïŒãšããŠã人éïŒãŸãã¯å®éšåç©ïŒã§äœãããã¹ãããåã«ãç§ã¯åœŒå¥³ã®ä»äºãæåã«èªåã§ãã¹ãããã®ã§ããã®èœåã倱ã£ãŠããªããã°åœŒå¥³ãä¿¡é Œã§ããŸãã
ãã®ããã°ã©ã ã¯ãCCSã³ã³ãã€ã©ãŒã§äœæãããŠããŸãã䟿å©ãªIDEã«åé¡ãªãç°¡åã«ããçŽããŸãïŒç§»æ€-ããŸãã«ã倧声ã§èšãããŸãïŒã
PIC16F77ãã³ã³ãããŒã©ãŒãšããŠäœ¿çšãããŸããïŒå®æãããã¢ããŒãã§æå ã«ãããŸããïŒãåæ§ã«ãã©ã®PICã§ãç°¡åã«èª¿æŽã§ããŸãïŒå®éã«ã¯-ããã»ããµå®çŸ©ã«1è¡ãããŸãïŒããªãœãŒã¹ãã»ãšãã©æ¶è²»ããããã¹ãŠã®å°å·æ©èœïŒãããã°ã«ã¯åœ¹ç«ã¡ãŸãããããã°ã©ã ã«åœ±é¿ãäžããªãïŒããã¹ãŠæšãŠããšãã³ãŒãã¯åã³ååã«æžå°ããŸãã
åè¿°ããããã«ããã®äŸã«ã¯ãããªã³ãããè©°ã蟌ãŸããŠãããããã»ã¹ã®ç解ã容æã«ããããã«ãRS232ãä»ããŠäœãèµ·ãã£ãŠãããã端æ«ç»é¢ã«åºåããŸããããããå®å šã«åé€ã§ããŸã-ããã¯ãµãŒããŒæäœã«åœ±é¿ããŸããã
ãµãŒããŒããã°ã©ã ã§ã¯ãã¯ã©ã€ã¢ã³ãããã®HTTPããããŒãïŒæãç°¡åãªæ¹æ³ã§ïŒåçŽã«åæããŠãèŠæ±ããŠãããã¡ã€ã«ãèŠã€ããŸããå®éãããã©ã«ãã®index.htmlãã¡ã€ã«ãªã¯ãšã¹ããæ¢ããŸããã€ãŸãããã¡ã€ã«ã®ååã綎ãããŠããªãå Žåã¯ãã€ã³ããã¯ã¹ãã¡ã€ã«ãæå³ããŸãã
ãã®èŠæ±ã¯æ¬¡ã®ããã«ãªããŸã
ãGET / HTTP / 1.1
æåã®ã/ãã®åŸããHTTPãã®åã®ã¹ããŒã¹ã«æ³šæããŠ
空ïŒã¹ããŒã¹ïŒã§ãããããindex.htmlãèŠæ±ãããããšãæå³ããŸãã ïŒããããŸããã説æã¯å®å šã«æ£ããããã§ã¯ãããŸãããéåžžããµã€ãã«ã¢ã¯ã»ã¹ãããšãã¯ããµã€ãåãã¹ã©ãã·ã¥ãšãã¡ã€ã«åãªãã§æå®ããã ãã§ããäž¡æ¹ã®äºº
ãã©ãŠã¶ã®ã¢ãã¬ã¹ããŒã®äŸã¿ã€ãã³ã°ã®ããããã®ã¢ãã¬ã¹ïŒ
192.168.0.155/kotiki.jpgã¯
ïŒããã¯ãã®ããã«èŠããŸãããµãŒããŒã«ãªã¯ãšã¹ããéä¿¡ããŸã
GET /kotiki.jpg HTTP / 1.1
ãªãç§ã¯ããé·ãrazmusolivatãŠããŸã-ç§ãã¡ã¯HTTPããããŒãã©ããã確èªããå¿ èŠããããŸãã¹ã©ãã·ã¥ã®åŸã®ã¹ããŒã¹ããã®å Žåãã¯ã©ã€ã¢ã³ãã«index.htmlã®ãããŒãžããéä¿¡ããŸãïŒéåžžã«åçŽã§ãïŒããããŠãå°ãªããšãäœãä»ã®ãã®ãããå Žå-ãšã©ãŒ_404ãæã€ããŒãžã
ã€ãŸãããã®äŸã¯åçŽã§ãããããã«ããã¡ã€ã«ã·ã¹ãã ã§ã¯ãªãWebãµãŒããŒãèµ·åããŠHTMLã³ãŒããçæããäŸã§ãããããããã¹ãŠãéåžžã«åçŽã«ãªããŸãã
ããã...ïŒaahhhïŒã¢ãã¿ãŒã«ã¯ãã§ã«ãããæã«å ¥ããïŒïŒãããããããŸããããã«ããªãã¯ããããŸãïŒãããŒãžãèŠã€ãããŸãããã®å ŽåããµãŒããŒããã®æšæºHTTPããããŒã¯æ¬¡ã®ããã«å§ãŸã
ãŸãïŒHTTP / 1.1 404ããŒãžãèŠã€ãããŸãã
ïŒãã¹ãŠã
æ£åžžã§ããµãŒããŒãHTTP / 1.1 200 OK ãéä¿¡ããå Žåãšã¯ç°ãªããŸãïŒãã©ãŠã¶ã«ã¯ãçŸãããšã©ãŒã¡ãã»ãŒãžã衚瀺ãããHTMLããŒãžã衚瀺ããããã®ãããªã¿ã€ãã«ã䜿çšãããšãã»ãšãã©ã®ããŒãžã«çŸããããŒãžã衚瀺ãããŸãã Internet Explorerãé€ããã¿ã€ãã«ã§ãã®ãããªè¡ãåãåã£ãã®ã§ã圌ã¯åã«ç§ãã¡ã®ããŒãžãã€ãŸãã§ãã€ã³ã¿ãŒããããšã¯ã¹ãããŒã©ãŒã®ã¹ã¿ã€ã«ã§Curzonã«çããŸãã
ãŸããã©ãã ãéå±ãããããªããšããŠãããããææããå¿ èŠããããŸããHTTPããããŒã®åè¡ã¯ãæåããã£ãªããžãªã¿ãŒã³ããšãã©ã€ã³ãã£ãŒããã§çµããå¿ èŠããããŸã-\ r \ nïŒãŸãã¯ASCIIã³ãŒãïŒ0D 0AïŒ ããããŠããã®é åºã§ããããšãæãŸããã§ããããããªããšãäžéšã®ãã©ãŠã¶ïŒç¡é§ã«åã³èšåããŸããïŒãããªããç解ããªããããããŸãããããã«ãHTTPããããŒã®æåŸã®è¡ãšHTMLã¿ã°ã®å é ã®éã«ã¯ããããã®çµã¿åããã®ãã¢ïŒã€ãŸããASCIIã³ãŒãã®\ r \ n \ r \ nãŸãã¯0D0A0D0AïŒããªããã°ãªããŸãããããã§ãªããã°ãããªãèªèº«ã ãã§ãªããä»ã®ãã©ãŠã¶ãããªããç解ããŸãã
ãããŠãããã§ããªãïŒãã¹ãŠåã貎éãªçµéšã§ãããããªãã¯ããã«ã€ããŠç¥ã£ãŠããã¹ãã§ãïŒãé床ã«ç¶¿å¯ãªãã©ãŠã¶ãŒã®ãã¬ã«ã«ããè»èã®å¥ã®ãã©ã€ïŒããããããŸãïŒïŒåŸç¶ã®HTMLã³ãŒãïŒContent-LenghtïŒ...ïŒã®é·ããæåéã1æå以äžç€ºããŠãããããHTTPããããŒã«äœããã®èª€ããç¯ããŸããå®éïŒã€ãŸããæåãããšãã°665ãããã³ç§ã¯ãããã®666ãããããšã瀺ããŸããïŒã
ãã®ããããã¹ãŠã®ãã©ãŠã¶ã¯ç¹æ» ããã«ããŒãžã飲ã¿èŸŒã¿ãIEã¯éè²ã666çªç®ã®æåã«å°éãããŸã§æ£çŽã«åŸ ã¡ããããå°çãããŸã§ããŒãžã®è¡šç€ºããŸã£ããæåŠããŸããã
ç§ã¯éåžžãè«çãããã¯é¢æ°ããããããæ§æããããã°ã©ã ãäœæããåŸã§é¢æ°èªäœãçºæããŠãã€ã³ãããŸãããããã£ãŠãæåã®ç§ã®äŸã§ã¯é¢æ°ã宣èšãããŠããmainïŒïŒã宣èšãããæåŸã«é¢æ°ã詳现ã«èª¬æãããŸããããã«ãæåã«ïŒå®æ°ãå€æ°ããããã»ã©é ããªãïŒmainïŒïŒãå®è¡ãããã¡ã€ã³ãã£ãã·ã¥ã«å°éããåã«ããããã®é¢æ°ãæ©ããŠããã®ã§ã¯ãªããããã«ãããèŠãŠãäœãèµ·ãã£ãŠããã®ããç解ããããšãã§ããŸãã
ãŸããããããã°ã©ã ããµããŒãããpingèŠæ±ã¯ïŒãããªããç§ãã¡ã®ãµãŒãã®ã¢ãã¬ã¹ïŒ192.168.0.155ïŒãžã®pingãéä¿¡ã§ããããšã¯æ³šç®ã«å€ãã- ããšçããåŸãã«ã¯ã
å®éã«ã¯ãpingã«å¿çã- ãããã¯æããã«ãããŠããŸãã
å/ãªãã·ã§ã³ãããããµãŒãã¹ãããå ŽåïŒããã³éåžžã«æ©èœãããã®ïŒãpingã«ã¯å¿çããŸããã
å®éãpingãŠãŒãã£ãªãã£ã¯IPãããã³ã«ã®ãµãçš®ã®1ã€ã§ããICMPïŒInternet Control Message ProtocolïŒãä»ããŠãªã¯ãšã¹ããéä¿¡ããŸããICMPã¯èšºææ©èœããµããŒãããIPãã±ããã®é ä¿¡ã«å€±æããå Žåã®ãšã©ãŒãå ±åããŸãïŒRFC 792ã®è©³çŽ°ãåç §ïŒã ãpingãæåããããã«ããã®ãããã³ã«ãå«ããµããŒããæäŸããå¿ èŠããããŸãã
W5100ãããã«ã¯ãã§ã«ãã®ãµããŒãããããŸãã
ãããããäžåºŠïŒããã°ã©ã ãããã€ãã®ãã¡ã€ã«ã«åå²ããã®ã§ã¯ãªãããã¹ãŠã1ã€ã®ãã¡ã€ã«ã«ãŸãšããŠãæäœããããããŸããã
ããã°ã©ã ã¯ãšã¬ã¬ã³ããªã³ãŒãã®çæ³ã§ã¯ãããŸãããããã¡ããæ¹åããããšãã§ããŸããå®æ°ãšå€æ°ã®ååãšé¢æ°ã®3åã®1ãåãé€ãããšãã§ããŸããããã®å Žåãç§ã®ã¿ã¹ã¯ã¯äœãèµ·ãã£ãŠããã®ããããã°ã©ã ãã©ã®ããã«æ©èœãããã«ã€ããŠã®ç解ãé ãããšã§ããã
ãããŠãããªãã¯ä¿¡ããªãã§ãããããç§ãã¡ã¯çµããã«æ¥ãŸããã
ããã¯ãŸãã«2ã€ã³ãäžã§ã-éåžžã«çŽæãããããã°ã©ã ã¯ã5åã§ãã
ãŸããããã¯å§ãŸã£ãïŒ
ãœãŒã¹ã³ãŒãïŒãã¹ã¯ãŒã-éåžž-6ã€æïŒ
// ===== - W5100 Wiznet ====== // * Ethernet Shield // W5100 //=========================================================== #include <16F77.H> #fuses HS // , #use delay(clock=16M) ) // 16 // â #use rs232(baud=19200, xmit=PIN_A2, rcv=PIN_A3) // RS232 // * CCS « printf» - , // - // ** // PICa Ethernet Shield #define RESET pin_B2 // *active LOW #define MISO pin_B3 // input #define MOSI pin_B5 // output #define SS pin_B0 // output. SlaveSelect, Active LOW #define SCK pin_B1 // output. //********** W5100 ********************* //************************************************************** #define MR 0x0000 // MODE register #define GAR0 0x0001 // GATEWAY Addr register0 (MSB) #define GAR1 0x0002 // GATEWAY Addr register1 #define GAR2 0x0003 // GATEWAY Addr register2 #define GAR3 0x0004 // GATEWAY Addr register3 (LSB) #define SUBR0 0x0005 // SUBNET MASK Addr register0 (MSB) #define SUBR1 0x0006 // SUBNET MASK Addr register1 #define SUBR2 0x0007 // SUBNET MASK Addr register2 #define SUBR3 0x0008 // SUBNET MASK Addr register3 (LSB) // MAC #define SHAR0 0x0009 // SOURCE HARDWARE Addr register0 (MSB) #define SHAR1 0x000A // SOURCE HARDWARE Addr register1 #define SHAR2 0x000B // SOURCE HARDWARE Addr register2 #define SHAR3 0x000C // SOURCE HARDWARE Addr register3 #define SHAR4 0x000D // SOURCE HARDWARE Addr register4 #define SHAR5 0x000E // SOURCE HARDWARE Addr register5 (LSB) #define SIPR0 0x000F // Source IP Addr register0 (MSB) #define SIPR1 0x0010 // Source IP Addr register1 #define SIPR2 0x0011 // Source IP Addr register2 #define SIPR3 0x0012 // Source IP Addr register3 (LSB) #define RMSR 0x001A // RX memory size (1K,2K,4K or 8K per socket, from total 8K) #define TMSR 0x001B // TX memory size (1K,2K,4K or 8K per socket, from total 8K) //-- Socket0 (* ) #define S0_MR 0x0400 // Socket0 MODE register #define S0_CR 0x0401 // Socket0 COMMAND register #define S0_SR 0x0403 // Socket0 STATUS register #define S0_PORT0 0x0404 // Socket0 SOURCE Port register0 (H byte) #define S0_PORT1 0x0405 // Socket0 SOURCE Port register1 (L byte) #define S0_TX_FSR0 0x0420 // Socket0 TX Free SIZE register0 #define S0_TX_FSR1 0x0421 // Socket0 TX Free SIZE register1 #define S0_TX_RD0 0x0422 // Socket0 TX Read POINTER register0 #define S0_TX_RD1 0x0423 // Socket0 TX Read POINTER register1 #define S0_TX_WR0 0x0424 // Socket0 TX Write POINTER register0 #define S0_TX_WR1 0x0425 // Socket0 TX Write POINTER register1 #define S0_RX_RSR0 0x0426 // Socket0 RX Received SIZE register0 (H byte) #define S0_RX_RSR1 0x0427 // Socket0 RX Received SIZE register1 ( L byte) #define S0_RX_RD0 0x0428 // Socket0 RX Read POINTER0 (H byte) #define S0_RX_RD1 0x0429 // Socket0 RX Read POINTER1 (L byte) // ----- ( 0 ) ----- #define OPEN 0x01 #define LISTEN 0x02 #define CONNECT 0x04 #define DISCON 0x08 #define CLOSE 0x10 #define SEND 0x20 #define SEND_MAC 0x21 #define SEND_KEEP 0x02 #define RECV 0x40 // ----- ( STATUS 0 ) --- #define SOCK_CLOSED 0x00 #define SOCK_INIT 0x13 #define SOCK_LISTEN 0x14 #define SOCK_ESTABLISHED 0x17 #define SOCK_CLOSE_WAIT 0x1C // ---------- «» ----------- #define SERVER_IP0 192 // 192.168.0.155 #define SERVER_IP1 168 #define SERVER_IP2 0 #define SERVER_IP3 155 #define SERVER_PORT0 0 // :80 #define SERVER_PORT1 80 #define GATEWAY_IP0 192 // . - #define GATEWAY_IP1 168 #define GATEWAY_IP2 0 #define GATEWAY_IP3 254 #define SUBNET_MASK0 255 // ( ) #define SUBNET_MASK1 255 #define SUBNET_MASK2 255 #define SUBNET_MASK3 0 #define MAC0 0x00 // , , #define MAC1 0x1A // #define MAC2 0x2B #define MAC3 0x3C #define MAC4 0x4D #define MAC5 0x5E //----------- --------------- void SSPI_write(int Data); // 1 W5100 SPI int SSPI_read ( void); // 1 W5100 SPI void SetW5100register (int16 regaddr, int data); // () W5100 SPI int GetW5100register (int16 regaddr); // W5100 SPI void Init (void); // W5100 int Open_Socket0(void); // (/) int Listen_Socket0(void); // (/) int Socket0_Connection_Established (void); // (/) int Socket0_Received_Data_Size (void); // , ( 0 ) void Socket0_Received_Data_Reading (void); // // - int Socket0_FIN_Received(void); // FIN / void Socket0_Disconnect(void); // W5100 int Socket0_Closed(void); // / int Socket0_Connection_Timeout(void); // - / void Socket0_Closing(void); // int Socket0_Received_Request_is_index_html(void); // Index.html // / void Socket0_Send_index_html (void); // «» index.html void Socket0_Send_404_error (void); // «» « 404» //------------ ----------------------------------- int16 S0_RX_BASE; // , RX 0 int16 S0_RX_MASK; // RX 0 int16 S0_RX_OFFSET; // RX int16 S0_RX_Start_Addr; // RX int16 S0_RX_RSR ; // int16 S0_TX_BASE; // , X 0 int16 S0_TX_MASK; // X 0 int16 S0_TX_OFFSET ; // , // int16 S0_TX_Start_Addr; // , // int16 S0_TX_End_Addr; // , W5100 // // --- HTTP «-» // * [222] . // ** CONST â ( ) CONST char INDEX[222] = { "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nContent-Lenght: 43\r\n\r\n<HTML><CENTER>HELLO WORLD !</CENTER></HTML>"}; // «index.htmlâ CONST char ERROR404[222] = { "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nContent-Lenght: 39\r\n\r\n<HTML><CENTER>ERROR 404</CENTER></HTML>"}; // « 404â // , // « 404», , ... //CONST char ERROR404[222] = { "HTTP/1.1 404 Page not found\r\nContent-Type: text/html\r\nContent-Lenght: 39\r\n\r\n<HTML><CENTER>ERROR 404</CENTER></HTML>"}; // .. IExplorer HTTP "HTTP/1.1 404 Page not found" // , , int try=0; // , . â //===================== MAIN ============================================ //======================================================================= void main() { Init(); // W5100 ( ) OpenSocket0: //ooooooooooooooooooo 0 oooooooooooooooooooooooo if ( ! Open_Socket0() ) goto OpenSocket0; // //ooooooooooooooooo ooooooooooooooooooooooooo if ( Listen_Socket0() == FALSE ) goto OpenSocket0; // «» - //oooooooooooooo ? oooooooooooooo CheckConnection: // if (Socket0_Connection_Established() == FALSE ) goto CheckConnection; // ( ) printf("> Connection Established... \r\n"); // ( ) //ooooooo( ) - ? oooooo if ( Socket0_Received_Data_Size() == 0 ) { printf("\r\n> (Zero) Received Data size is: %Lu (bytes) \r\n", S0_RX_RSR); // ( ) goto CheckFIN; // // FIN } // ( =0) else { printf("\r\n> (NonZero) Received Data size is: %Lu (bytes) \r\n", S0_RX_RSR); // ( ) } // oooooooooo ( ) * ooooooooooooooo // // Socket0_Received_Data_Reading(); // ( ) // oooooooooooooo ooooooooooooooooooooooooooooooo // HTTP HTML if ( Socket0_Received_Request_is_index_html() == TRUE) Socket0_Send_index_html (); // "index.html" index.html else Socket0_Send_404_error (); // «» « 404» //ooooooooooo FIN ? ooooooooooooooooooooooooooo // CheckFIN: if ( Socket0_FIN_Received() == TRUE) goto CloseConnection; // FIN - 0 //ooooooooooo ooooooooooooooooooooooo Socket0_Disconnect(); // 0 //ooooooooooo ? ooooooooooooooooooooooooooooooo if (Socket0_Closed() == TRUE ) goto CloseConnection; // â //ooooooooooo - ? ooooooooooooooooooo if ( Socket0_Connection_Timeout() == TRUE) goto CloseConnection; // , -, â CloseConnection: //ooooooooooo ooooooooooooooooooooooooooooooooooo Socket0_Closing(); //oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo goto OpenSocket0; // , . // ( «-» ) } //=================== END of MAIN =========================== //============================================================ //--------------------------------------------------------------- //--------------------------INIT ------------------------------- void Init (void) { output_low(RESET); // «» Ethernet delay_ms(1); output_high(RESET); output_low(SCK); // () SPI output_high(SS) ; // W5100. SetW5100register(MR, 0x80); // RST W5100 Mode Register //------------ (W5100) 0 ------------- SetW5100register(RMSR, 0x55); // RX : 2 S0_RX_BASE = 0x6000; // RX 0 S0_RX_MASK = 0x07FF ; // (2048 -1 )= 0x07FF, RX ( = _ â 1 ) SetW5100register(TMSR, 0x55); // X : 2 S0_TX_BASE = 0x4000; // TX 0 S0_TX_MASK = 0x07FF; // (2048 -1 )= 0x07FF, ( = _ â 1 ) //------------ -------------- // .. W5100 // â SetW5100register(SHAR0, MAC0); SetW5100register(SHAR1, MAC1); SetW5100register(SHAR2, MAC2); SetW5100register(SHAR3, MAC3); SetW5100register(SHAR4, MAC4); SetW5100register(SHAR5, MAC5); //------------ IP -------------- // - W5100 â SetW5100register(SIPR0, SERVER_IP0); SetW5100register(SIPR1, SERVER_IP1); SetW5100register(SIPR2, SERVER_IP2); SetW5100register(SIPR3, SERVER_IP3); //------------ PORT -------------- // â â SetW5100register(S0_PORT0, SERVER_PORT0); SetW5100register(S0_PORT1, SERVER_PORT1); //------------ Gateway addr -------------- // â â SetW5100register(GAR0, GATEWAY_IP0); SetW5100register(GAR1, GATEWAY_IP1); SetW5100register(GAR2, GATEWAY_IP2); SetW5100register(GAR3, GATEWAY_IP3); //------------ set Subnet Mask -------------- SetW5100register(SUBR0, SUBNET_MASK0); SetW5100register(SUBR1, SUBNET_MASK1); SetW5100register(SUBR2, SUBNET_MASK2); SetW5100register(SUBR3, SUBNET_MASK3); printf(" \r\n\r\n > =============== W5100 - ==========\r\n\r\n"); // ( ) } //-------------------------------------------------------------- //------------- 0 ---------------------------- int Open_Socket0(void) { // ( ) printf(" \r\n =========== TRY # %u ====================\r\n", try); if (try ==255) try =0; else try++; printf("\r\n> Start Open Socket... \r\n"); // â , SetW5100register(S0_MR, 0x01); // â ( ) SetW5100register(S0_CR, OPEN); // // * , «SOCK_INIT» if (GetW5100register(S0_SR) != SOCK_INIT) // STATUS { SetW5100register(S0_CR, CLOSE); // return FALSE ; // 0 } return TRUE; // . 1 } //-------------------------------------------------------------- //------------- 0 ------------ int Listen_Socket0 (void) { printf("> Sock opened. Go Listen... \r\n"); // ( ) // // * â .. â , SetW5100register(S0_CR, LISTEN); if ( GetW5100register(S0_SR) != SOCK_LISTEN) // { SetW5100register(S0_CR, CLOSE); // return FALSE; // 0 } return TRUE; // , 1 } //-------------------------------------------------------------------------- //------------- 0 ? -------- // * ( ) int Socket0_Connection_Established(void) { // W5100 , // ACK SOCK_ESTABLISHED // (« ) // , // - if ( GetW5100register(S0_SR) == SOCK_ESTABLISHED) return TRUE ; // . // () = «SOCK_ESTABLISHED» 1 else return FALSE; // â 0 printf("> Connection Established... \r\n"); // ( ) // * , / } //---- ------------- //----------------------------------------------------- // * «» // // (, / -) int Socket0_Received_Data_Size (void) // = { S0_RX_RSR = make16 (GetW5100register(S0_RX_RSR0), GetW5100register(S0_RX_RSR1) ); // 8- // RSR0 â , RSR1 â // «» 16- - printf("> Received Data size is: %Lu (bytes) \r\n", S0_RX_RSR); // ( ) if (S0_RX_RSR == 0 ) return FALSE; // ( .. =0 ) // 0 else return TRUE; // ( .. -) // 1 } //---------- --------------- //------------------------------------------------------------ // * . void Socket0_Received_Data_Reading (void) { int16 n; int RXbyte; S0_RX_OFFSET = make16 ( GetW5100register(S0_RX_RD0), GetW5100register(S0_RX_RD1) ); // 8- 16 - // RX 0 printf("> S0_RX_RD (RX mem read pointer) = %LX \r\n", make16 ( GetW5100register(S0_RX_RD0), GetW5100register(S0_RX_RD1) ) ); S0_RX_OFFSET = (S0_RX_OFFSET & S0_RX_MASK ) ; // 0 printf("> S0_RX_Offset = S0_RX_RD & S0_RX_MASK = %LX \r\n\r\n",S0_RX_OFFSET ); S0_RX_Start_Addr = S0_RX_OFFSET + S0_RX_BASE ; // printf("> S0_RX_Start_Addr = S0_RX_OFFSET + S0_RX_BASE = %LX (physical)\r\n\r\n", S0_RX_Start_Addr ); printf("> Going to print-out Received Data... \r\n\r\n"); printf("ooooooooooooooooooooooooooooooooooooooooooo\r\n"); for (n=0; n < S0_RX_RSR ; n++) { if ( S0_RX_Start_Addr > (S0_RX_BASE + S0_RX_MASK) ) S0_RX_Start_Addr = S0_RX_BASE; RXbyte = GetW5100register(S0_RX_Start_Addr); printf("%c", RXbyte); S0_RX_Start_Addr++; } printf("\r\noooooooooooooooo END of received data oooooooooooooo\r\n\r\n"); } // --- INDEX.HTML ------ //---------------------------------------------------------------------- int Socket0_Received_Request_is_index_html(void) { int RXbyte=0; S0_RX_OFFSET = make16 ( GetW5100register(S0_RX_RD0), GetW5100register(S0_RX_RD1) ); // 8- 16 - // RX 0 S0_RX_OFFSET = (S0_RX_OFFSET & S0_RX_MASK ) ; // 0 S0_RX_Start_Addr = S0_RX_OFFSET + S0_RX_BASE ; // printf("\r\n>----------- parsing HTTP header-------------\r\n"); // ( ) while (RXbyte != 0x2F) // "/" HTTP { if ( S0_RX_Start_Addr > (S0_RX_BASE + S0_RX_MASK) ) S0_RX_Start_Addr = S0_RX_BASE; // // , // â â RXbyte = GetW5100register(S0_RX_Start_Addr); // RX , printf("%c", RXbyte); // ( ) S0_RX_Start_Addr++; // â } // («») HTTP â/â // "/" . // - RXbyte = GetW5100register(S0_RX_Start_Addr); // printf("\r\n> -------- END of parsing HTTP header -------\r\n"); // ( ) if (RXbyte == 0x20) return TRUE; // «» - , index.html // 1 else return FALSE; // , index.html // - 0 } //------ « 404» ------------ //------------------------------------------------------------- // 0 HTTP HTML // « 404», W5100 // , void Socket0_Send_404_error (void) { int16 n; char TXbyte; int16 datalength; S0_TX_OFFSET = make16 ( GetW5100register(S0_TX_RD0), GetW5100register(S0_TX_RD1) ); // 8- 16 - // , X 0 S0_TX_OFFSET = (S0_TX_OFFSET & S0_TX_MASK ) ; // 0 S0_TX_Start_Addr = S0_TX_OFFSET + S0_TX_BASE ; // // HTTP HTML datalength=0; while ( ERROR404[datalength] !=0) datalength++; // «datalength» 000 // (000 - ) // , W5100 , // , , . // , W5100 . // W5100: // - // 2- // *( // «» ) S0_TX_End_Addr = make16 ( GetW5100register(S0_TX_WR0), GetW5100register(S0_TX_WR1) ); // - S0_TX_End_Addr += datalength ; // increment to fatalength // ( ) «» // 2 SetW5100register(S0_TX_WR0, make8( S0_TX_End_Addr ,1) ); // SetW5100register(S0_TX_WR1, make8( S0_TX_End_Addr,0) ); // printf("\r\n>Data length is: %Lu \r\n", datalength); printf("\r\n>--- Filling TX buffer w data: -----------\r\n"); // ( ) // â For (n=0; n < datalength; n++) // { TXbyte = ERROR404[n]; // , « » // ( HTTP HTML ) // «» W5100 // , , 10 // , // , if (S0_TX_Start_Addr > (S0_TX_BASE + S0_TX_MASK)) S0_TX_Start_Addr = S0_TX_BASE; // .. â // * W5100 ( )) // - , , //( , ) â // // // â SetW5100register( S0_TX_Start_Addr, TXbyte ) ; putc(TXbyte); // ( ) S0_TX_Start_Addr++ ; // ( ) } printf("\r\n>--- end of Filling -----------\r\n"); // ( ) // , , // , , // - SEND SetW5100register(S0_CR, SEND); printf("> Data was sent \r\n\r\n"); // ( ) } //----------------------------------------------------------- //-- «index.html» --------------- //------------------------------------------------------------------- void Socket0_Send_index_html (void) // send index.html "page" index.html { // â « 404» // «» HTTP HTML â int16 n; char TXbyte; int16 datalength; printf("\r\n>...... going to send INDEX.HTML.....\r\n"); // ( ) S0_TX_OFFSET = make16 ( GetW5100register(S0_TX_RD0), GetW5100register(S0_TX_RD1) ); // 2- S0_TX_OFFSET = (S0_TX_OFFSET & S0_TX_MASK ) ; S0_TX_Start_Addr = S0_TX_OFFSET + S0_TX_BASE ; // printf("\r\n INDEX[i], datalegth -------------\r\n"); // ( ) // datalength=0; while ( INDEX[datalength] !=0) datalength++; // â 000 â printf("%c %Lu ",INDEX[datalength], datalength ); // ( ) // W5100 S0_TX_End_Addr = make16 ( GetW5100register(S0_TX_WR0), GetW5100register(S0_TX_WR1) ); // «» 2 S0_TX_End_Addr += datalength ; // increment to fatalength // // 1- SetW5100register(S0_TX_WR0, make8( S0_TX_End_Addr ,1) ); // SetW5100register(S0_TX_WR1, make8( S0_TX_End_Addr,0) ); // printf("\r\n>Data length is: %Lu \r\n", datalength); printf("\r\n>--- Filling TX buffer w data: -----------\r\n"); // ( ) // â For (n=0; n < datalength; n++) { TXbyte= INDEX[n]; // « » index.html // (.. HTTP Header + HTML code) if (S0_TX_Start_Addr > (S0_TX_BASE + S0_TX_MASK)) S0_TX_Start_Addr = S0_TX_BASE; // , â SetW5100register( S0_TX_Start_Addr, TXbyte ) ; // ( « ») â putc(TXbyte); // printout to Terminal ( for testing purpose) // ( ) S0_TX_Start_Addr++ ; // } printf("\r\n>--- end of Filling -----------\r\n"); // ( ) // , // - SEND SetW5100register(S0_CR, SEND); printf("> Data was sent \r\n\r\n"); // ( ) } //-------------------------------------------------------- //--- , , FIN ? ------ //----------------------------------------------------------------------------- int Socket0_FIN_Received(void) { // ( ) // FIN - // // â 0 // 1 FIN 0 FIN if ( GetW5100register(S0_SR) == SOCK_CLOSE_WAIT) return TRUE; else return FALSE; } //--------------------------------------------------------- // ------ Socket0 ----------------- //------------------------------------------------------------- void Socket0_Disconnect(void) { // // 0 SetW5100register(S0_CR, DISCON); } // ------ 0 -------------------- //-------------------------------------------------------- int Socket0_Closed(void) { // // (CLOSE), -, // 0 // * , // - If ( GetW5100register(S0_SR) == SOCK_CLOSED) return TRUE; else return FALSE; // 1 ( 0) // 0 } // ----- - 0 ? ------------ //------------------------------------------------------------- int Socket0_Connection_Timeout(void) { // , , // â - // , // ( TCP ) , // // - // â 0 // : , «SOCK_CLOSED» // - -?? // -, // W5100 «SOCK_CLOSED» - // â If ( GetW5100register(S0_SR) == SOCK_CLOSED) return TRUE; else return FALSE; // 1 - , 0 - } // ------------ 0 ---------------------------- //---------------------------------------------------------------- void Socket0_Closing(void) { // should be performed in case that connection is closed after data exchange, // socket should be closed with Timeout occurrence, // or forcible disconnection is necessary due to abnormal operation etc. printf(">going to Close Socket0 ..... \r\n"); // ( ) // 0 SetW5100register(S0_CR, CLOSE); printf("> ------ Socket CLOSED ----- \r\n\r\n"); // ( ) } // ---- () SPI ------------- //-------------------------------------------------------- //* «SSPI» , // (SPI⊠) . // () â // â SPI // «» ( ) // - //* - W5100 0 1 void SSPI_write( int Data) { int i; int mask=0x80; // ( ) // SPI W5100 // - ( MSB first) output_low(SCK); // â «» for (i=0; i<8;i++) // 8 { output_low(MOSI); // «» - 0 if ( (mask & Data) != 0) output_high(MOSI); // ( & ) =1 1 // â 0, output_high(SCK); // ( 0 1) - // SPI â W5100 mask = mask>>1; ; // 1 // * // // ( ) output_low(SCK); // , «» ( 0 ) } // «.. » () } //---------------------------------------------------------- //----------- SPI ------------------ //----------------------------------------------------------- //* «SSPI» , // (SPI⊠) . // â // â // «» // // * W5100 - 1 0 //* // 0 1 // 1, // «» 1 0 int SSPI_read ( void) { int Data=0; int i; int mask=0x80; // ( ) // SPI W5100 // - ( MSB first) output_low(SCK); // â «» for (i=0; i<8;i++) // 8 { output_high(SCK); // ( 0 1) if ( input(MISO)!= 0) Data = Data | mask ; // 1, â «» mask = mask>>1; ; // 1 // * // // ( ) output_low(SCK); // , «» ( 0 ) } return Data; } //--------------------------------------------------------------- //------- ( ) W5100 ------------- //-------------------------------------------------------------- void SetW5100register (int16 regaddr, int8 data) // 2 : 16 8 { output_low(SS); // ( 0) SSPI_write (0xF0); // //* make8 â 16 - 8 SSPI_write ( make8(regaddr,1) ); // (MSB) // SPI SSPI_write ( make8(regaddr,0) ); // (LSB) // SPI SSPI_write (data); // SPI output_high(SS); // ( 1) } //--------------------------------------------------------- //----- W5100 ---------- //---------------------------------------------------- int GetW5100register (int16 regaddr) // â 2- // : 1 { int RegData; output_low(SS); // ( 0) SSPI_write (0x0F); // //* make8 â 16 8 SSPI_write ( make8(regaddr,1) ); // (MSB) // SPI SSPI_write ( make8(regaddr,0) ); // (LSB) // SPI RegData = SSPI_read (); // W5100 (8 ) // output_high(SS); // ( 1) return RegData; // } //************* END of PROGRAM **************