long8

ÐÂÎŶ¯Ì¬
NEWS FEED
ÄúÏÖÔÚµÄλÖãº
Ê×Ò³
-
-
-
ÔÚi.MX RTÖÐʹÓÃLwIPЭÒéջdzÎö

ÔÚi.MX RTÖÐʹÓÃLwIPЭÒéջdzÎö

  • ·ÖÀࣺÐÐÒµ¶¯Ì¬
  • ×÷ÕߣºHenry Lu
  • ȪԴ£ºMCU¼ÓÓÍÕ¾
  • Ðû²¼Ê±¼ä£º2022-11-03 11:35
  • »á¼ûÁ¿£º

¡¾ÌáÒªÐÎò¡¿ LWIPЭÒéÓëÍøÂç·Ö²ã LwIP(Light weight IP)£¬ÊÇÒ»ÖÖÇáÁ¿»¯ÇÒ¿ªÔ´µÄTCP/IPЭÒéÕ»£¬Ëü¿ÉÒÔÔÚÓÐÏÞµÄRAMºÍROMÌõ¼þÏ£¬ÊµÏÖÒ»¸öÍêÕûµÄTCP/IP ЭÒéÕ»¡£±ðµÄ£¬LwIP¼È¿ÉÒÔÒÆÖ²µ½²Ù×÷ϵͳÉÏÔËÐУ¬Ò²¿ÉÒÔÔÚÎÞ²Ù×÷ϵͳµÄÇéÐÎÏÂ×ÔÁ¦ÔËÐС£? ? TCP/IPЭÒéÕ»µÄÄ£×ӽṹÈçÏÂͼËùʾ£¬ÓÉÓÚTCP/IPЭÒéÕ»µÄ·ºÆðʱ¼ä½ÏÔ磬ÒÔÊÇûÓÐƾ֤¹Å°åµÄ7²ãOSIÍøÂçÄ£×Ó¾ÙÐÐÉè¼Æ£¬Ò»¹²Ö»·ÖΪÁË4²ã£¬»®·ÖΪÍøÂç½Ó¿Ú²ã£¬ÍøÂç²ã£¬´«Êä²ãÒÔ¼°Ó¦Óò㣬LwIPЭÒéÕ»µÄÍøÂçÄ£×ÓÓëÖ®ÀàËÆ¡£ ÍøÂç½Ó¿Ú²ãÖ÷Ҫͨ¹ýË«½ÊÏߣ¬¹âÏË£¬ÎÞÏߵȷ½·¨¾ÙÐÐÍøÂçÉÏÊý¾ÝÖ¡µÄ·¢ËͺÍÎüÊÕ¡£ÍøÂç½Ó¿Ú²ã½«ÍøÂç²ãµÄÊý¾Ý×é×°³É×Ô¼ºÌض¨µÄÖ¡¾ÙÐз¢ËÍ£¬Í¬Ê±Ò²»áÎüÊÕÊý¾ÝÖ¡¾ÙÐÐÆÊÎö£¬²¢½«ÆÊÎöʺóµÄÊý¾Ý·¢Ë͸øÍøÂç²ã¡£? ? ?ÍøÂç²ãÈÏÕæÔÚÖ÷»úÖ®¼äµÄͨѶÀú³ÌÖ®ÖÐÑ¡ÔñÊý¾Ý°üµÄ´«Êä·¾¶£¬²¢ÇÒÔÚÎüÊÕµ½´«ÈëµÄÊý¾Ý±¨Ê±»áÄ¥Á·ÆäÓÐÓÃÐÔ£¬²¢µÝ½»¸øÉϲã¡£? ? ?´«Êä²ãÖ÷ÒªÌṩӦÓóÌÐòÖ®¼äµÄͨѶ·þÎñ£¬Ëü»áϵͳµÄÖÎÀíÁ½Í·Êý¾ÝÖ®¼äµÄ½»»¥¡£ ? ?Ó¦Óòã¼òÆÓÀ´Ëµ¾ÍÊÇʹÓô«Êä²ãÌṩµÄ¹¦Ð§·¢ËÍ×Ô¼ºµÄÊý¾Ýµ½¶Ô·½¡£ ? LWIPЭÒéÕ»³õʼ»¯ ÔÚ×îÏÈ´«ÊäÊý¾Ý֮ǰ£¬Ê×ÏÈÒª¾ÙÐÐһϵÁеijõʼ»¯²Ù×÷£¬±¾ÎÄÒÔi.MX RT1060 SDKÖеÄDemo "evkmimxrt1060_lwip_udppecho_bm"ΪÀý£¬¸Ã´úÂë¿ÉÒÔͨ¹ýMCUXpresso IDE¾ÙÐе¼Èë¡£ netif_addº¯ÊýÓÃÀ´¹ÒÔØÍøÂç½Ó¿Ú£¬²¢Íê³ÉÍøÂçͨѶ֮ǰµÄ´ó²¿·Ö³õʼ»¯ÊÂÇ飬°üÀ¨PHYоƬµÄ³õʼ»¯£¬i.MX RT1060ÉÏENETÍâÉè³õʼ»¯£¬ÒÔ¼°Ò»Ð©Í¨Ñ¶Àú³ÌÖÐÓõ½µÄÏà¹ØÊý¾Ý½á¹¹µÄ³õʼ»¯¡£ PHYоƬµÄ³õʼ»¯ÊÇÔÚethernetif_phy_initÖ®ÖÐÍê³É£¬°üÀ¨MDIO³õʼ»¯£¬Íø¿Ú×Ô¶¯Ð­ÉÌ£¬Íø¿ÚÅþÁ¬µÈ²Ù×÷¡£ PHY³õʼ»¯º¯ÊýÒÔ¼°ENET³õʼ»¯º¯Êý¶¼ÔÚethernetif0_initº¯ÊýÖб»Å²Ó㬲¢ÇҸú¯Êý±»×÷Ϊһ¸öʵ²Î´«Èënetif_addÖ®Öв¢±»ÔÚÆäÖб»Å²Óã¬Òò´Ënetif_add²»µ«Íê³ÉÁËÍøÂç½Ó¿ÚµÄ¹ÒÔØ£¬»¹Íê³ÉÁ˽ӿÚÏà¹ØµÄһϵÁгõʼ»¯ÊÂÇé¡£ ±ðµÄ£¬ÔÚ¾ÙÐÐÍøÂç½Ó¿ÚÏà¹Ø³õʼ»¯µÄͬʱ£¬Ò²Íê³ÉÁ˶ÔһϵÁÐÊý¾Ý½á¹¹µÄ³õʼ»¯£¬´Ë´¦ÏÈÈÝһЩÔÚÍøÂçͨѶÀú³ÌÖÐÓõ½µÄ½á¹¹Ìå¡£ enet_rx_bd_struct_t, ¸Ã½á¹¹ÌåÒ»Ñùƽ³£ÓÃÀ´½ç˵buffer descriptor£¬ÍøÂç½Ó¿Ú²ãÎüÊÕµ½µÄÊý¾ÝÒ»Ñùƽ³£¾Í·â×°ÔÚbuffer descriptorÖ®ÖС£ ½á¹¹Ìå½ç˵ÈçÏÂͼËùʾ£¬ÆäÖÐlength´ú±íbuffer descriptorÖ®ÖÐÊý¾ÝµÄ³¤¶È£¬controlÖ®Öлá´æ´¢Ò»Ð©Óëbuffer descriptorÏà¹ØµÄ״̬ÐÅÏ¢£¬²¢ÇÒÖ§³Öenhanced buffer descriptor¡£ enet_rx_bd_ring_t½á¹¹Ì壬ÈçÏÂͼËùʾ£¬Ã¿Ò»Ìõring¶¼ÊÇÓÉbuffer descriptor×é³ÉµÄ¡£ Ring½á¹¹ÌåÖеÄrxBdBase³ÉÔ±¾ÍÊǵÚÒ»¸öbuffer descriptorµÄµØµã£¬rxGenIdxÖ¸µÄÊÇÄ¿½ñbuffer descriptorµÄÐòºÅ£¬rxRingLenÖ¸µÄÊÇÕâÌõRingÖй²Óм¸¸öbuffer descriptor¡£ pbuf½á¹¹Ì壬pbuf½á¹¹ÌåÊÇÓÃÀ´ÐÎòlwipЭÒéÕ»ÖÐÊý¾Ý°üµÄ½á¹¹Ìå¡£ËüÊÇÒÔÁ´±íµÄÐÎʽ±£´æµÄ£¬pbufÖ®Öлᱣ´æÖ¸ÕëÖ¸ÏòÏÂÒ»¸öpubf ¡£ ÓÉÓÚÔÚcaseÖ®ÖУ¬Ê¹ÓõÄÊÇUDPͨѶ£¬Òò´Ë»¹ÐèÒª¾ÙÐÐһЩUDPÏà¹ØµÄ³õʼ»¯ÉèÖá£ÀýÈçŲÓÃudp_bindº¯Êý£¬¶ÔUDP¿ØÖÆ¿éÖеÄlocal_port,local_ipµÈ²ÎÊý¾ÙÐа󶨣¬ÒÔ¼°Å²ÓÃudp_recvÔÚudp¿ØÖÆ¿éÉϾÙÐÐһЩ»Øµ÷º¯ÊýµÄ°ó¶¨µÈµÈ£¬ÖÁÓÚʲôÊÇUDP¿ØÖƿ飬ÔÚºóÃæ»á¾ÙÐÐÏÈÈÝ¡£ LWIPÍøÂç½Ó¿Ú²ã ÍøÂç½Ó¿Ú²ãÊý¾ÝÎüÊÕ ÔÚudpecho demoÖ®ÖÐÊÇͨ¹ýÂÖѯµÄÒªÁìÀ´ÊµÏÖÊý¾ÝÎüÊÕ£¬Ê¹ÓõÄÊÇraw/callback api, ³ýÁËÕâÖÖapiÖ®Íâlwip»¹Ìṩsocket apiµÈ£¬²»¹ýÐèÒª²Ù×÷ϵͳµÄÖ§³Ö¡£ ÔÚwhileÑ­»·ÖÐÊ×ÏÈ»áȥŲÓÃethernetif_inputº¯Êý£¬¸Ãº¯ÊýÖлáŲÓÃethernetif_linkinputº¯Êý£¬ÔÚethernetif_linkinputÖ®ÖÐÓÖ»áȥŲÓÃENET_GetRxFrameºÍethernetif_rx_frame_to_pbufsº¯Êý¡£ ? ?ÔÚENET_GetRxFrameº¯ÊýÖлá°ÑÍøÂç½Ó¿ÚÖÐÎüÊÕµ½µÄÊý¾Ý°áÔ˵½RxFrameÖ®ÖУ¬È»ºóethernetif_rx_frame_to_pbufsº¯ÊýÓÖ»á°ÑRxFrameÖ®ÖеÄÊý¾Ý°áÔ˵½pbufsÖ®ÖУ¬½ÓÏÂÀ´¾Í»áŲÓÃethernet_inputº¯Êý£¬ÔÚlwipÔ´ÂëÖ®ÖеÄethernet.cÎļþÖб»½ç˵£¬Ö÷ÒªÓÃÓÚÎÞ²Ù×÷ϵͳʱ¼äÍøÂç²ãÐÐÖ¹ÖÃÎüÊÕµ½µÄÊý¾ÝÖ¡£¬È»ºóÍùÉϲãµÝ½»£¬¹ØÓÚ²î±ðµÄÊý¾Ý°ü¾ÙÐвî±ðµÄ´¦Öóͷ££¬ÈôÊÇÊÇ ARP°ü£¬ÔòŲÓÃetharp_inputº¯Êý£»ÈôÊÇÊÇ IP °ü£¬ÔòŲÓà ip4_inputº¯Êý£¬Í¨¹ýÕâЩº¯Êý½«Êý¾Ý°üµÝ½»¸ø IP ²ã´¦Öóͷ£¡£ ÍøÂç½Ó¿Ú²ãÊý¾Ý·¢ËÍ ÔÚÍøÂç²ã·¢ËÍÊý¾Ýʱ£¬»áŲÓÃÍøÂç½Ó¿Ú²ãµÄethernet_outputº¯Êý£¬ethernet_outputº¯ÊýÖ®ÖÐÓÖ»áȥŲÓÃethernetif_linkoutputº¯Êý,µ±Êý¾Ý½Ï´óÐèÒªÓöà¸öpbuf¾ÙÐд洢µÄʱ¼ä£¬pbufÒÔÁ´±íµÄÐÎʽ±£´æ£¬ÒÔÊÇÐèÒª½«ÕâЩÁ´±íÖеÄÊý¾Ý¾ÙÐкϲ¢£¬ÈçÏÂͼËùʾ¡£ ²Ù×÷Íê³Éºóͨ¹ýENET_SendFrameº¯ÊýÀ´Íê³ÉÊý¾ÝµÄ·¢ËÍ£»×îºóÊý¾Ý»áͨ¹ýÍøÂç½Ó¿Ú´«Êä³öÈ¥¡£ ? LWIPÍøÂç²ã IPЭÒé IPЭÒéÊÇÒ»ÖÖ¾­µäµÄÍøÂç²ãЭÒ飬IPЭÒé(Internet Protocol)£¬ÓÖ³Æ֮ΪÍø¼ÊЭÒ飬IP ЭÒé´¦ÓÚIP²ãÊÂÇ飬ËüÊÇÕû¸öTCP/IPЭÒéÕ»µÄ½¹µãЭÒ飬ÉϲãЭÒ鶼ҪÒÀÀµIPЭÒéÌṩµÄ·þÎñ£¬IPЭÒéÈÏÕ潫Êý¾Ý±¨´ÓÔ´Ö÷»ú·¢Ë͵½Ä¿µÄÖ÷»ú£¬²¢Í¨¹ýIPµØµã×÷ΪΨһʶ±ðÂë¡£¼òÆÓÀ´Ëµ£¬²î±ðÖ÷»úÖ®¼äµÄIPµØµãÊÇ·×ÆçÑùµÄ£¬ÔÚ·¢ËÍÊý¾Ý±¨µÄÀú³ÌÖУ¬IPЭÒ黹¿ÉÄܶÔÊý¾Ý±¨¾ÙÐзÖƬ´¦Öóͷ££¬Í¬Ê±ÔÚÎüÊÕÊý¾Ý±¨µÄʱ¼ä£¬»¹¿ÉÄÜÐèÒª¶Ô·ÖƬµÄÊý¾Ý±¨¾ÙÐÐÖØ×°µÈµÈ¡£ IPЭÒéÊÇÒ»ÖÖÎÞÅþÁ¬µÄ²»¿É¿¿Êý¾Ý±¨½»¸¶Ð­Ò飬ЭÒé×Ô¼º²»ÌṩÈκεĹýʧ¼ì²éÓë»Ö¸´»úÖÆ£¬ÐèÒª´«Êä²ãЭÒéÀ´Íê³ÉÕâЩ¹¦Ð§¡£ IPµØµã ÔÚTCP/IPÉè¼ÆÀú³ÌÖУ¬Éè¼ÆְԱΪÿһ̨Ö÷»ú·ÖÅÉÒ»¸ö32bitµÄIPµØµã£¬Ö»ÓоßÓÐÓÐÓõÄIPµØµãµÄÖ÷»ú²Å»ª½ÓÈ뻥ÁªÍøÖÐÓëÆäËûÖ÷»ú¾ÙÐÐͨѶ¡£ IPÊý¾Ý±¨ IPÊý¾Ý°üÒ»Ñùƽ³£ÓÉIPÊײ¿ºÍÊý¾Ý×é³É£¬Êײ¿Ò»Ñùƽ³£ÓÐ20-60×Ö½Ú£¬ÆäÖÐÓÐ40×Ö½ÚÊÇ¿ÉÑ¡µÄ£¬Ò»Ñùƽ³£Êײ¿½öÓÉ20×Ö½Ú×é³É£¬IPÊý¾Ý±¨½á¹¹ÈçÏÂͼËùʾ¡£ ΪÁËÀû±ã¶ÔIPÊײ¿¾ÙÐжÁÈ¡»òдÈë²Ù×÷£¬ÔÚlwipÔ´ÂëÖ®Öнç˵ÁËip_hdr½á¹¹ÌåÀ´ÌåÏÖipÊý¾Ý±¨Êײ¿¡£ IP²ãÊý¾ÝÎüÊÕ ÔÚÉÏÎÄÌáµ½£¬¹ØÓÚ²î±ðµÄÊý¾Ý°ü¾ÙÐвî±ðµÄ´¦Öóͷ££¬ÈôÊÇÊÇARP°ü£¬ÔòŲÓÃetharp_inputº¯ÊýÐÐÖ¹Öã»ÈôÊÇÊÇIP°ü£¬Ôò½»¸øIPÏà¹Øº¯ÊýÐÐÖ¹ÖᣠÔÚudpecho demoÖÐʹÓõÄÊÇIPV4ЭÒ飬Òò´Ë£¬»áŲÓÃip4_inputº¯Êý¡£ ÔÚip4_inputº¯ÊýÖлá¶ÔipÊý¾Ý±¨µÄÏà¹Ø×ֶξÙÐÐÄ¥Á·£¬ÀýÈ糤¶È£¬Ð£ÑéºÍ£¬°æ±¾ºÅµÈµÈ£¬Ò²»áÅжϸÃÊý¾Ý°üÊÇ·ñÊÇ·¢Ë͸øÍâµØµÄ£¬ÈôÊDz»ÊÇ·¢Ë͸øÍâµØµÄÊý¾Ý°ü£¬¿ÉÄÜ»¹Òª¶ÔÆä¾ÙÐÐת·¢»òÕßÑïÆú£¬ÈôÊÇÊý¾Ý±¨Ã»ÓÐÎÊÌ⣬IP²ã¾Í»áƾ֤´«Êä²ãµÄЭÒéÀàÐͽ«Êý¾Ý°ü´«Ë͵½²î±ðµÄÈë¿Úº¯ÊýÖ®ÖУ¬ÀýÈçudp_input, tcp_inputº¯ÊýµÈ¡£ IP²ãÊý¾Ý·¢ËÍ ÔÚ´«Êä²ãЭÒéÐèҪͨ¹ýIP²ãÀ´·¢ËÍÊý¾Ýʱ£¬ÔÚÉϲ㺯ÊýÖ®ÖлáŲÓÃip4_output_if_srcº¯Êý£¬Ôڸú¯ÊýÖУ¬ÓÖ»áȥŲÓÃip4_output_if_opt_srcº¯Êý£¬Ëü»á½«´«ÊäÊý¾Ý·â×°µ½ipÊý¾Ý±¨Ö®ÖУ¬ÌîдÊý¾Ý±¨Ö®ÖеÄÄ¿µÄIPµØµã£¬Ô´IPµØµã£¬Ð­ÒéÀàÐ͵ÈÏà¹ØÐÅÏ¢¡£È»ºóÔÙȥŲÓÃetharp_output()£¬Ëü»áÆÊÎöMACµØµã£¬×é×°ÒÔÌ«ÍøÖ¡²¢²¢·¢ËÍ¡£ÔÚetharp_output()º¯ÊýÖ®ÖУ¬×îÖÕ»áȥŲÓÃÍøÂç½Ó¿Ú²ãµÄÏà¹Ø·¢Ëͺ¯Êý¡£ LWIP´«Êä²ãÓëÓ¦Óòã ÍøÂç²ãÒѾ­Í¨¹ýIPЭÒéµÈÍê³ÉÁËÊý¾Ý±¨ÔÚ¸÷̨Ö÷»úÖ®¼ä´«ÊäµÄµÄ¹¦Ð§£¬¿ÉÊÇÊý¾Ý»¹Ã»Óеִï×îÖÕÄ¿µÄµØ¡ªÖ÷»úÉϵÄij¸öÌض¨Ó¦ÓóÌÐò¡£ IP²ãͨ¹ý´«Êä²ãµÄЭÒ齫Êý¾Ý°üµÝ½»¸øÓ¦ÓóÌÐò£¬³£ÓõĴ«Êä²ãЭÒéÓÐUDPЭÒ飬TCPЭÒéµÈ¡£ ´Ë´¦ÒÔUDPЭÒéΪÀý£¬ËüÊÇÒ»ÖÖ½ÏΪ¼òÆӵĴ«Êä²ãЭÒ飬¾­³£Ó¦ÓÃÓÚ¾ÖÓòÍøÇéÐÎÒÔ¼°ÊÓƵ²¥·ÅÁìÓò£¬ÒÔUDPΪÀýÍŽáSDK´úÂë½â˵һÏ´«Êä²ãÊÇÔõÑùʵÏÖÊý¾Ý½»»¥µÄ¡£ ? UDP±¨ÎÄ ÔÚʹÓÃUDP´«ÊäÊý¾Ýʱ£¬Ëü»á½«Êý¾Ý·â×°ÔÚUDP±¨ÎÄÖ®ÖУ¬ÔÚIP²ãÓֻὫÊý¾Ý°ü·â×°ÔÚIP±¨ÎÄÖ®ÖУ¬ÔÚÎïÀí²ãÓֻὫIPÊý¾Ý°ü·â×°ÔÚÎïÀíÊý¾ÝÖ¡Ö®ÖС£ Ò»·ÝÓû§Êý¾ÝÔÚ±»·¢ËÍʱ¹²ÂÄÀúÁËÈý´Î·â×°¡£ UDPÏà¹ØÊý¾Ý½á¹¹ ÔÚLWIPÔ´ÂëµÄudp.hÖ®ÖУ¬½ç˵Á˱¨ÎÄÊײ¿Êý¾Ý½á¹¹ÒÔ¼°UDP¿ØÖÆ¿é¡£ LwIP±¨ÎÄÊײ¿Êý¾Ý½á¹¹Îªudp_hdr, ½ç˵ÁË UDP ±¨ÎÄÊײ¿µÄ¸÷¸ö×Ö¶Î, »®·ÖΪ16λԴ¶Ë¿ÚºÅsrc, 16λĿµÄ¶Ë¿ÚºÅdest, 16λÓû§Êý¾Ý±¨×ܳ¤¶È, ÒÔ¼°16λµÄУÑéºÍ¡£ LwIP»¹½ç˵ÁËUDP¿ØÖƿ飬¼Í¼ÓëUDPͨѶµÄËùÓÐÏà¹ØÐÅÏ¢£¬ÈçÔ´¶Ë¿ÚºÅ¡¢Ä¿µÄ¶Ë¿ÚºÅ¡¢Ô´IPµØµã¡¢Ä¿µÄIPµØµãÒÔ¼°ÊÕµ½Êý¾ÝʱµÄ»Øµ÷º¯ÊýµÈµÈ£¬ÏµÍ³»áΪÿһ¸ö»ùÓÚUDPЭÒéµÄÀú³Ì½¨ÉèÒ»¸öUDP¿ØÖƿ飬²¢ÇÒ½«ÆäÓë¶ÔÓ¦µÄ¶Ë¿Ú°ó¶¨£¬²¢½«ËùÓеÄUDP¿ØÖÆ¿éÓÃÒ»¸öÁ´±íÅþÁ¬ÆðÀ´¡£µ±UDPÎüÊÕµ½Ò»¸ö±¨ÎĵÄʱ¼ä£¬»áÈ¥±éÀúÁ´±íÉϵÄËùÓпØÖƿ飬ͨ¹ý¶Ë¿ÚºÅÀ´ÕÒµ½Æ¥ÅäµÄ¿ØÖƿ飬²¢½«Êý¾Ýͨ¹ý»Øµ÷º¯Êýת´ïµ½ÉϲãÓ¦ÓᣠUDP±¨ÎÄÎüÊÕ ÔÚIP²ã£¬µ±ÎüÊÕµ½Ò»¸ö°üÀ¨UDP±¨ÎĵÄÊý¾Ý±¨Ê±£¬udp_inputº¯Êý¾Í»á±»Å²Ó㬸ú¯ÊýÖ®ÖоÙÐÐÁËһЩ±¨ÎÄÕýµ±ÐԵļì²â£¬È»ºóƾ֤±¨ÎÄÖеĶ˿ÚÐÅÏ¢²éÕÒUDP¿ØÖƿ飬×îºóͨ¹ýUDP¿ØÖÆ¿éÖ®ÖеĻص÷º¯Êýrecv_udp½«Êý¾Ýת´ïµ½Ó¦Óò㣬ÈôÊÇÕÒ²»µ½¶ÔÓ¦µÄ¶Ë¿Ú£¬ÄÇô»á·µ»ØÒ»¸ö¶Ë¿Ú²»¿É´ïÊý¾Ý°ü¡£ UDP±¨ÎÄ·¢ËÍ UDP±¨ÎÄ·¢ËÍÒÀÀµIP²ãÌṩµÄ·þÎñ£¬Óû§ÔÚ·¢ËÍÊý¾ÝʱÐèÒªÔÚÓ¦ÓóÌÐòÖ®ÖÐŲÓÃudp_send»òÕßÊÇudp_sendto,Ó¦ÓóÌÐòÖ®Öн«Óû§Êý¾ÝÌîµ½pbufÊý¾ÝÇøÓò,²¢½«pubf×÷Ϊ²ÎÊý´«Èëudp_send»òudp_sendtoÖ®ÖС£ udp_sendºÍudp_sendtoÖ®¼äµÄÇø±ð¾ÍÊÇudp_sendto½«Êý¾Ý·¢Ë͵½Ö¸¶¨µÄipµØµãºÍ¶Ë¿ÚºÅ£¬udp_send½«Êý¾Ý·¢Ë͵½UDP¿ØÖÆ¿éÖ®Öнç˵µÄipµØµãºÍ¶Ë¿ÚºÅ¡£udp_sendÏÖʵÉÏÒ²ÊÇŲÓÃudp_sendtoÀ´¾ÙÐÐÊý¾ÝµÄ·¢ËÍ£¬×îÖÕÕâÁ½¸öº¯Êý¶¼ÊÇ»áȥŲÓÃudp_sendto_if¡£ dp_sendto_ifº¯ÊýÖ®ÖлáÍê³Éudp±¨ÎĵÄ×é×°ºÍ·¢ËÍ£¬×îÖÕ»áŲÓÃIp²ãµÄ·¢Ëͺ¯ÊýÈ¥·¢Ëͱ¨ÎÄ¡£ ? LWIPÓ¦Óòã ÔÚÓ¦ÓòãÒ»Ñùƽ³£»áͨ¹ýŲÓô«Êä²ãµÄһЩº¯ÊýÀ´±àдÌض¨µÄÓ¦ÓóÌÐò£¬´Ó¶øʵÏÖÊý¾ÝµÄת´ï£¬ÔÚudpecho demoÖ®ÖУ¬µ±ÎüÊÕµ½Êý¾ÝÖ®ºó£¬ÔÚudp¿ØÖÆ¿éÖа󶨵ÄÎüÊջص÷º¯ÊýÖÐÓÖ»áȥŲÓÃudp_sendtoº¯Êý¡£ ³ýÁËÉÏÃæÏÈÈݵÄһЩЭÒéÍ⣬LWIP»¹Ö§³ÖICMP¡¢IGMP¡¢PPP¡¢DHCPµÈЭÒ飬²¢ÇÒSOCKET APIÒÔ¼°NETCONN APIʹÓÃÆðÀ´Ô½·¢¼òÆÓ£¬¿ÉÊÇRAW/Callback APIµÄʹÓÃÓÐÖúÓÚ¸üºÃµÄÃ÷È·LWIPЭÒé¡£ ¶ÔLWIPЭÒéÕ»¸ÐÐËȤµÄ¶ÁÕß¿É×ÔÐÐÉîÈëÏàʶ¡£ ? ¹Ø×¢long8ÍøÕ¾¼°Î¢ÐŹ«Öںţ¬Ïàʶ MCU¸ü¶àÐÅÏ¢.

