 
      ãã®èšäºã§ã¯ãããšãã°ã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 **************