[Áöµð³ÝÄÚ¸®¾Æ]ÇÊÀÚ´Â SiRF TechnologyÀÇ FAE·Î¼ Ȱµ¿Çϰí ÀÖÀ¸¸ç, À©µµ¿ìÀÓº£µðµåÄ¿¹Â´ÏƼÀÎ WECOMÀÇ MVPÀ̱⵵ ÇÏ´Ù. ºí·Î±× http://blog.naver.com/mclapd¸¦ ¿î¿µ ÁßÀÌ´Ù.
ÇöÀç ÀÓº£µðµå Á¦Ç°µéÀº PC¿Í °°Àº ¿ÜºÎ ´Ü¸»±âµé¿¡ ´Ù¾çÇÑ ÇüÅÂÀÇ Åë½Å ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇϰí ÀÖ´Ù. ƯÈ÷ ÃÖ±Ù¿¡´Â ÀÓº£µðµå Á¦Ç°¿¡ ºí·çÅõ½º, ¹«¼±¸ðµ©(wireless modem), WiFi µîÀÇ ¹«¼± ÀÎÅÍÆäÀ̽º Áö¿ø¿¡ ´ëÇÑ ¿ä±¸°¡ ¸¹¾ÆÁ³´Ù.
ÀϹÝÀûÀÎ °æ¿ì CPU ³»ºÎ¿¡ ÀÌ·¯ÇÑ ÀÎÅÍÆäÀ̽º¸¦ Áö¿øÇÏ´Â ÄÁÆ®·Ñ·¯¸¦ ³»ÀåÇϰí ÀÖÁö ¾Ê±â ¶§¹®¿¡ ÁÖº¯ µð¹ÙÀ̽º(¶Ç´Â ¸ðµâ)¿¡ ÀÇÁ¸ÇÏ°Ô µÈ´Ù.
ÀÌ·± ÁÖº¯ µð¹ÙÀ̽º´Â ¿ÜºÎ ´Ü¸»±â¿¡ Á¦°øÇÏ´Â ÀÎÅÍÆäÀ̽º ¿Ü¿¡ CPU¿ÍÀÇ µ¥ÀÌÅÍ µîÀÇ Ã³¸®¸¦ ½Ã¸®¾ó(serial), USB, USP µîÀ» ÅëÇØ ÇÏ°Ô µÈ´Ù. ¸¸¾à OS ±â¹ÝÀÇ Á¦Ç°À̶ó¸é ¾ÖÇø®ÄÉÀ̼ÇÀº ÀÎÅÍÆäÀ̽ºÀÇ ÇÁ·ÎÅäÄÝÀ» Çڵ鸵 ÇÒ ¼ö ÀÖ´Â µð¹ÙÀ̽º µå¶óÀ̹ö°¡ ÇÊ¿äÇÏ°Ô µÈ´Ù.
¿©±â¼ ÇÑ °¡Áö »óȲÀ» °¡Á¤ÇØ º¸ÀÚ. ¾î¶² ȸ»çÀÇ ¿£Áö´Ï¾îµéÀÌ ¸¹Àº ³ë·Â°ú ½Ã°£À» ÇÒ¾ÖÇØ¼ serial ÀÎÅÍÆäÀ̽º¸¦ °®°í ÀÖ´Â ºí·çÅõ½º ¸ðµâÀÇ µå¶óÀ̹ö¿Í ¾ÖÇø®ÄÉÀ̼ÇÀ» ¸¸µé¾úÁö¸¸ °í°´µéÀº ´õ ºü¸¥ Åë½Å ¼Óµµ¸¦ ¿ä±¸ÇÏ¿´°í ȸ»ç¿¡¼´Â ÀÌ¿¡ ´ëÀÀÇϱâ·Î °áÁ¤Çß´Ù.
´ÙÇàÈ÷ ½Ã¸®¾ó ÀÎÅÍÆäÀ̽º¸¦ USB·Î ´ëÄ¡ÇÑ µð¹ÙÀ̽º°¡ ³ª¿Í¼ ÀÌ µð¹ÙÀ̽º·Î ´Ù½Ã °³¹ßÇϱâ·Î Çß´Ù°í Ä¡ÀÚ. ¾ÖÇø®ÄÉÀÌ¼Ç ¿£Áö´Ï¾î, ¶Ç´Â µð¹ÙÀ̽º µå¶óÀ̹ö ¿£Áö´Ï¾î´Â ÀÌ¹Ì ¸¸µé¾î ³õÀº, °Ô´Ù°¡ Åë½Å ¼Óµµ À̿ܿ¡´Â µ¿ÀÛ¿¡ ¾Æ¹«·± ¹®Á¦°¡ ¾ø´Â ÀÀ¿ë ÇÁ·Î±×·¥°ú µð¹ÙÀ̽º µå¶óÀ̹ö¸¦ ¼öÁ¤ÇØ¾ß ÇÏ´Â »óȲ¿¡ óÇÏ°Ô µÉ °ÍÀ̸ç ÀÌ´Â ¸¹Àº ½Ã°£°ú ³ë·ÂÀÌ ÇÊ¿äÇÒ ¼öµµ ÀÖ´Ù.
ÀÌ·± »óȲ¿¡¼ ¾ÖÇø®ÄÉÀ̼ÇÀ̵çÁö µð¹ÙÀ̽º µå¶óÀ̹öµçÁö ¾î´À ÇÑ Âʸ¸ÀÇ ¼öÁ¤À¸·Î ¹®Á¦°¡ ÇØ°áµÈ´Ù¸é ÃÖ¾ÇÀÇ »óȲ¿¡ ³õÀÌ´Â °ÍÀº ÇÇÇÒ ¼ö ÀÖ°ÚÁö¸¸ À§¿Í °°Àº °æ¿ì¶ó¸é µÎ ºÎºÐ¿¡ ¸ðµÎ ¼öÁ¤À» ÇÒ ¼ö ¹Û¿¡ ¾ø°Ô µÈ´Ù. ±×·¡¼ ÀÌ·± ¹®Á¦¸¦ ÇÇÇϰíÀÚ ÇÑ °¡Áö ¹æ¹ýÀ» ÀÌ ±â°í¸¦ ÅëÇØ Á¦½ÃÇϰíÀÚ ÇÑ´Ù.
¹°·Ð ÀÌ ¹æ¹ýÀº ÀÍÈ÷ ³Î¸® ¾Ë·ÁÁ® ÀÖ°í ¾²À̰í ÀÖ´Â ¹æ¹ýÀ̱⠶§¹®¿¡ Ưº°È÷ »õ·Ó´Ù°Å³ª ¾î·ÆÁö´Â ¾Ê´Ù.
¹öÃß¾ó ½Ã¸®¾ó µå¶óÀ̹ö
¾Õ¼ ¾ð±ÞÇÑ ¹®Á¦¿¡ ´ëÇØ¼ ÇÊÀÚ°¡ Á¦½ÃÇÏ´Â ¹æ¹ýÀº ¹öÃß¾ó ½Ã¸®¾ó µå¶óÀ̹ö(virtual serial driver)ÀÇ »ç¿ëÀÌ´Ù. ±×¸®°í ¾Æ·¡´Â ¹öÃß¾ó ½Ã¸®¾ó µå¶óÀ̹ö ÀÛ¼º °³³ä¿¡ ´ëÇÑ °£´ÜÇÑ ¼³¸íÀÌ´Ù.
ù°, ¾ÖÇø®ÄÉÀ̼ÇÀº ÁÖº¯ µð¹ÙÀ̽º¸¦ »ç¿ëÇÒ ¶§ ÀÌ µð¹ÙÀ̽º¸¦ Ç×»ó ½Ã¸®¾ó µð¹ÙÀ̽º·Î °¡Á¤ÇÏ°í »ç¿ëÇϵµ·Ï ÀÛ¼ºÇÑ´Ù.
Áï, ÁÖº¯ µð¹ÙÀ̽º°¡ CPU¿Í USB·Î ¿¬°áµÇ¾î ÀÖµçÁö, SPI·Î ¿¬°áµÇ¾î ÀÖµçÁö °£¿¡ ¸ðµÎ ½Ã¸®¾ó ÀåÄ¡·Î º¸¸é µÇ´Â °ÍÀÌ´Ù. À̷νá ÀÌ ¾ÖÇø®ÄÉÀ̼ÇÀº Çϵå¿þ¾î°¡ ¹«¾ùÀ̵çÁö, ¶Ç´Â ¾î¶»°Ô ¹Ù²îµçÁö¿¡ °ü°è¾øÀÌ ¼öÁ¤ ¾øÀÌ(¶Ç´Â ¾ÆÁÖ ¾à°£ÀÇ ¼öÁ¤À» ÅëÇØ) Àç»ç¿ëÇÒ ¼ö ÀÖ°Ô µÈ´Ù.
µÑ°, µð¹ÙÀ̽º µå¶óÀ̹ö¸¦ MDD¿Í PDD ÇüÅ·Π³ª´©°í MDD´Â ½Ã¸®¾ó µð¹ÙÀ̽º µå¶óÀ̹ö·Î ÀÛ¼ºÇÏ°í ³ª¸ÓÁö PDD´Â ÁÖº¯ µð¹ÙÀ̽ºÀÇ ÀÎÅÍÆäÀ̽º¿¡ ¾Ë¸ÂÀº µð¹ÙÀ̽º µå¶óÀ̹öÀÇ ÇüÅ·Π¸¸µéÀÚ. ¹°·Ð ÀÌ MDD¿Í PDDÀÇ ³»ºÎ´Â »óȲ¿¡ ¸Â°Ô ´õ ´Ù¾çÇÑ °èÃþ±¸Á¶·Î ¼¼ºÐÈ µÉ ¼öµµ ÀÖÀ» °ÍÀÌ´Ù.
USB CDC Ŭ¶óÀÌ¾ðÆ® µå¶óÀ̹ö
º» ±â°í¿¡¼´Â USB CDC Ŭ¶óÀÌ¾ðÆ® µå¶óÀ̹ö¸¦ ¹öÃß¾ó ½Ã¸®¾ó µå¶óÀ̹öÀÇ ÇÑ ¿¹·Î µé °ÍÀ̸ç À¯°¨½º·´°Ôµµ Áö¸éÀÇ Á¦¾à»ó À§¿¡¼ Á¦½ÃÇÑ ³»¿ë Áß ½Ã¸®¾ó µð¹ÙÀ̽º µå¶óÀ̹ö¿Í USB CDC Ŭ¶óÀÌ¾ðÆ® µå¶óÀ̹ö°¡ ¾î¶»°Ô ¿¬°áµÇ´Â°¡¿¡ ´ëÇÑ ¿¬°á ±¸Á¶¿Í operation¿¡ ´ëÇÑ procedure¸¸À» ´Ù·ç·Á°í ÇÑ´Ù.
¾ÕÀ¸·Î ¾ð±ÞÇÒ CDC´Â Ä¿¹Â´ÏÄÉÀÌ¼Ç µð¹ÙÀ̽º¸¦ À§ÇÑ USB ¼ºê Ŭ·¡½º·Î, º» ±â°í¿¡¼ ´Ù·ê USB CDC Ŭ¶óÀÌ¾ðÆ® µå¶óÀ̹ö´Â ½º¸¶Æ® Æù µî¿¡ »ç¿ëµÇ´Â Ä÷ÄÄ µîÀÇ ¹«¼± ¸ðµ© µð¹ÙÀ̽º¸¦ À§ÇÑ µå¶óÀ̹öÀÌ´Ù. ¿©±â¼ CDC specification¿¡ ÁØÇϱâ À§ÇÑ Á¶°Ç Áß ÇϳªÀÎ flow control µîÀÇ ±â´É µîÀº ³í¿Ü·Î ÇϰڴÙ. Âü°í·Î ÇÊÀÚ´Â USB Host controller°¡ CPU ³»ºÎ¿¡ Æ÷ÇԵǾîÀÖÁö ¾Ê¾Æ ¿ÜÀå USB Host µð¹ÙÀ̽º¸¦ »ç¿ëÇÏ¿´´Ù.
ÇÑ °¡Áö µå¶óÀ̹ö¿¡ ´ëÇÑ ³»¿ëÀÌ¶óµµ »ó´çÈ÷ ¸¹Àº ºÎºÐÀ» ´Ù·ç¾î¾ß Çϱ⠶§¹®¿¡ ´ÙÀ½°ú °°ÀÌ ¸î °¡Áö ÀüÁ¦Á¶°ÇÀÌ ÇÊ¿äÇÒ °ÍÀ¸·Î º»´Ù.
ù°, µ¶ÀÚ´Â WinCEÀÇ Ä¿³Î(Kernel), µð¹ÙÀ̽º µå¶óÀ̹ö¿¡ ´ëÇÑ Áö½ÄÀ» °¡Áö°í ÀÖ´Ù.
µÑ°, ƯÈ÷ ½Ã¸®¾ó µå¶óÀ̹öÀÇ ÀüüÀûÀÎ ¸ÞÄ¿´ÏÁòÀ» ÀÌÇØÇϰí ÀÖ´Ù.
¼Â°, USB SpecificationÀ» ÀÐ¾î º» ÀûÀÌ ÀÖ°í ¾î´À Á¤µµÀÇ USB ÇÁ·ÎÅäÄÝ, Çϵå¿þ¾îÀûÀÎ Áö½Ä, ±×¸®°í USB µå¶óÀ̹ö¿¡ ´ëÇÑ Áö½ÄÀ» °¡Áö°í ÀÖ´Ù.
Â÷ÈÄ ±âȸ°¡ ÁÖ¾îÁø´Ù¸é Çϵå¿þ¾î¿¡¼ºÎÅÍ ¾ÖÇø®ÄÉÀ̼DZîÁö ÀüüÀûÀÎ È帧°ú ±¸Çö ¹æ¹ý¿¡ ´ëÇØ ´Ù½Ã ±â°íÇϱâ·Î ÇϰڴÙ.
USB CDC Ŭ¶óÀÌ¾ðÆ® µå¶óÀ̹öÀÇ ±¸Á¶
±×¸² 1 Àº ¾ÖÇø®ÄÉÀ̼Ç, USB CDC Ŭ¶óÀÌ¾ðÆ® µå¶óÀ̹ö, USBD, HCDÀÇ °èÃþ°£ÀÇ ¿¬°á ±¸Á¶¸¦ º¸¿©ÁÖ°í ÀÖ´Ù.
CDC Ŭ¶óÀÌ¾ðÆ® µå¶óÀ̹ö¸¦ »ç¿ëÇÏ´Â ¾ÖÇø®ÄÉÀ̼ÇÀÇ ¸ñÀûÀº ¸ðµ© µð¹ÙÀ̽º¸¦ ÅëÇØ µ¥ÀÌÅ͸¦ ¼Û½ÅÇϰųª ¼ö½ÅÇÏ´Â °ÍÀÏ °ÍÀÌ´Ù.
ÀÌ·¯ÇÑ µ¿ÀÛÀ» ´Ü¼øÈ½ÃÄÑ º»´Ù¸é Read, Write, CDC Specification¿¡ ÁØÇϱâ À§ÇÑ ±âŸ GPIO Á¦¾î Á¤µµ°¡ µÉ °Í °°´Ù. ÀÌ ¾ÖÇø®ÄÉÀ̼ÇÀº ½Ã¸®¾ó µð¹ÙÀ̽º µå¶óÀ̹ö¸¦ »ç¿ëÇÒ ¶§¿Í ¸¶Âù°¡Áö·Î USB CDC Ŭ¶óÀÌ¾ðÆ® µå¶óÀ̹ö¸¦ CreateFile()µîÀÇ API ÇÔ¼ö¸¦ ÅëÇØ serial port¸¦ openÇÏ¿© À§¿¡¼ ¸»ÇÑ read, write °°Àº µ¿ÀÛÀ» »ç¿ëÇÏ¸é µÈ´Ù.
¾ÖÇø®ÄÉÀ̼ÇÀÇ ÇÏÀ§ °èÃþÀÎ USB CDC Ŭ¶óÀÌ¾ðÆ® µå¶óÀ̹öÀÇ ½Ã¸®¾ó MDD °èÃþÀº ÀÏ¹Ý ½Ã¸®¾ó µå¶óÀ̹öÀÇ MDD2¿Í °ÅÀÇ °°Àº ÇüÅ·Π±¸¼º µÇ¾îÀֱ⠶§¹®¿¡ ¾ÖÇø®ÄÉÀ̼ǿ¡°Ô ´ëºÎºÐÀÇ ½Ã¸®¾ó µå¶óÀ̹ö ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇÑ´Ù.
µû¶ó¼, ½Ã¸®¾ó µå¶óÀ̹ö¸¦ »ç¿ëÇÏ´Â ¾ÖÇø®ÄÉÀ̼ÇÀ̶ó¸é ½ÇÁ¦·Î ½Ã¸®¾ó ÀÎÅÍÆäÀ̽º°¡ ¾Æ´Ï´õ¶óµµ ¾Æ¹«·± ¹®Á¦°¡ ¾ø°Ô µÈ´Ù.
¿¹·Î ÇöÀç ´ëºÎºÐ GPS ¸ðµâÀÌ ½Ã¸®¾ó ÀÎÅÍÆäÀ̽º¸¦ ÅëÇØ À§Ä¡ µ¥ÀÌÅ͸¦ ³Ñ°ÜÁÖ°í Àִµ¥ ÇâÈÄ USB ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇÏ´Â ¸ðµâÀ» »ç¿ëÇÏ°Ô µÈ´Ù°í °¡Á¤ÇßÀ» ¶§ ¸Ê(map) SW¸¦ ¸¸µå´Â ¾÷üµéÀº ÀÌ¿¡ ´ëÇÑ ¾Æ¹«·± ¼öÁ¤À» ÇÏÁö ¾Ê¾Æµµ µÈ´Ù´Â °ÍÀÌ´Ù.
´ÙÀ½ °èÃþÀÎ ½Ã¸®¾ó PDD °èÃþÀº »óÀ§ °èÃþÀÇ ½Ã¸®¾ó µå¶óÀ̹ö(MDD)¿Í ÇÏÀ§ °èÃþÀÎ USB Ŭ¶óÀÌ¾ðÆ® µå¶óÀ̹ö °£ÀÇ ÀÎÅÍÆäÀ̽º ¿ªÇÒÀ» ÇØÁÖ°í ÀÖ´Ù. ½Ã¸®¾ó MDD °èÃþ¿¡¼ ¿ä±¸µÈ operationµéÀ» ½Ã¸®¾ó µå¶óÀ̹öÀÇ ÇüÅ¿¡¼ USB ÀÎÅÍÆäÀ̽º ÇÔ¼ö(ÁÖ·Î API)·Î ±¸ÇöÇØ ÁÖ°Ô µÈ´Ù.
¸¸¾à ¿£Áö´Ï¾î°¡ ¿øÇÑ´Ù¸é ÀÌ °°Àº µ¿ÀÛÀ» USB Ŭ¶óÀÌ¾ðÆ® µå¶óÀ̹ö ÂÊÀ¸·Î ¿Å°Üµµ ¹®Á¦´Â ¾ø´Ù. ÀÌ´Â ¿£Áö´Ï¾îÀÇ ¼±ÅûçÇ×À¸·Î ±¸ÇöÀ» USB Ŭ¶óÀÌ¾ðÆ® µå¶óÀ̹ö¿¡¼ ÇÏ´Â °Íµµ ³ª»ÚÁö´Â ¾ÊÁö¸¸, »óÀ§ °èÃþ°ú ÇÏÀ§ °èÃþÀ» ¼·Î ¿¬°áÇØÁÖ´Â ¿ªÇÒÀ» Çϱ⠶§¹®¿¡ ÀÌ °èÃþ¿¡¼ ÇÏ´Â °ÍÀÌ ´õ ÁÁÁö ¾ÊÀ»±î »ý°¢ÇÑ´Ù.
À§ÀÇ ±×¸²1¿¡¼ º¸¶ó»ö ºÎºÐÀÌ USB CDC Ŭ¶óÀÌ¾ðÆ® µå¶óÀ̹ö ºÎºÐÀÌ¸ç ³ë¶õ»ö ºÎºÐÀº Çϵå¿þ¾î°¡ ¹Ù²ð °æ¿ì ¶Ç´Â ÀÎÅÍÆäÀ̽º°¡ º¯°æµÇ¾î »õ·Î¿î µå¶óÀ̹ö°¡ ÇÊ¿äÇÒ °æ¿ì ±³Ã¼µÉ ºÎºÐÀ» ³ªÅ¸³»°í ÀÖ´Ù. ÁÖº¯ µð¹ÙÀ̽º¿¡ ´ëÇÑ µå¶óÀ̹ö´Â µð¹ÙÀ̽º Á¦Á¶»ç¿¡¼ Á¦°øÇÏ´Â °æ¿ì°¡ ¸¹±â ¶§¹®¿¡ ¿£Áö´Ï¾î´Â ½ÇÁ¦·Î ½Ã¸®¾ó PDD ºÎºÐÀ» ÁÖ·Î ¼öÁ¤ÇÏ°Ô µÉ °ÍÀÌ´Ù.
USB CDC Ŭ¶óÀÌ¾ðÆ® µå¶óÀ̹öÀÇ µ¿ÀÛ °úÁ¤
USB Ŭ¶óÀÌ¾ðÆ® µå¶óÀ̹öÀÇ ÀüüÀûÀÎ µ¿ÀÛ °úÁ¤À» º¸¿©ÁÖ¸é ±×¸² 2¿Í °°´Ù.
¸ÕÀú USB Ŭ¶óÀÌ¾ðÆ® µå¶óÀ̹ö¸¦ ºôÆ®ÀÎ µå¶óÀ̹ö·Î ¸¸µé¾ú±â ¶§¹®¿¡ ½Ã½ºÅÛÀÌ ºÎÆÃµÉ ¶§ Deivce.exe¿¡ ÀÇÇØ µå¶óÀ̹ö´Â ÃʱâÈ µÇ°í ¾ÖÇø®ÄÉÀÌ¼Ç µîÀÇ »ç¿ë¿¡ ´ë±âÇÏ°Ô µÈ´Ù.
¹«¼± ¸ðµ©À» »ç¿ë ÇϰíÀÚ ÇÏ´Â Àüȱ⠶Ǵ À¥ ºê¶ó¿ìÀú °°Àº ¾ÖÇø®ÄÉÀ̼ÇÀÌ µå¶óÀ̹ö¸¦ ¿ÀÇÂÇÏ´Â °úÁ¤¿¡¼ CPUÀÇ GPIO¿¡ ÀÇÇØ ¹°¸®ÀûÀ¸·Î ²÷¾îÁ® ÀÖ´ø USB ÀÎÅÍÆäÀ̽º ¶óÀÎ(D+, D-)ÀÌ ¿¬°áµÇ¾î USB È£½ºÆ® µð¹ÙÀ̽º¿Í ¸ðµ© µð¹ÙÀ̽º°¡ ¹°¸®ÀûÀ¸·Î ¿¬°áµÇ°Ô µÇ°í, ÀÌ ¿¬°á·Î ÀÎÇÏ¿© ¸ðµ© µð¹ÙÀ̽º¸¦ ÀνÄÇÑ È£½ºÆ® µð¹ÙÀ̽º´Â »óÀ§ °èÃþÀ¸·Î ¸ðµ© µð¹ÙÀ̽ºÀÇ ÀνÄÀ» ¾Ë¸®°Ô µÈ´Ù.
À̶§ USBDeviceAttach() ÇÔ¼ö°¡ È£ÃâµÇ¾î ÀÎÅÍÆäÀ̽º¿¡ °ü·ÃµÈ USB pipe, event, descriptor µîÀÌ Ã³¸®µÇ°Ô µÈ´Ù.
ÀÌ·¯ÇÑ COM_Open() ÇÔ¼öÀÇ ¼öÇàÀ¸·Î ÀÎÅÍÆäÀ̽º°¡ »ç¿ë °¡´ÉÇÏ°Ô µÇ¸ç À̶§ºÎÅÍ ¾ÖÇø®ÄÉÀ̼ÇÀº ±Ã±ØÀûÀ¸·Î ÇϰíÀÚ ÇÏ´Â µ¿ÀÛÀÎ read, write, ±âŸ Æ÷Æ® Á¦¾î µîÀ» ¼öÇàÇÒ ¼ö ÀÖ°Ô µÈ´Ù.
¸¶Áö¸·À¸·Î ¸ðµç ÀÛ¾÷À» ¸¶Ä£ ¾ÖÇø®ÄÉÀ̼ÇÀº COM_Close() ÇÔ¼ö¸¦ È£ÃâÇÏ°í ½Ã¸®¾ó µå¶óÀ̹ö ºÎºÐ°ú USB µå¶óÀ̹ö ºÎºÐ¿¡ ´ëÇÑ Á¤¸® ÀÛ¾÷À» ¼öÇàÇÏ°Ô µÈ´Ù. ±×¸®°í COM_Deinit()Àº ÀϹÝÀûÀÎ ºôÆ®ÀÎ µå¶óÀ̹öÀÇ °æ¿ì¿Í ¸¶Âù°¡Áö·Î È£ÃâµÇÁö ¾Ê´Â´Ù. Áö±Ý±îÁö USB CDC client µå¶óÀ̹öÀÇ ÃʱâȺÎÅÍ close µÇ´Â °úÁ¤À» ÀüüÀûÀ¸·Î »ìÆìº¸¾Ò´Ù.
±×·³ °¢ ´Ü°è¸¦ ¼¼ºÐÈÇÏ¿© ¾Ë¾Æº¸µµ·Ï ÇÏÀÚ.
COM_Init
±×¸² 3Àº CDC Ŭ¶óÀÌ¾ðÆ® µå¶óÀ̹ö°¡ ÃʱâȵǴ °úÁ¤ÀÌ´Ù. ½Ã¸®¾ó MDD °èÃþÀ¸·ÎºÎÅÍ ÇÏÀ§ °èÃþÀÇ ÃʱâÈ ÇÔ¼ö¸¦ ÅëÇØ ´Ü°èÀûÀ¸·Î ÃʱâÈ ÇÏ´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù.
ÀÌ ÃʱâÈ °úÁ¤¿¡¼ ½Ã¸®¾ó MDD °èÃþ¿¡¼´Â USB ÀÎÅÍÆäÀ̽º¿¡ °ü·ÃµÈ ÄÚµå´Â ÇÊ¿äÄ¡ ¾Ê´Ù. ÀÌ MDD °èÃþ¿¡¼ È£ÃâÇÑ ½Ã¸®¾ó PDD °èÃþÀÇ ÃʱâÈ ÇÔ¼ö PDD_SerInit()´Â ÀϹÝÀûÀÎ ½Ã¸®¾ó µå¶óÀ̹öÀÇ ÃʱâÈ °úÁ¤°ú USB ÀÎÅÍÆäÀ̽º¿¡ ´ëÇÑ ÃʱâÈ ÀÛ¾÷À» ¼öÇàÇÏ°Ô µÈ´Ù. ÀÌ USB ÀÎÅÍÆäÀ̽º ÃʱâÈ ÀÛ¾÷À» ¼³¸íÇÏÀÚ¸é ´ÙÀ½°ú °°´Ù.
USB È£½ºÆ® µð¹ÙÀ̽º¿Í ¸ðµ© µð¹ÙÀ̽º°£ÀÇ USB ÀÎÅÍÆäÀ̽ºÀÎ D+/D- ¶óÀÎÀº Æò»ó½Ã ²÷¾îÁ® ÀÖ´Â »óÅ·ΠÀ¯ÁöµÇ¸ç ¾ÖÇø®ÄÉÀ̼ǿ¡ ÀÇÇØ USB CDC Ŭ¶óÀÌ¾ðÆ® µå¶óÀ̹ö°¡ ¸ðµ© µð¹ÙÀ̽º¸¦ »ç¿ëÇÏ·Á°í ÇÒ ¶§ ¿¬°áµÈ´Ù.
ÀÌ´Â CPUÀÇ GPIO¿¡ ÀÇÇØ Á¦¾îµÈ´Ù. µû¶ó¼, ÀÌ Initialize °úÁ¤¿¡¼´Â Á¦¾î¸¦ ´ã´çÇÏ´Â GPIO¿¡ ´ëÇÑ ÇöÀç »óŸ¦ üũÇÏ¿© ¸¸¾à ¿¬°áµÇ¾î ÀÖ´Ù¸é ¿¬°áÀÌ ²÷¾îÁø »óÅ·ΠÀ¯Áö½ÃŰ´Â ¿ªÇÒ¸¸ ÇÑ´Ù.
±×¸®°í, USB È£½ºÆ® µð¹ÙÀ̽º¸¦ suspend »óÅ·ΠÁøÀÔ½ÃÄÑ Àü¿ø¿¡ ´ëÇÑ ¼Òºñ¸¦ ÃÖ¼ÒÈ ÇÑ´Ù. ¾ÆÁ÷ USB ÀåÄ¡°¡ µ¿À۵ǰí ÀÖ´Â »óŰ¡ ¾Æ´Ï±â ¶§¹®¿¡ USB µ¿ÀÛ¿¡ °ü·ÃµÈ pipe³ª descriptor ±×¸®°í °¢Á¾ event¿¡ ´ëÇÑ »ý¼º ¹× ÃʱâÈ´Â ÇÏÁö ¾Ê°í ´Ü¼øÈ÷ USB ÀÎÅÍÆäÀ̽º ¶óÀΰú ±âŸ °ü·Ã µð¹ÙÀ̽ºµé¿¡ ´ëÇÑ Ãʱâȸ¸ ó¸®ÇÑ´Ù.
COM_Open
±×¸² 4´Â ¾ÖÇø®ÄÉÀ̼ÇÀÌ µå¶óÀ̹ö¸¦ ¿ÀÇÂÇßÀ» ¶§ÀÇ °úÁ¤À» ³ªÅ¸³»°í ÀÖ´Ù.
½Ã¸®¾ó MDD °èÃþÀÇ COM_Open() ÇÔ¼ö¿¡¼ ÀÏ¹Ý ½Ã¸®¾ó µå¶óÀ̹ö¿Í ¸¶Âù°¡Áö·Î µå¶óÀ̹öÀÇ open operationÀ» ¼öÇàÇϱâ À§ÇØ ½Ã¸®¾ó PDDÀÇ PDD_SerOpen() ÇÔ¼ö¸¦ È£Ãâ ÇÑ´Ù.
ÀÌ PDD_SerOpen() ÇÔ¼ö¿¡¼ ´Ù½Ã USB_SetPortControl()¸¦ È£ÃâÇÏ¿© USB È£½ºÆ® µð¹ÙÀ̽º¿¡ Àü¿øÀ» Àΰ¡Çϰųª USB ÀÎÅÍÆäÀ̽º D+/D- ¶óÀÎÀ» Á¦¾îÇÏ¿© USB È£½ºÆ® µð¹ÙÀ̽º¿Í ¸ðµ© µð¹ÙÀ̽º¸¦ ¿¬°á½ÃÄÑÁÖ´Â µîÀÇ µ¿ÀÛÀ» ¼öÇàÇϰí ÀÌ µ¿ÀÛ¿¡ ´ëÇÑ °á°ú¸¦ USBDeviceAttach() ÇÔ¼ö·ÎºÎÅÍ ±â´Ù¸®°Ô µÈ´Ù.
À̶§ USB È£½ºÆ® µð¹ÙÀ̽º´Â ¸ðµ© µð¹ÙÀ̽º°¡ ÀÚ½ÅÀÇ Çãºê Æ÷Æ®¿¡ ²ÈÈù ÇϳªÀÇ µð¹ÙÀ̽º ÀåÄ¡·Î ÀνÄÇÏ°Ô µÇ°í ÀûÇÕÇÑ Å¬¶óÀÌ¾ðÆ® µå¶óÀ̹ö¸¦ ·ÎµùÇÏ´Â °úÁ¤ÀÌ ÀϾ°Ô µÈ´Ù. ÀÌ·¯ÇÑ ÀÏ·ÃÀÇ °úÁ¤¿¡¼ USBDeviceAttach()°¡ È£ÃâµÇ°Ô µÈ´Ù.
USBDeviceAttach() ÇÔ¼ö´Â USB transfer¿¡¼ ÇÊ¿äÇÑ Bulk¿Í Interrupt¿¡ ´ëÇÑ pipe, ¿©·¯ dispatch event ´ëÇÑ »ý¼º, descriptor ó¸® µîÀ» ÇÏ¸ç ¸ðµç µ¿ÀÛÀÌ ¿Ï·áµÇ¾úÀ» ¶§ ÀÌ »ç½ÇÀ» event·Î signalÇÏ¿© ÀåÄ¡°¡ Àß ÀνĵǾúÀ½À» ¾Ë¸®°Ô µÈ´Ù.
°á°ú¸¦ ´ë±â ÁßÀÎ SetPortControl() ÇÔ¼ö´Â signalÀ» ¹Þ¾ÒÀ» °æ¿ì µå¶óÀ̹öÀÇ ¿ÀÇ °úÁ¤À» ¿Ï·áÇÏ°Ô µÇ°í timeout µîÀÇ ¿øÀÎÀ¸·Î µ¿ÀÛÀÇ °á°ú°¡ ½ÇÆÐ¶ó¸é ÀÌ¿¡ ´ëÇÑ ¿¡·¯ 󸮸¦ ÇÏ°Ô µÈ´Ù.
¸î °¡Áö ÀÌÀ¯·Î À§¿¡¼ ¸»ÇÑ event¸¦ ¹ÞÁö ¸øÇØ timeoutÀÌ ¹ß»ý ÇßÀ» ¶§´Â ´Ù½Ã USB È£½ºÆ® µð¹ÙÀ̽º³ª USB ÀÎÅÍÆäÀ̽º ¶óÀÎÀ» ²÷¾ú´Ù°¡ ºÙ¿©ÁÖ´Â µîÀÇ µ¿ÀÛÀ» ¿©·¯ ¹ø ½ÃµµÇØ º¸´Â ·çƾÀ» ³Ö´Â °ÍÀÌ ÁÁ´Ù.
COM_Read
±×¸² 5´Â Read µ¿ÀÛ¿¡ ´ëÇÑ °úÁ¤À» ³ªÅ¸³»°í ÀÖ´Ù.
¸ÕÀú ¼Ò½º 1À» º¸¸é USB_BulkInThread()¿¡¼ lpIssueBulkTransfer() API ÇÔ¼ö·Î Bulk In pipe·Î read transfer¸¦ ¼öÇàÇϸç À̶§ USB_BulkInTransferComplete()ÇÔ¼ö¸¦ µÎ ¹øÂ° ÀÎÀÚ·Î ³Ñ°ÜÁÖ¾î transfer°¡ ¿Ï·áµÇ¾úÀ» ¶§ ÀÌ »ç½ÇÀ» signal ÇÒ callback ÇÔ¼ö·Î µî·ÏÇÑ´Ù.
½ÇÁ¦·Î Read transfer°¡ ¹®Á¦ ¾øÀÌ ÁøÇàµÇ¾úÀ¸¸é ¾òÀº µ¥ÀÌÅ͸¦ read queue·Î ¿Å±â±â À§ÇÑ ÇÔ¼öÀÎ PutToRxQueue()¸¦ È£ÃâÇÑ´Ù.
PutToRxQueue() ÇÔ¼ö¿¡¼ ÀÎÀÚ·Î ³Ñ°Ü¹ÞÀº bufferÀÇ ³»¿ë Áß ÀϺΠ¶Ç´Â ÀüºÎ¸¦ read queue¿¡ Ä«ÇÇÇϰí Ä«ÇÇÇÑ byte¸¸Å ÀÌ queueÀÇ write index¸¦ Áõ°¡½ÃÄÑ ¾÷µ¥ÀÌÆ®ÇÑ´Ù. ±×¸®°í PDD_SerialDispatchThread()¿¡ µ¥ÀÌÅ͸¦ ¼ö½ÅÇß´Ù´Â event¸¦ signalÇØ receive interrupt handlerÀÎ PDD_SerRxIntr() ÇÔ¼ö°¡ À̸¦ ó¸®Çϵµ·Ï ÇÑ´Ù.
ÀÌ receive interrupt handler¿¡¼ read queueÀÇ ³»¿ëÀ» buffer·Î ´Ù½Ã ¿Å±â°í Àо byte¸¸Å read queueÀÇ read index¸¦ Á¶Á¤ÇÑ´Ù. ¸¶Áö¸·À¸·Î COM_Read() ÇÔ¼ö¿Í ¼ö½ÅÀ» ´ë±âÁßÀÎ ¾ÖÇø®ÄÉÀ̼ǿ¡°Ô µ¥ÀÌÅ͸¦ °¡Á®°¥ °ÍÀ» event·Î ¾Ë·ÁÁØ´Ù. ÀÌ·¯ÇÑ °úÁ¤Àº USB read transfer·Î ¾ò¾î¿Â µ¥ÀÌÅ͸¦ ¸ðµÎ Àü´ÞÇÒ ¶§±îÁö ¹Ýº¹µÈ´Ù.
COM_Write
±×¸² 6Àº Write¿¡ ´ëÇÑ ÀüüÀûÀÎ °úÁ¤À» º¸¿©ÁÖ°í ÀÖ´Ù.
½Ã¸®¾ó MDDÀÇ COM_Write() ÇÔ¼ö¿¡¼ °°Àº °èÃþ¿¡ ÀÖ´Â DoTxData()¸¦ È£ÃâÇÑ´Ù. À̰ÍÀº ÀϹÝÀûÀÎ ½Ã¸®¾ó µå¶óÀ̹öÀÇ sequence¿Í °°Àº °ÍÀÌ´Ù.
ÀÌ ÇÔ¼ö¿¡¼´Â ´Ù½Ã ÇÏÀ§ °èÃþÀÎ Serial PDDÀÇ transmit interrupt handlerÀÎ PDD_SerTxIntrEx() ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. ÀÌ transmit interrupt handler¿¡¼´Â ¼Ò½º 2¿Í °°ÀÌ lpIssueBulkTransfer() API ÇÔ¼ö¸¦ ÅëÇØ Bulk Out pipe·Î Àü¼ÛÀ» ½ÃµµÇÑ´Ù.
À̶§ ÇÔ¼öÀÇ ÀÎÀÚ Áß µÎ ¹øÂ° ÀÎÀÚÀÎ callback ÇÔ¼ö, USB_BulkOutTransferComplete()¸¦ µî·ÏÇϰí Àü¼Û¿¡ ´ëÇÑ °á°ú¸¦ ±â´Ù¸®°Ô µÈ´Ù. Àü¼ÛÀÌ ÀÌ»ó ¾øÀÌ ³¡³µÀ½À» callback ÇÔ¼ö·ÎºÎÅÍ signal ¹ÞÀ¸¸é PDD_SerialDispatchThread()¿¡¼ ´Ù½Ã DoTxData() ÇÔ¼ö°¡ È£ÃâµÈ´Ù. ÀÌ °úÁ¤Àº ¸ðµç µ¥ÀÌÅͰ¡ Bulk Out pipe¸¦ ÅëÇØ Àü¼ÛµÉ ¶§±îÁö ¹Ýº¹µÇ°Ô µÈ´Ù.
À§¿¡¼ read transfer¿¡¼µµ »ç¿ëÇÑ lpIssueBulkTransfer() ÇÔ¼ö¸¦ ´ë½ÅÇØ¼ IssueBulkTransfer() ÇÔ¼ö¸¦ »ç¿ëÇØµµ ¹«°üÇÏÁö¸¸,IssueBulkTransfer() ÇÔ¼öµµ °á°úÀûÀ¸·Î´Â lpIssueBulkTransfer()¸¦ È£ÃâÇÏ°Ô µÇ¹Ç·Î Á÷Á¢ »ç¿ëÇÏ¿´´Ù.
COM_Close
±×¸² 7Àº Ŭ·ÎÁî(Close)¿¡ ´ëÇÑ °úÁ¤À» ³ªÅ¸³»°í ÀÖ´Ù. ¿ÀÇÂÇÏ´Â °úÁ¤°ú ¹Ý´ëµÇ´Â µ¿ÀÛÀ̶ó ´ç¿¬ÇÑ °ÍÀÏÁö´Â ¸ð¸£°ÚÁö¸¸ ¿ÀÇÂÀÇ °úÁ¤°ú ¸¹Àº ºÎºÐÀÌ sequenceÀûÀ¸·Î À¯»çÇÏ´Ù.
Serial MDD °èÃþÀÇ COM_Close() ÇÔ¼ö´Â ÇÏÀ§ °èÃþÀÇ PDD_SerClose() ÇÔ¼ö¸¦ È£ÃâÇÏ°Ô µÈ´Ù. ÀÌ ÇÔ¼ö¿¡¼´Â USB ÀÎÅÍÆäÀ̽º¿¡ »ç¿ëÇÏ´ø thread³ª eventµîÀ» Á¤¸®Çϰí ÇÏÀ§ °èÃþÀÇ DeviceNotify() ÇÔ¼ö¿¡ event¸¦ signalÇØ¼ »ý¼ºÇØ ³õÀº USB pipe ³ª °ü·Ã transfer¿¡ °ü·ÃµÈ eventµîÀ» »èÁ¦Çϵµ·Ï ÇÑ´Ù.
µ¿½Ã¿¡ °°Àº ÇÏÀ§°èÃþÀÇ USB_SetPortControl()À» È£ÃâÇØ¼ USB ÀÎÅÍÆäÀ̽º ¶óÀÎÀº ²÷µµ·Ï ÇÑ´Ù.
USB_SetPortControl() ÇÔ¼ö¿¡¼ USB ÀÎÅÍÆäÀ̽º ¶óÀÎÀ» ²÷Àº ÈÄ, DeviceNotify()·ÎºÎÅÍ ¸ðµç USB µå¶óÀ̹öÀÇ objectµéÀÌ Á¦°ÅµÇ¾ú´ÂÁö¸¦ È®ÀÎÇϱâ À§ÇØ ´ë±âÇÑ´Ù. ÀÌ·± Á¤¸®°úÁ¤¿¡ ¹®Á¦°¡ ¾øÀ» °æ¿ì USB_close() ÇÔ¼ö¸¦ È£ÃâÇØ¼ USB host µð¹ÙÀ̽º¸¦ ´Ù½Ã suspend »óÅ·ΠÀ¯ÁöµÇµµ·Ï ¸¸µç´Ù.
¸¶Ä¡¸ç
Áö±Ý±îÁö ¹öÃß¾ó ½Ã¸®¾ó µå¶óÀ̹öÀÇ Çʿ伺°ú ÀåÁ¡, ±×¸®°í ¹öÃß¾ó ½Ã¸®¾ó µå¶óÀ̹öÀÇ ¿¹·Î ¼³¸íÇÑ USB CDC Ŭ¶óÀÌ¾ðÆ® µå¶óÀ̹öÀÇ ÀüüÀûÀÎ µ¿ÀÛ°ú ¿¬°á ±¸Á¶¿¡ ´ëÇØ¼ »ìÆì º¸¾Ò´Ù.
ÀüüÀûÀÎ ºÎºÐÀ» ±¸Ã¼ÀûÀ¸·Î ´Ù·çÁö ¸øÇϰí ÀϺκи¸ ´Ù·ç¾ú±â ¶§¹®¿¡ ±â°í ÀÚü°¡ µ¶ÀÚ ºÐµéÀÇ ÀÌÇØ¿¡ ¿ÀÈ÷·Á È¥¶õÀ» ÁÙ±î ¿°·ÁµÈ´Ù.
ÀÌ·¯ÇÑ ÀÌÀ¯·Î ¿Ïº®ÇÏ°Ô Á¦°øÄ¡ ¸øÇÏ´Â ¼Ò½º ÄÚµåÀÇ ÂüÁ¶¸¦ ÀÚÁ¦ÇßÀ¸¸ç ´ë½Å ºí·Ï ´ÙÀ̾î±×·¥À¸·Î ´ëÄ¡Çß´Ù. °³ÀÎÀûÀÎ ¹Ù¶÷ÀÌÁö¸¸ ºñ½ÁÇÑ Á¾·ùÀÇ µå¶óÀ̹ö¸¦ °³¹ßÇÒ ¶§ ¾à°£À̳ª¸¶ Âü°í°¡ µÇ±æ ¹Ù¶õ´Ù.
¿£Áö´Ï¾î¿¡°Ô´Â ¿ª½Ã ¼Ò½º Äڵ带 ÇϳªÇϳª ºÐ¼®ÇÏ´Â °ÍÀÌ Á¦ÀÏ ¸íÈ®ÇÑ ¹æ¹ýÀ̱⠶§¹®¿¡ ÀÎÅÍ³Ý»ó¿¡ °ø°³µÇ¾îÀÖ´Â ºñ½ÁÇÑ Á¾·ùÀÇ µå¶óÀ̹ö¸¦ ±¸Çؼ ±Ã±ÝÇß´ø ºÎºÐÀ» »ìÆìº¸´Â °ÍÀÌ ÁÁÀ» °Í °°´Ù. @
Âü°í ÀÚ·á
Company and Organization
-USB Implementers Forum :
http://www.usb.org
-LeCroy :
http://www.lecroy.com
Tools
-LeCroy Chief : Protocol analyzer
-USBView : ÇöÀç PC¿¡ Á¢¼ÓµÈ USB ÀåÄ¡ÀÇ Descriptor¸¦ Ãâ·ÂÇÑ´Ù.
-Snoopy : USBViewÀÇ ±â´É¿¡ USB ÀåÄ¡ÀÇ load/unload ±â´ÉÀÌ Ãß°¡µÇ¾î ÀÖ´Ù.
Windows CE Serial driver and CPU vendor¡¯s BSP/CSP
Books
-USB Complete – Axelson(lakeview research)
-USB Guide – ±èÇüÈÆ(Ohm)