ÔÚi.MX RTÖÐʹÓÃLwIPЭÒéջdzÎö

¡¾ÌáÒªÐÎò¡¿


LWIPЭÒéÓëÍøÂç·Ö²ã




LwIP(Light weight IP)£¬ÊÇÒ»ÖÖÇáÁ¿»¯ÇÒ¿ªÔ´µÄTCP/IPЭÒéÕ»£¬Ëü¿ÉÒÔÔÚÓÐÏÞµÄRAMºÍROMÌõ¼þÏ£¬ÊµÏÖÒ»¸öÍêÕûµÄTCP/IP ЭÒéÕ»¡£±ðµÄ£¬LwIP¼È¿ÉÒÔÒÆÖ²µ½²Ù×÷ϵͳÉÏÔËÐУ¬Ò²¿ÉÒÔÔÚÎÞ²Ù×÷ϵͳµÄÇéÐÎÏÂ×ÔÁ¦ÔËÐС£?

? TCP/IPЭÒéÕ»µÄÄ£×ӽṹÈçÏÂͼËùʾ£¬ÓÉÓÚTCP/IPЭÒéÕ»µÄ·ºÆðʱ¼ä½ÏÔ磬ÒÔÊÇûÓÐƾ֤¹Å°åµÄ7²ãOSIÍøÂçÄ£×Ó¾ÙÐÐÉè¼Æ£¬Ò»¹²Ö»·ÖΪÁË4²ã£¬»®·ÖΪÍøÂç½Ó¿Ú²ã£¬ÍøÂç²ã£¬´«Êä²ãÒÔ¼°Ó¦Óò㣬LwIPЭÒéÕ»µÄÍøÂçÄ£×ÓÓëÖ®ÀàËÆ¡£



ÍøÂç½Ó¿Ú²ãÖ÷Ҫͨ¹ýË«½ÊÏߣ¬¹âÏË£¬ÎÞÏߵȷ½·¨¾ÙÐÐÍøÂçÉÏÊý¾ÝÖ¡µÄ·¢ËͺÍÎüÊÕ¡£ÍøÂç½Ó¿Ú²ã½«ÍøÂç²ãµÄÊý¾Ý×é×°³É×Ô¼ºÌض¨µÄÖ¡¾ÙÐз¢ËÍ£¬Í¬Ê±Ò²»áÎüÊÕÊý¾ÝÖ¡¾ÙÐÐÆÊÎö£¬²¢½«ÆÊÎöʺóµÄÊý¾Ý·¢Ë͸øÍøÂç²ã¡£?

? ?ÍøÂç²ãÈÏÕæÔÚÖ÷»úÖ®¼äµÄͨѶÀú³ÌÖ®ÖÐÑ¡ÔñÊý¾Ý°üµÄ´«Êä·¾¶£¬²¢ÇÒÔÚÎüÊÕµ½´«ÈëµÄÊý¾Ý±¨Ê±»áÄ¥Á·ÆäÓÐÓÃÐÔ£¬²¢µÝ½»¸øÉϲã¡£?

? ?´«Êä²ãÖ÷ÒªÌṩӦÓóÌÐòÖ®¼äµÄͨѶ·þÎñ£¬Ëü»áϵͳµÄÖÎÀíÁ½Í·Êý¾ÝÖ®¼äµÄ½»»¥¡£

? ?Ó¦Óòã¼òÆÓÀ´Ëµ¾ÍÊÇʹÓô«Êä²ãÌṩµÄ¹¦Ð§·¢ËÍ×Ô¼ºµÄÊý¾Ýµ½¶Ô·½¡£

?




LWIPЭÒéÕ»³õʼ»¯




ÔÚ×îÏÈ´«ÊäÊý¾Ý֮ǰ£¬Ê×ÏÈÒª¾ÙÐÐһϵÁеijõʼ»¯²Ù×÷£¬±¾ÎÄÒÔi.MX RT1060 SDKÖеÄDemo "evkmimxrt1060_lwip_udppecho_bm"ΪÀý£¬¸Ã´úÂë¿ÉÒÔͨ¹ýMCUXpresso IDE¾ÙÐе¼Èë¡£

netif_addº¯ÊýÓÃÀ´¹ÒÔØÍøÂç½Ó¿Ú£¬²¢Íê³ÉÍøÂçͨѶ֮ǰµÄ´ó²¿·Ö³õʼ»¯ÊÂÇ飬°üÀ¨PHYоƬµÄ³õʼ»¯£¬i.MX RT1060ÉÏENETÍâÉè³õʼ»¯£¬ÒÔ¼°Ò»Ð©Í¨Ñ¶Àú³ÌÖÐÓõ½µÄÏà¹ØÊý¾Ý½á¹¹µÄ³õʼ»¯¡£

PHYоƬµÄ³õʼ»¯ÊÇÔÚethernetif_phy_initÖ®ÖÐÍê³É£¬°üÀ¨MDIO³õʼ»¯£¬Íø¿Ú×Ô¶¯Ð­ÉÌ£¬Íø¿ÚÅþÁ¬µÈ²Ù×÷¡£



PHY³õʼ»¯º¯ÊýÒÔ¼°ENET³õʼ»¯º¯Êý¶¼ÔÚethernetif0_initº¯ÊýÖб»Å²Ó㬲¢ÇҸú¯Êý±»×÷Ϊһ¸öʵ²Î´«Èënetif_addÖ®Öв¢±»ÔÚÆäÖб»Å²Óã¬Òò´Ënetif_add²»µ«Íê³ÉÁËÍøÂç½Ó¿ÚµÄ¹ÒÔØ£¬»¹Íê³ÉÁ˽ӿÚÏà¹ØµÄһϵÁгõʼ»¯ÊÂÇé¡£

±ðµÄ£¬ÔÚ¾ÙÐÐÍøÂç½Ó¿ÚÏà¹Ø³õʼ»¯µÄͬʱ£¬Ò²Íê³ÉÁ˶ÔһϵÁÐÊý¾Ý½á¹¹µÄ³õʼ»¯£¬´Ë´¦ÏÈÈÝһЩÔÚÍøÂçͨѶÀú³ÌÖÐÓõ½µÄ½á¹¹Ìå¡£



enet_rx_bd_struct_t, ¸Ã½á¹¹ÌåÒ»Ñùƽ³£ÓÃÀ´½ç˵buffer descriptor£¬ÍøÂç½Ó¿Ú²ãÎüÊÕµ½µÄÊý¾ÝÒ»Ñùƽ³£¾Í·â×°ÔÚbuffer descriptorÖ®ÖС£
½á¹¹Ìå½ç˵ÈçÏÂͼËùʾ£¬ÆäÖÐlength´ú±íbuffer descriptorÖ®ÖÐÊý¾ÝµÄ³¤¶È£¬controlÖ®Öлá´æ´¢Ò»Ð©Óëbuffer descriptorÏà¹ØµÄ״̬ÐÅÏ¢£¬²¢ÇÒÖ§³Öenhanced buffer descriptor¡£



enet_rx_bd_ring_t½á¹¹Ì壬ÈçÏÂͼËùʾ£¬Ã¿Ò»Ìõring¶¼ÊÇÓÉbuffer descriptor×é³ÉµÄ¡£

Ring½á¹¹ÌåÖеÄrxBdBase³ÉÔ±¾ÍÊǵÚÒ»¸öbuffer descriptorµÄµØµã£¬rxGenIdxÖ¸µÄÊÇÄ¿½ñbuffer descriptorµÄÐòºÅ£¬rxRingLenÖ¸µÄÊÇÕâÌõRingÖй²Óм¸¸öbuffer descriptor¡£





pbuf½á¹¹Ì壬pbuf½á¹¹ÌåÊÇÓÃÀ´ÐÎòlwipЭÒéÕ»ÖÐÊý¾Ý°üµÄ½á¹¹Ìå¡£ËüÊÇÒÔÁ´±íµÄÐÎʽ±£´æµÄ£¬pbufÖ®Öлᱣ´æÖ¸ÕëÖ¸ÏòÏÂÒ»¸öpubf ¡£



ÓÉÓÚÔÚcaseÖ®ÖУ¬Ê¹ÓõÄÊÇUDPͨѶ£¬Òò´Ë»¹ÐèÒª¾ÙÐÐһЩUDPÏà¹ØµÄ³õʼ»¯ÉèÖá£ÀýÈçŲÓÃudp_bindº¯Êý£¬¶ÔUDP¿ØÖÆ¿éÖеÄlocal_port,local_ipµÈ²ÎÊý¾ÙÐа󶨣¬ÒÔ¼°Å²ÓÃudp_recvÔÚudp¿ØÖÆ¿éÉϾÙÐÐһЩ»Øµ÷º¯ÊýµÄ°ó¶¨µÈµÈ£¬ÖÁÓÚʲôÊÇUDP¿ØÖƿ飬ÔÚºóÃæ»á¾ÙÐÐÏÈÈÝ¡£




LWIPÍøÂç½Ó¿Ú²ã




ÍøÂç½Ó¿Ú²ãÊý¾ÝÎüÊÕ

ÔÚudpecho demoÖ®ÖÐÊÇͨ¹ýÂÖѯµÄÒªÁìÀ´ÊµÏÖÊý¾ÝÎüÊÕ£¬Ê¹ÓõÄÊÇraw/callback api, ³ýÁËÕâÖÖapiÖ®Íâlwip»¹Ìṩsocket apiµÈ£¬²»¹ýÐèÒª²Ù×÷ϵͳµÄÖ§³Ö¡£

ÔÚwhileÑ­»·ÖÐÊ×ÏÈ»áȥŲÓÃethernetif_inputº¯Êý£¬¸Ãº¯ÊýÖлáŲÓÃethernetif_linkinputº¯Êý£¬ÔÚethernetif_linkinputÖ®ÖÐÓÖ»áȥŲÓÃENET_GetRxFrameºÍethernetif_rx_frame_to_pbufsº¯Êý¡£

? ?ÔÚENET_GetRxFrameº¯ÊýÖлá°ÑÍøÂç½Ó¿ÚÖÐÎüÊÕµ½µÄÊý¾Ý°áÔ˵½RxFrameÖ®ÖУ¬È»ºóethernetif_rx_frame_to_pbufsº¯ÊýÓÖ»á°ÑRxFrameÖ®ÖеÄÊý¾Ý°áÔ˵½pbufsÖ®ÖУ¬½ÓÏÂÀ´¾Í»áŲÓÃethernet_inputº¯Êý£¬ÔÚlwipÔ´ÂëÖ®ÖеÄethernet.cÎļþÖб»½ç˵£¬Ö÷ÒªÓÃÓÚÎÞ²Ù×÷ϵͳʱ¼äÍøÂç²ãÐÐÖ¹ÖÃÎüÊÕµ½µÄÊý¾ÝÖ¡£¬È»ºóÍùÉϲãµÝ½»£¬¹ØÓÚ²î±ðµÄÊý¾Ý°ü¾ÙÐвî±ðµÄ´¦Öóͷ££¬ÈôÊÇÊÇ ARP°ü£¬ÔòŲÓÃetharp_inputº¯Êý£»ÈôÊÇÊÇ IP °ü£¬ÔòŲÓà ip4_inputº¯Êý£¬Í¨¹ýÕâЩº¯Êý½«Êý¾Ý°üµÝ½»¸ø IP ²ã´¦Öóͷ£¡£



ÍøÂç½Ó¿Ú²ãÊý¾Ý·¢ËÍ

ÔÚÍøÂç²ã·¢ËÍÊý¾Ýʱ£¬»áŲÓÃÍøÂç½Ó¿Ú²ãµÄethernet_outputº¯Êý£¬ethernet_outputº¯ÊýÖ®ÖÐÓÖ»áȥŲÓÃethernetif_linkoutputº¯Êý,µ±Êý¾Ý½Ï´óÐèÒªÓöà¸öpbuf¾ÙÐд洢µÄʱ¼ä£¬pbufÒÔÁ´±íµÄÐÎʽ±£´æ£¬ÒÔÊÇÐèÒª½«ÕâЩÁ´±íÖеÄÊý¾Ý¾ÙÐкϲ¢£¬ÈçÏÂͼËùʾ¡£

²Ù×÷Íê³Éºóͨ¹ýENET_SendFrameº¯ÊýÀ´Íê³ÉÊý¾ÝµÄ·¢ËÍ£»×îºóÊý¾Ý»áͨ¹ýÍøÂç½Ó¿Ú´«Êä³öÈ¥¡£

?




LWIPÍøÂç²ã




IPЭÒé

IPЭÒéÊÇÒ»ÖÖ¾­µäµÄÍøÂç²ãЭÒ飬IPЭÒé(Internet Protocol)£¬ÓÖ³Æ֮ΪÍø¼ÊЭÒ飬IP ЭÒé´¦ÓÚIP²ãÊÂÇ飬ËüÊÇÕû¸öTCP/IPЭÒéÕ»µÄ½¹µãЭÒ飬ÉϲãЭÒ鶼ҪÒÀÀµIPЭÒéÌṩµÄ·þÎñ£¬IPЭÒéÈÏÕ潫Êý¾Ý±¨´ÓÔ´Ö÷»ú·¢Ë͵½Ä¿µÄÖ÷»ú£¬²¢Í¨¹ýIPµØµã×÷ΪΨһʶ±ðÂë¡£¼òÆÓÀ´Ëµ£¬²î±ðÖ÷»úÖ®¼äµÄIPµØµãÊÇ·×ÆçÑùµÄ£¬ÔÚ·¢ËÍÊý¾Ý±¨µÄÀú³ÌÖУ¬IPЭÒ黹¿ÉÄܶÔÊý¾Ý±¨¾ÙÐзÖƬ´¦Öóͷ££¬Í¬Ê±ÔÚÎüÊÕÊý¾Ý±¨µÄʱ¼ä£¬»¹¿ÉÄÜÐèÒª¶Ô·ÖƬµÄÊý¾Ý±¨¾ÙÐÐÖØ×°µÈµÈ¡£

IPЭÒéÊÇÒ»ÖÖÎÞÅþÁ¬µÄ²»¿É¿¿Êý¾Ý±¨½»¸¶Ð­Ò飬ЭÒé×Ô¼º²»ÌṩÈκεĹýʧ¼ì²éÓë»Ö¸´»úÖÆ£¬ÐèÒª´«Êä²ãЭÒéÀ´Íê³ÉÕâЩ¹¦Ð§¡£

IPµØµã

ÔÚTCP/IPÉè¼ÆÀú³ÌÖУ¬Éè¼ÆְԱΪÿһ̨Ö÷»ú·ÖÅÉÒ»¸ö32bitµÄIPµØµã£¬Ö»ÓоßÓÐÓÐÓõÄIPµØµãµÄÖ÷»ú²Å»ª½ÓÈ뻥ÁªÍøÖÐÓëÆäËûÖ÷»ú¾ÙÐÐͨѶ¡£

IPÊý¾Ý±¨

IPÊý¾Ý°üÒ»Ñùƽ³£ÓÉIPÊײ¿ºÍÊý¾Ý×é³É£¬Êײ¿Ò»Ñùƽ³£ÓÐ20-60×Ö½Ú£¬ÆäÖÐÓÐ40×Ö½ÚÊÇ¿ÉÑ¡µÄ£¬Ò»Ñùƽ³£Êײ¿½öÓÉ20×Ö½Ú×é³É£¬IPÊý¾Ý±¨½á¹¹ÈçÏÂͼËùʾ¡£

ΪÁËÀû±ã¶ÔIPÊײ¿¾ÙÐжÁÈ¡»òдÈë²Ù×÷£¬ÔÚlwipÔ´ÂëÖ®Öнç˵ÁËip_hdr½á¹¹ÌåÀ´ÌåÏÖipÊý¾Ý±¨Êײ¿¡£

IP²ãÊý¾ÝÎüÊÕ

ÔÚÉÏÎÄÌáµ½£¬¹ØÓÚ²î±ðµÄÊý¾Ý°ü¾ÙÐвî±ðµÄ´¦Öóͷ££¬ÈôÊÇÊÇARP°ü£¬ÔòŲÓÃetharp_inputº¯ÊýÐÐÖ¹Öã»ÈôÊÇÊÇIP°ü£¬Ôò½»¸øIPÏà¹Øº¯ÊýÐÐÖ¹Öá£

ÔÚudpecho demoÖÐʹÓõÄÊÇIPV4ЭÒ飬Òò´Ë£¬»áŲÓÃip4_inputº¯Êý¡£

ÔÚip4_inputº¯ÊýÖлá¶ÔipÊý¾Ý±¨µÄÏà¹Ø×ֶξÙÐÐÄ¥Á·£¬ÀýÈ糤¶È£¬Ð£ÑéºÍ£¬°æ±¾ºÅµÈµÈ£¬Ò²»áÅжϸÃÊý¾Ý°üÊÇ·ñÊÇ·¢Ë͸øÍâµØµÄ£¬ÈôÊDz»ÊÇ·¢Ë͸øÍâµØµÄÊý¾Ý°ü£¬¿ÉÄÜ»¹Òª¶ÔÆä¾ÙÐÐת·¢»òÕßÑïÆú£¬ÈôÊÇÊý¾Ý±¨Ã»ÓÐÎÊÌ⣬IP²ã¾Í»áƾ֤´«Êä²ãµÄЭÒéÀàÐͽ«Êý¾Ý°ü´«Ë͵½²î±ðµÄÈë¿Úº¯ÊýÖ®ÖУ¬ÀýÈçudp_input, tcp_inputº¯ÊýµÈ¡£



IP²ãÊý¾Ý·¢ËÍ

ÔÚ´«Êä²ãЭÒéÐèҪͨ¹ýIP²ãÀ´·¢ËÍÊý¾Ýʱ£¬ÔÚÉϲ㺯ÊýÖ®ÖлáŲÓÃip4_output_if_srcº¯Êý£¬Ôڸú¯ÊýÖУ¬ÓÖ»áȥŲÓÃip4_output_if_opt_srcº¯Êý£¬Ëü»á½«´«ÊäÊý¾Ý·â×°µ½ipÊý¾Ý±¨Ö®ÖУ¬ÌîдÊý¾Ý±¨Ö®ÖеÄÄ¿µÄIPµØµã£¬Ô´IPµØµã£¬Ð­ÒéÀàÐ͵ÈÏà¹ØÐÅÏ¢¡£È»ºóÔÙȥŲÓÃetharp_output()£¬Ëü»áÆÊÎöMACµØµã£¬×é×°ÒÔÌ«ÍøÖ¡²¢²¢·¢ËÍ¡£ÔÚetharp_output()º¯ÊýÖ®ÖУ¬×îÖÕ»áȥŲÓÃÍøÂç½Ó¿Ú²ãµÄÏà¹Ø·¢Ëͺ¯Êý¡£






LWIP´«Êä²ãÓëÓ¦Óòã




ÍøÂç²ãÒѾ­Í¨¹ýIPЭÒéµÈÍê³ÉÁËÊý¾Ý±¨ÔÚ¸÷̨Ö÷»úÖ®¼ä´«ÊäµÄµÄ¹¦Ð§£¬¿ÉÊÇÊý¾Ý»¹Ã»Óеִï×îÖÕÄ¿µÄµØ¡ªÖ÷»úÉϵÄij¸öÌض¨Ó¦ÓóÌÐò¡£

IP²ãͨ¹ý´«Êä²ãµÄЭÒ齫Êý¾Ý°üµÝ½»¸øÓ¦ÓóÌÐò£¬³£ÓõĴ«Êä²ãЭÒéÓÐUDPЭÒ飬TCPЭÒéµÈ¡£

´Ë´¦ÒÔUDPЭÒéΪÀý£¬ËüÊÇÒ»ÖÖ½ÏΪ¼òÆӵĴ«Êä²ãЭÒ飬¾­³£Ó¦ÓÃÓÚ¾ÖÓòÍøÇéÐÎÒÔ¼°ÊÓƵ²¥·ÅÁìÓò£¬ÒÔUDPΪÀýÍŽáSDK´úÂë½â˵һÏ´«Êä²ãÊÇÔõÑùʵÏÖÊý¾Ý½»»¥µÄ¡£

?




UDP±¨ÎÄ




ÔÚʹÓÃUDP´«ÊäÊý¾Ýʱ£¬Ëü»á½«Êý¾Ý·â×°ÔÚUDP±¨ÎÄÖ®ÖУ¬ÔÚIP²ãÓֻὫÊý¾Ý°ü·â×°ÔÚIP±¨ÎÄÖ®ÖУ¬ÔÚÎïÀí²ãÓֻὫIPÊý¾Ý°ü·â×°ÔÚÎïÀíÊý¾ÝÖ¡Ö®ÖС£

Ò»·ÝÓû§Êý¾ÝÔÚ±»·¢ËÍʱ¹²ÂÄÀúÁËÈý´Î·â×°¡£

UDPÏà¹ØÊý¾Ý½á¹¹

ÔÚLWIPÔ´ÂëµÄudp.hÖ®ÖУ¬½ç˵Á˱¨ÎÄÊײ¿Êý¾Ý½á¹¹ÒÔ¼°UDP¿ØÖÆ¿é¡£

LwIP±¨ÎÄÊײ¿Êý¾Ý½á¹¹Îªudp_hdr, ½ç˵ÁË UDP ±¨ÎÄÊײ¿µÄ¸÷¸ö×Ö¶Î, »®·ÖΪ16λԴ¶Ë¿ÚºÅsrc, 16λĿµÄ¶Ë¿ÚºÅdest, 16λÓû§Êý¾Ý±¨×ܳ¤¶È, ÒÔ¼°16λµÄУÑéºÍ¡£

LwIP»¹½ç˵ÁËUDP¿ØÖƿ飬¼Í¼ÓëUDPͨѶµÄËùÓÐÏà¹ØÐÅÏ¢£¬ÈçÔ´¶Ë¿ÚºÅ¡¢Ä¿µÄ¶Ë¿ÚºÅ¡¢Ô´IPµØµã¡¢Ä¿µÄIPµØµãÒÔ¼°ÊÕµ½Êý¾ÝʱµÄ»Øµ÷º¯ÊýµÈµÈ£¬ÏµÍ³»áΪÿһ¸ö»ùÓÚUDPЭÒéµÄÀú³Ì½¨ÉèÒ»¸öUDP¿ØÖƿ飬²¢ÇÒ½«ÆäÓë¶ÔÓ¦µÄ¶Ë¿Ú°ó¶¨£¬²¢½«ËùÓеÄUDP¿ØÖÆ¿éÓÃÒ»¸öÁ´±íÅþÁ¬ÆðÀ´¡£µ±UDPÎüÊÕµ½Ò»¸ö±¨ÎĵÄʱ¼ä£¬»áÈ¥±éÀúÁ´±íÉϵÄËùÓпØÖƿ飬ͨ¹ý¶Ë¿ÚºÅÀ´ÕÒµ½Æ¥ÅäµÄ¿ØÖƿ飬²¢½«Êý¾Ýͨ¹ý»Øµ÷º¯Êýת´ïµ½ÉϲãÓ¦Óá£



UDP±¨ÎÄÎüÊÕ

ÔÚIP²ã£¬µ±ÎüÊÕµ½Ò»¸ö°üÀ¨UDP±¨ÎĵÄÊý¾Ý±¨Ê±£¬udp_inputº¯Êý¾Í»á±»Å²Ó㬸ú¯ÊýÖ®ÖоÙÐÐÁËһЩ±¨ÎÄÕýµ±ÐԵļì²â£¬È»ºóƾ֤±¨ÎÄÖеĶ˿ÚÐÅÏ¢²éÕÒUDP¿ØÖƿ飬×îºóͨ¹ýUDP¿ØÖÆ¿éÖ®ÖеĻص÷º¯Êýrecv_udp½«Êý¾Ýת´ïµ½Ó¦Óò㣬ÈôÊÇÕÒ²»µ½¶ÔÓ¦µÄ¶Ë¿Ú£¬ÄÇô»á·µ»ØÒ»¸ö¶Ë¿Ú²»¿É´ïÊý¾Ý°ü¡£



UDP±¨ÎÄ·¢ËÍ

UDP±¨ÎÄ·¢ËÍÒÀÀµIP²ãÌṩµÄ·þÎñ£¬Óû§ÔÚ·¢ËÍÊý¾ÝʱÐèÒªÔÚÓ¦ÓóÌÐòÖ®ÖÐŲÓÃudp_send»òÕßÊÇudp_sendto,Ó¦ÓóÌÐòÖ®Öн«Óû§Êý¾ÝÌîµ½pbufÊý¾ÝÇøÓò,²¢½«pubf×÷Ϊ²ÎÊý´«Èëudp_send»òudp_sendtoÖ®ÖС£

udp_sendºÍudp_sendtoÖ®¼äµÄÇø±ð¾ÍÊÇudp_sendto½«Êý¾Ý·¢Ë͵½Ö¸¶¨µÄipµØµãºÍ¶Ë¿ÚºÅ£¬udp_send½«Êý¾Ý·¢Ë͵½UDP¿ØÖÆ¿éÖ®Öнç˵µÄipµØµãºÍ¶Ë¿ÚºÅ¡£udp_sendÏÖʵÉÏÒ²ÊÇŲÓÃudp_sendtoÀ´¾ÙÐÐÊý¾ÝµÄ·¢ËÍ£¬×îÖÕÕâÁ½¸öº¯Êý¶¼ÊÇ»áȥŲÓÃudp_sendto_if¡£



dp_sendto_ifº¯ÊýÖ®ÖлáÍê³Éudp±¨ÎĵÄ×é×°ºÍ·¢ËÍ£¬×îÖÕ»áŲÓÃIp²ãµÄ·¢Ëͺ¯ÊýÈ¥·¢Ëͱ¨ÎÄ¡£

?




LWIPÓ¦Óòã




ÔÚÓ¦ÓòãÒ»Ñùƽ³£»áͨ¹ýŲÓô«Êä²ãµÄһЩº¯ÊýÀ´±àдÌض¨µÄÓ¦ÓóÌÐò£¬´Ó¶øʵÏÖÊý¾ÝµÄת´ï£¬ÔÚudpecho demoÖ®ÖУ¬µ±ÎüÊÕµ½Êý¾ÝÖ®ºó£¬ÔÚudp¿ØÖÆ¿éÖа󶨵ÄÎüÊջص÷º¯ÊýÖÐÓÖ»áȥŲÓÃudp_sendtoº¯Êý¡£



³ýÁËÉÏÃæÏÈÈݵÄһЩЭÒéÍ⣬LWIP»¹Ö§³ÖICMP¡¢IGMP¡¢PPP¡¢DHCPµÈЭÒ飬²¢ÇÒSOCKET APIÒÔ¼°NETCONN APIʹÓÃÆðÀ´Ô½·¢¼òÆÓ£¬¿ÉÊÇRAW/Callback APIµÄʹÓÃÓÐÖúÓÚ¸üºÃµÄÃ÷È·LWIPЭÒé¡£

¶ÔLWIPЭÒéÕ»¸ÐÐËȤµÄ¶ÁÕß¿É×ÔÐÐÉîÈëÏàʶ¡£

?

¹Ø×¢long8ÍøÕ¾¼°Î¢ÐŹ«Öںţ¬Ïàʶ MCU¸ü¶àÐÅÏ¢.

  • ·ÖÀࣺÐÐÒµ¶¯Ì¬
  • ×÷ÕߣºHenry Lu
  • ȪԴ£ºMCU¼ÓÓÍÕ¾
  • Ðû²¼Ê±¼ä£º2022-11-03 11:35
  • »á¼ûÁ¿£º
ÏêÇé

LWIPЭÒéÓëÍøÂç·Ö²ã

LwIP(Light weight IP)£¬ÊÇÒ»ÖÖÇáÁ¿»¯ÇÒ¿ªÔ´µÄTCP/IPЭÒéÕ»£¬Ëü¿ÉÒÔÔÚÓÐÏÞµÄRAMºÍROMÌõ¼þÏ£¬ÊµÏÖÒ»¸öÍêÕûµÄTCP/IP ЭÒéÕ»¡£±ðµÄ£¬LwIP¼È¿ÉÒÔÒÆÖ²µ½²Ù×÷ϵͳÉÏÔËÐУ¬Ò²¿ÉÒÔÔÚÎÞ²Ù×÷ϵͳµÄÇéÐÎÏÂ×ÔÁ¦ÔËÐС£ 

  TCP/IPЭÒéÕ»µÄÄ£×ӽṹÈçÏÂͼËùʾ£¬ÓÉÓÚTCP/IPЭÒéÕ»µÄ·ºÆðʱ¼ä½ÏÔ磬ÒÔÊÇûÓÐƾ֤¹Å°åµÄ7²ãOSIÍøÂçÄ£×Ó¾ÙÐÐÉè¼Æ£¬Ò»¹²Ö»·ÖΪÁË4²ã£¬»®·ÖΪÍøÂç½Ó¿Ú²ã£¬ÍøÂç²ã£¬´«Êä²ãÒÔ¼°Ó¦Óò㣬LwIPЭÒéÕ»µÄÍøÂçÄ£×ÓÓëÖ®ÀàËÆ¡£

ÍøÂç½Ó¿Ú²ãÖ÷Ҫͨ¹ýË«½ÊÏߣ¬¹âÏË£¬ÎÞÏߵȷ½·¨¾ÙÐÐÍøÂçÉÏÊý¾ÝÖ¡µÄ·¢ËͺÍÎüÊÕ¡£ÍøÂç½Ó¿Ú²ã½«ÍøÂç²ãµÄÊý¾Ý×é×°³É×Ô¼ºÌض¨µÄÖ¡¾ÙÐз¢ËÍ£¬Í¬Ê±Ò²»áÎüÊÕÊý¾ÝÖ¡¾ÙÐÐÆÊÎö£¬²¢½«ÆÊÎöʺóµÄÊý¾Ý·¢Ë͸øÍøÂç²ã¡£ 

   ÍøÂç²ãÈÏÕæÔÚÖ÷»úÖ®¼äµÄͨѶÀú³ÌÖ®ÖÐÑ¡ÔñÊý¾Ý°üµÄ´«Êä·¾¶£¬²¢ÇÒÔÚÎüÊÕµ½´«ÈëµÄÊý¾Ý±¨Ê±»áÄ¥Á·ÆäÓÐÓÃÐÔ£¬²¢µÝ½»¸øÉϲã¡£ 

   ´«Êä²ãÖ÷ÒªÌṩӦÓóÌÐòÖ®¼äµÄͨѶ·þÎñ£¬Ëü»áϵͳµÄÖÎÀíÁ½Í·Êý¾ÝÖ®¼äµÄ½»»¥¡£

   Ó¦Óòã¼òÆÓÀ´Ëµ¾ÍÊÇʹÓô«Êä²ãÌṩµÄ¹¦Ð§·¢ËÍ×Ô¼ºµÄÊý¾Ýµ½¶Ô·½¡£

 

LWIPЭÒéÕ»³õʼ»¯

ÔÚ×îÏÈ´«ÊäÊý¾Ý֮ǰ£¬Ê×ÏÈÒª¾ÙÐÐһϵÁеijõʼ»¯²Ù×÷£¬±¾ÎÄÒÔi.MX RT1060 SDKÖеÄDemo "evkmimxrt1060_lwip_udppecho_bm"ΪÀý£¬¸Ã´úÂë¿ÉÒÔͨ¹ýMCUXpresso IDE¾ÙÐе¼Èë¡£

netif_addº¯ÊýÓÃÀ´¹ÒÔØÍøÂç½Ó¿Ú£¬²¢Íê³ÉÍøÂçͨѶ֮ǰµÄ´ó²¿·Ö³õʼ»¯ÊÂÇ飬°üÀ¨PHYоƬµÄ³õʼ»¯£¬i.MX RT1060ÉÏENETÍâÉè³õʼ»¯£¬ÒÔ¼°Ò»Ð©Í¨Ñ¶Àú³ÌÖÐÓõ½µÄÏà¹ØÊý¾Ý½á¹¹µÄ³õʼ»¯¡£

PHYоƬµÄ³õʼ»¯ÊÇÔÚethernetif_phy_initÖ®ÖÐÍê³É£¬°üÀ¨MDIO³õʼ»¯£¬Íø¿Ú×Ô¶¯Ð­ÉÌ£¬Íø¿ÚÅþÁ¬µÈ²Ù×÷¡£

PHY³õʼ»¯º¯ÊýÒÔ¼°ENET³õʼ»¯º¯Êý¶¼ÔÚethernetif0_initº¯ÊýÖб»Å²Ó㬲¢ÇҸú¯Êý±»×÷Ϊһ¸öʵ²Î´«Èënetif_addÖ®Öв¢±»ÔÚÆäÖб»Å²Óã¬Òò´Ënetif_add²»µ«Íê³ÉÁËÍøÂç½Ó¿ÚµÄ¹ÒÔØ£¬»¹Íê³ÉÁ˽ӿÚÏà¹ØµÄһϵÁгõʼ»¯ÊÂÇé¡£

±ðµÄ£¬ÔÚ¾ÙÐÐÍøÂç½Ó¿ÚÏà¹Ø³õʼ»¯µÄͬʱ£¬Ò²Íê³ÉÁ˶ÔһϵÁÐÊý¾Ý½á¹¹µÄ³õʼ»¯£¬´Ë´¦ÏÈÈÝһЩÔÚÍøÂçͨѶÀú³ÌÖÐÓõ½µÄ½á¹¹Ìå¡£

  • enet_rx_bd_struct_t, ¸Ã½á¹¹ÌåÒ»Ñùƽ³£ÓÃÀ´½ç˵buffer descriptor£¬ÍøÂç½Ó¿Ú²ãÎüÊÕµ½µÄÊý¾ÝÒ»Ñùƽ³£¾Í·â×°ÔÚbuffer descriptorÖ®ÖС£
    ½á¹¹Ìå½ç˵ÈçÏÂͼËùʾ£¬ÆäÖÐlength´ú±íbuffer descriptorÖ®ÖÐÊý¾ÝµÄ³¤¶È£¬controlÖ®Öлá´æ´¢Ò»Ð©Óëbuffer descriptorÏà¹ØµÄ״̬ÐÅÏ¢£¬²¢ÇÒÖ§³Öenhanced buffer descriptor¡£

enet_rx_bd_ring_t½á¹¹Ì壬ÈçÏÂͼËùʾ£¬Ã¿Ò»Ìõring¶¼ÊÇÓÉbuffer descriptor×é³ÉµÄ¡£

Ring½á¹¹ÌåÖеÄrxBdBase³ÉÔ±¾ÍÊǵÚÒ»¸öbuffer descriptorµÄµØµã£¬rxGenIdxÖ¸µÄÊÇÄ¿½ñbuffer descriptorµÄÐòºÅ£¬rxRingLenÖ¸µÄÊÇÕâÌõRingÖй²Óм¸¸öbuffer descriptor¡£

  • pbuf½á¹¹Ì壬pbuf½á¹¹ÌåÊÇÓÃÀ´ÐÎòlwipЭÒéÕ»ÖÐÊý¾Ý°üµÄ½á¹¹Ìå¡£ËüÊÇÒÔÁ´±íµÄÐÎʽ±£´æµÄ£¬pbufÖ®Öлᱣ´æÖ¸ÕëÖ¸ÏòÏÂÒ»¸öpubf ¡£

ÓÉÓÚÔÚcaseÖ®ÖУ¬Ê¹ÓõÄÊÇUDPͨѶ£¬Òò´Ë»¹ÐèÒª¾ÙÐÐһЩUDPÏà¹ØµÄ³õʼ»¯ÉèÖá£ÀýÈçŲÓÃudp_bindº¯Êý£¬¶ÔUDP¿ØÖÆ¿éÖеÄlocal_port,local_ipµÈ²ÎÊý¾ÙÐа󶨣¬ÒÔ¼°Å²ÓÃudp_recvÔÚudp¿ØÖÆ¿éÉϾÙÐÐһЩ»Øµ÷º¯ÊýµÄ°ó¶¨µÈµÈ£¬ÖÁÓÚʲôÊÇUDP¿ØÖƿ飬ÔÚºóÃæ»á¾ÙÐÐÏÈÈÝ¡£

LWIPÍøÂç½Ó¿Ú²ã

ÍøÂç½Ó¿Ú²ãÊý¾ÝÎüÊÕ

ÔÚudpecho demoÖ®ÖÐÊÇͨ¹ýÂÖѯµÄÒªÁìÀ´ÊµÏÖÊý¾ÝÎüÊÕ£¬Ê¹ÓõÄÊÇraw/callback api, ³ýÁËÕâÖÖapiÖ®Íâlwip»¹Ìṩsocket apiµÈ£¬²»¹ýÐèÒª²Ù×÷ϵͳµÄÖ§³Ö¡£

ÔÚwhileÑ­»·ÖÐÊ×ÏÈ»áȥŲÓÃethernetif_inputº¯Êý£¬¸Ãº¯ÊýÖлáŲÓÃethernetif_linkinputº¯Êý£¬ÔÚethernetif_linkinputÖ®ÖÐÓÖ»áȥŲÓÃENET_GetRxFrameºÍethernetif_rx_frame_to_pbufsº¯Êý¡£

   ÔÚENET_GetRxFrameº¯ÊýÖлá°ÑÍøÂç½Ó¿ÚÖÐÎüÊÕµ½µÄÊý¾Ý°áÔ˵½RxFrameÖ®ÖУ¬È»ºóethernetif_rx_frame_to_pbufsº¯ÊýÓÖ»á°ÑRxFrameÖ®ÖеÄÊý¾Ý°áÔ˵½pbufsÖ®ÖУ¬½ÓÏÂÀ´¾Í»áŲÓÃethernet_inputº¯Êý£¬ÔÚlwipÔ´ÂëÖ®ÖеÄethernet.cÎļþÖб»½ç˵£¬Ö÷ÒªÓÃÓÚÎÞ²Ù×÷ϵͳʱ¼äÍøÂç²ãÐÐÖ¹ÖÃÎüÊÕµ½µÄÊý¾ÝÖ¡£¬È»ºóÍùÉϲãµÝ½»£¬¹ØÓÚ²î±ðµÄÊý¾Ý°ü¾ÙÐвî±ðµÄ´¦Öóͷ££¬ÈôÊÇÊÇ ARP°ü£¬ÔòŲÓÃetharp_inputº¯Êý£»ÈôÊÇÊÇ IP °ü£¬ÔòŲÓà ip4_inputº¯Êý£¬Í¨¹ýÕâЩº¯Êý½«Êý¾Ý°üµÝ½»¸ø IP ²ã´¦Öóͷ£¡£

ÍøÂç½Ó¿Ú²ãÊý¾Ý·¢ËÍ

ÔÚÍøÂç²ã·¢ËÍÊý¾Ýʱ£¬»áŲÓÃÍøÂç½Ó¿Ú²ãµÄethernet_outputº¯Êý£¬ethernet_outputº¯ÊýÖ®ÖÐÓÖ»áȥŲÓÃethernetif_linkoutputº¯Êý,µ±Êý¾Ý½Ï´óÐèÒªÓöà¸öpbuf¾ÙÐд洢µÄʱ¼ä£¬pbufÒÔÁ´±íµÄÐÎʽ±£´æ£¬ÒÔÊÇÐèÒª½«ÕâЩÁ´±íÖеÄÊý¾Ý¾ÙÐкϲ¢£¬ÈçÏÂͼËùʾ¡£

²Ù×÷Íê³Éºóͨ¹ýENET_SendFrameº¯ÊýÀ´Íê³ÉÊý¾ÝµÄ·¢ËÍ£»×îºóÊý¾Ý»áͨ¹ýÍøÂç½Ó¿Ú´«Êä³öÈ¥¡£

 

LWIPÍøÂç²ã

IPЭÒé

IPЭÒéÊÇÒ»ÖÖ¾­µäµÄÍøÂç²ãЭÒ飬IPЭÒé(Internet Protocol)£¬ÓÖ³Æ֮ΪÍø¼ÊЭÒ飬IP ЭÒé´¦ÓÚIP²ãÊÂÇ飬ËüÊÇÕû¸öTCP/IPЭÒéÕ»µÄ½¹µãЭÒ飬ÉϲãЭÒ鶼ҪÒÀÀµIPЭÒéÌṩµÄ·þÎñ£¬IPЭÒéÈÏÕ潫Êý¾Ý±¨´ÓÔ´Ö÷»ú·¢Ë͵½Ä¿µÄÖ÷»ú£¬²¢Í¨¹ýIPµØµã×÷ΪΨһʶ±ðÂë¡£¼òÆÓÀ´Ëµ£¬²î±ðÖ÷»úÖ®¼äµÄIPµØµãÊÇ·×ÆçÑùµÄ£¬ÔÚ·¢ËÍÊý¾Ý±¨µÄÀú³ÌÖУ¬IPЭÒ黹¿ÉÄܶÔÊý¾Ý±¨¾ÙÐзÖƬ´¦Öóͷ££¬Í¬Ê±ÔÚÎüÊÕÊý¾Ý±¨µÄʱ¼ä£¬»¹¿ÉÄÜÐèÒª¶Ô·ÖƬµÄÊý¾Ý±¨¾ÙÐÐÖØ×°µÈµÈ¡£

IPЭÒéÊÇÒ»ÖÖÎÞÅþÁ¬µÄ²»¿É¿¿Êý¾Ý±¨½»¸¶Ð­Ò飬ЭÒé×Ô¼º²»ÌṩÈκεĹýʧ¼ì²éÓë»Ö¸´»úÖÆ£¬ÐèÒª´«Êä²ãЭÒéÀ´Íê³ÉÕâЩ¹¦Ð§¡£

IPµØµã

ÔÚTCP/IPÉè¼ÆÀú³ÌÖУ¬Éè¼ÆְԱΪÿһ̨Ö÷»ú·ÖÅÉÒ»¸ö32bitµÄIPµØµã£¬Ö»ÓоßÓÐÓÐÓõÄIPµØµãµÄÖ÷»ú²Å»ª½ÓÈ뻥ÁªÍøÖÐÓëÆäËûÖ÷»ú¾ÙÐÐͨѶ¡£

IPÊý¾Ý±¨

IPÊý¾Ý°üÒ»Ñùƽ³£ÓÉIPÊײ¿ºÍÊý¾Ý×é³É£¬Êײ¿Ò»Ñùƽ³£ÓÐ20-60×Ö½Ú£¬ÆäÖÐÓÐ40×Ö½ÚÊÇ¿ÉÑ¡µÄ£¬Ò»Ñùƽ³£Êײ¿½öÓÉ20×Ö½Ú×é³É£¬IPÊý¾Ý±¨½á¹¹ÈçÏÂͼËùʾ¡£

ΪÁËÀû±ã¶ÔIPÊײ¿¾ÙÐжÁÈ¡»òдÈë²Ù×÷£¬ÔÚlwipÔ´ÂëÖ®Öнç˵ÁËip_hdr½á¹¹ÌåÀ´ÌåÏÖipÊý¾Ý±¨Êײ¿¡£

IP²ãÊý¾ÝÎüÊÕ

ÔÚÉÏÎÄÌáµ½£¬¹ØÓÚ²î±ðµÄÊý¾Ý°ü¾ÙÐвî±ðµÄ´¦Öóͷ££¬ÈôÊÇÊÇARP°ü£¬ÔòŲÓÃetharp_inputº¯ÊýÐÐÖ¹Öã»ÈôÊÇÊÇIP°ü£¬Ôò½»¸øIPÏà¹Øº¯ÊýÐÐÖ¹Öá£

ÔÚudpecho demoÖÐʹÓõÄÊÇIPV4ЭÒ飬Òò´Ë£¬»áŲÓÃip4_inputº¯Êý¡£

ÔÚip4_inputº¯ÊýÖлá¶ÔipÊý¾Ý±¨µÄÏà¹Ø×ֶξÙÐÐÄ¥Á·£¬ÀýÈ糤¶È£¬Ð£ÑéºÍ£¬°æ±¾ºÅµÈµÈ£¬Ò²»áÅжϸÃÊý¾Ý°üÊÇ·ñÊÇ·¢Ë͸øÍâµØµÄ£¬ÈôÊDz»ÊÇ·¢Ë͸øÍâµØµÄÊý¾Ý°ü£¬¿ÉÄÜ»¹Òª¶ÔÆä¾ÙÐÐת·¢»òÕßÑïÆú£¬ÈôÊÇÊý¾Ý±¨Ã»ÓÐÎÊÌ⣬IP²ã¾Í»áƾ֤´«Êä²ãµÄЭÒéÀàÐͽ«Êý¾Ý°ü´«Ë͵½²î±ðµÄÈë¿Úº¯ÊýÖ®ÖУ¬ÀýÈçudp_input, tcp_inputº¯ÊýµÈ¡£

IP²ãÊý¾Ý·¢ËÍ

ÔÚ´«Êä²ãЭÒéÐèҪͨ¹ýIP²ãÀ´·¢ËÍÊý¾Ýʱ£¬ÔÚÉϲ㺯ÊýÖ®ÖлáŲÓÃip4_output_if_srcº¯Êý£¬Ôڸú¯ÊýÖУ¬ÓÖ»áȥŲÓÃip4_output_if_opt_srcº¯Êý£¬Ëü»á½«´«ÊäÊý¾Ý·â×°µ½ipÊý¾Ý±¨Ö®ÖУ¬ÌîдÊý¾Ý±¨Ö®ÖеÄÄ¿µÄIPµØµã£¬Ô´IPµØµã£¬Ð­ÒéÀàÐ͵ÈÏà¹ØÐÅÏ¢¡£È»ºóÔÙȥŲÓÃetharp_output()£¬Ëü»áÆÊÎöMACµØµã£¬×é×°ÒÔÌ«ÍøÖ¡²¢²¢·¢ËÍ¡£ÔÚetharp_output()º¯ÊýÖ®ÖУ¬×îÖÕ»áȥŲÓÃÍøÂç½Ó¿Ú²ãµÄÏà¹Ø·¢Ëͺ¯Êý¡£

LWIP´«Êä²ãÓëÓ¦Óòã

ÍøÂç²ãÒѾ­Í¨¹ýIPЭÒéµÈÍê³ÉÁËÊý¾Ý±¨ÔÚ¸÷̨Ö÷»úÖ®¼ä´«ÊäµÄµÄ¹¦Ð§£¬¿ÉÊÇÊý¾Ý»¹Ã»Óеִï×îÖÕÄ¿µÄµØ—Ö÷»úÉϵÄij¸öÌض¨Ó¦ÓóÌÐò¡£

IP²ãͨ¹ý´«Êä²ãµÄЭÒ齫Êý¾Ý°üµÝ½»¸øÓ¦ÓóÌÐò£¬³£ÓõĴ«Êä²ãЭÒéÓÐUDPЭÒ飬TCPЭÒéµÈ¡£

´Ë´¦ÒÔUDPЭÒéΪÀý£¬ËüÊÇÒ»ÖÖ½ÏΪ¼òÆӵĴ«Êä²ãЭÒ飬¾­³£Ó¦ÓÃÓÚ¾ÖÓòÍøÇéÐÎÒÔ¼°ÊÓƵ²¥·ÅÁìÓò£¬ÒÔUDPΪÀýÍŽáSDK´úÂë½â˵һÏ´«Êä²ãÊÇÔõÑùʵÏÖÊý¾Ý½»»¥µÄ¡£

 

UDP±¨ÎÄ

ÔÚʹÓÃUDP´«ÊäÊý¾Ýʱ£¬Ëü»á½«Êý¾Ý·â×°ÔÚUDP±¨ÎÄÖ®ÖУ¬ÔÚIP²ãÓֻὫÊý¾Ý°ü·â×°ÔÚIP±¨ÎÄÖ®ÖУ¬ÔÚÎïÀí²ãÓֻὫIPÊý¾Ý°ü·â×°ÔÚÎïÀíÊý¾ÝÖ¡Ö®ÖС£

Ò»·ÝÓû§Êý¾ÝÔÚ±»·¢ËÍʱ¹²ÂÄÀúÁËÈý´Î·â×°¡£

UDPÏà¹ØÊý¾Ý½á¹¹

ÔÚLWIPÔ´ÂëµÄudp.hÖ®ÖУ¬½ç˵Á˱¨ÎÄÊײ¿Êý¾Ý½á¹¹ÒÔ¼°UDP¿ØÖÆ¿é¡£

LwIP±¨ÎÄÊײ¿Êý¾Ý½á¹¹Îªudp_hdr, ½ç˵ÁË UDP ±¨ÎÄÊײ¿µÄ¸÷¸ö×Ö¶Î, »®·ÖΪ16λԴ¶Ë¿ÚºÅsrc, 16λĿµÄ¶Ë¿ÚºÅdest, 16λÓû§Êý¾Ý±¨×ܳ¤¶È, ÒÔ¼°16λµÄУÑéºÍ¡£

LwIP»¹½ç˵ÁËUDP¿ØÖƿ飬¼Í¼ÓëUDPͨѶµÄËùÓÐÏà¹ØÐÅÏ¢£¬ÈçÔ´¶Ë¿ÚºÅ¡¢Ä¿µÄ¶Ë¿ÚºÅ¡¢Ô´IPµØµã¡¢Ä¿µÄIPµØµãÒÔ¼°ÊÕµ½Êý¾ÝʱµÄ»Øµ÷º¯ÊýµÈµÈ£¬ÏµÍ³»áΪÿһ¸ö»ùÓÚUDPЭÒéµÄÀú³Ì½¨ÉèÒ»¸öUDP¿ØÖƿ飬²¢ÇÒ½«ÆäÓë¶ÔÓ¦µÄ¶Ë¿Ú°ó¶¨£¬²¢½«ËùÓеÄUDP¿ØÖÆ¿éÓÃÒ»¸öÁ´±íÅþÁ¬ÆðÀ´¡£µ±UDPÎüÊÕµ½Ò»¸ö±¨ÎĵÄʱ¼ä£¬»áÈ¥±éÀúÁ´±íÉϵÄËùÓпØÖƿ飬ͨ¹ý¶Ë¿ÚºÅÀ´ÕÒµ½Æ¥ÅäµÄ¿ØÖƿ飬²¢½«Êý¾Ýͨ¹ý»Øµ÷º¯Êýת´ïµ½ÉϲãÓ¦Óá£

UDP±¨ÎÄÎüÊÕ

ÔÚIP²ã£¬µ±ÎüÊÕµ½Ò»¸ö°üÀ¨UDP±¨ÎĵÄÊý¾Ý±¨Ê±£¬udp_inputº¯Êý¾Í»á±»Å²Ó㬸ú¯ÊýÖ®ÖоÙÐÐÁËһЩ±¨ÎÄÕýµ±ÐԵļì²â£¬È»ºóƾ֤±¨ÎÄÖеĶ˿ÚÐÅÏ¢²éÕÒUDP¿ØÖƿ飬×îºóͨ¹ýUDP¿ØÖÆ¿éÖ®ÖеĻص÷º¯Êýrecv_udp½«Êý¾Ýת´ïµ½Ó¦Óò㣬ÈôÊÇÕÒ²»µ½¶ÔÓ¦µÄ¶Ë¿Ú£¬ÄÇô»á·µ»ØÒ»¸ö¶Ë¿Ú²»¿É´ïÊý¾Ý°ü¡£

UDP±¨ÎÄ·¢ËÍ

UDP±¨ÎÄ·¢ËÍÒÀÀµIP²ãÌṩµÄ·þÎñ£¬Óû§ÔÚ·¢ËÍÊý¾ÝʱÐèÒªÔÚÓ¦ÓóÌÐòÖ®ÖÐŲÓÃudp_send»òÕßÊÇudp_sendto,Ó¦ÓóÌÐòÖ®Öн«Óû§Êý¾ÝÌîµ½pbufÊý¾ÝÇøÓò,²¢½«pubf×÷Ϊ²ÎÊý´«Èëudp_send»òudp_sendtoÖ®ÖС£

udp_sendºÍudp_sendtoÖ®¼äµÄÇø±ð¾ÍÊÇudp_sendto½«Êý¾Ý·¢Ë͵½Ö¸¶¨µÄipµØµãºÍ¶Ë¿ÚºÅ£¬udp_send½«Êý¾Ý·¢Ë͵½UDP¿ØÖÆ¿éÖ®Öнç˵µÄipµØµãºÍ¶Ë¿ÚºÅ¡£udp_sendÏÖʵÉÏÒ²ÊÇŲÓÃudp_sendtoÀ´¾ÙÐÐÊý¾ÝµÄ·¢ËÍ£¬×îÖÕÕâÁ½¸öº¯Êý¶¼ÊÇ»áȥŲÓÃudp_sendto_if¡£

dp_sendto_ifº¯ÊýÖ®ÖлáÍê³Éudp±¨ÎĵÄ×é×°ºÍ·¢ËÍ£¬×îÖÕ»áŲÓÃIp²ãµÄ·¢Ëͺ¯ÊýÈ¥·¢Ëͱ¨ÎÄ¡£

 

LWIPÓ¦Óòã

ÔÚÓ¦ÓòãÒ»Ñùƽ³£»áͨ¹ýŲÓô«Êä²ãµÄһЩº¯ÊýÀ´±àдÌض¨µÄÓ¦ÓóÌÐò£¬´Ó¶øʵÏÖÊý¾ÝµÄת´ï£¬ÔÚudpecho demoÖ®ÖУ¬µ±ÎüÊÕµ½Êý¾ÝÖ®ºó£¬ÔÚudp¿ØÖÆ¿éÖа󶨵ÄÎüÊջص÷º¯ÊýÖÐÓÖ»áȥŲÓÃudp_sendtoº¯Êý¡£

³ýÁËÉÏÃæÏÈÈݵÄһЩЭÒéÍ⣬LWIP»¹Ö§³ÖICMP¡¢IGMP¡¢PPP¡¢DHCPµÈЭÒ飬²¢ÇÒSOCKET APIÒÔ¼°NETCONN APIʹÓÃÆðÀ´Ô½·¢¼òÆÓ£¬¿ÉÊÇRAW/Callback APIµÄʹÓÃÓÐÖúÓÚ¸üºÃµÄÃ÷È·LWIPЭÒé¡£

¶ÔLWIPЭÒéÕ»¸ÐÐËȤµÄ¶ÁÕß¿É×ÔÐÐÉîÈëÏàʶ¡£

 

¹Ø×¢long8ÍøÕ¾¼°Î¢ÐŹ«Öںţ¬Ïàʶ  MCU¸ü¶àÐÅÏ¢.

Òªº¦´Ê£º

ɨ¶þάÂëÓÃÊÖ»ú¿´

ÏÂÒ»¸ö: ÎÞ
ÏÂÒ»¸ö: ÎÞ

Ïà¹ØÐÂÎÅ

28Äêרע°ëµ¼Ìå

Ϊº£ÄÚ¸÷ÐÐÒµ¿í´óÓû§Ìṩ¸ßÆ·Öʵİ뵼Ìå²úÆ·

SINCE 1997

 ÎªÄúÁ¿Éí¶¨Öƽâ¾ö¼Æ»®

Verification ¾©ICP±¸2022014495ºÅ-2

Copyright ? 2022  long8  All rights reserved      

SEO±êÇ©   ÍøÕ¾½¨É裺ÖÐÆó¶¯Á¦  ±±¾©

ÍøÕ¾µØͼ