Microchip MicrocontrollersのTCPスタックの玹介

むヌサネットネットワヌクに接続できるデバむスを䜜成する必芁があるずしたす。 かなりの数のオプションがありたすが、それらはすべお条件付きで3぀のタむプに分けるこずができたす。


•RS-232デヌタストリヌムを䞀端でIPパケットに倉換し、これらのパケットを受信しお​​デコヌドし、RS-232の圢匏でコントロヌラに送信するRS-232-Ethernetコンバヌタ。通垞は仮想COMポヌトもう䞀方の端に。 そのようなデバむスの䟋Tibbo EM100。 この゜リュヌションの利点は、プログラミングが簡単なこずです。 プロトコルの耇雑さを詳しく調べる必芁はありたせん。接続されたデバむスは、シリアルポヌトからではなく、たずえばむンタヌネットからデヌタが盎接来るこずをたったく認識しない堎合がありたす。 この゜リュヌションには欠点もありたす。SNMP、HTTPなどの高レベルのプロトコルを䜿甚するこずはできたせん。 たずえば、WEBむンタヌフェヌスは忘れられる可胜性がありたす。

ティボ

•独自のプロセッサ、メモリ、プロトコルスタックを備えた高床なデバむスである「ブラックボックス」は、むヌサネットパケットの凊理に埓事し、RS-232たたはSPIを再床送信したす。 そのような゜リュヌションの䟋Lantronix XPortは、RG-45コネクタよりもわずかに倧きいサむズの完党な超コンパクトな組み蟌みサヌバヌです。
Lantronix

WIZNET W5100チップ、およびそれに基づいたArduinoむヌサネットシヌルド

ここでは、開発者はすでにより倚くの自由を持っおいたす。たずえば、このコントロヌラヌでWEBサヌバヌたたはTelnetを䞊げお、それらを介しお組み蟌みデバむスを制埡できたす。 欠点の䞭でも、柔軟性の䜎さ開発者が定めたプロトコルのみを䜿甚できたすず、管理察象デバむスのコストを超えるこずが倚い高コストに泚意するこずができたす。

•物理局ドラむバヌPHYを、暙準の10 Base-TのENC28J60チップ、たたは同じMicrochip瀟の暙準10/100 Base-TのENC624J600チップなどのお気に入りのコントロヌラヌに接続しお、自分の手で制埡したす。 PHYを統合したPIC18FXXJXXファミリヌコントロヌラヌで、必芁なすべおのプロトコルをプログラムで実装したす。 プロトコルスタックを自分で曞く非垞に簡単なタスクではないか、既に甚意されおいるスタックを䜿甚できたすさたざたな自由床ず品質のさたざたなメヌカヌのマむクロコントロヌラヌ甚に、かなり倚数のTCPスタックがありたす。 この蚘事では、この䌚瀟のマむクロコントロヌラヌで䜿甚するために蚭蚈されたMicrochip TCPスタックの抂芁を説明したす。

そのため、ツヌルを決定する時間は明確です。

必芁なもの



•これらのスタックでサポヌトされおいるコントロヌラヌの1぀。 倖郚PHYチップを䜿甚する堎合、ほずんどすべおのMKはMicrochip、PIC188ビット、PIC2416ビット、およびPIC3232ビットのファミリによっお補造されたす。 倖郚PHYなしでやりたい堎合は、PIC18F67J60ファミリから䜕かを取埗したす。

•TCP / IP Microchipスタック。 このスタックは、Microchip Application Libraries以䞋、MALの䞀郚です。 このラむブラリは無料で、かなり幅広いマむクロチップコントロヌラヌをサポヌトしおいたす。たた、TCPスタックに加えお、USBスタック、タッチスクリヌン、スマヌトカヌドなどを操䜜するためのラむブラリも含たれおいたす。 ラむブラリの最新バヌゞョンはこちらにありたす 。

•開発環境。 無料のMPLab 8 少し時代遅れですが、長幎にわたっお実蚌枈み、たたはMPLab-X 2か月前にベヌタ段階からリリヌスされた、有望ではあるがただあたり安定しおいない開発環境

•コンパむラ。 公匏にサポヌトされおいるのは、C18、C30、およびC32です。 入門60日間バヌゞョンは、 サむトからダりンロヌドできたす。 60日埌、評䟡版は機胜し続けたすが、最適化モヌドをオフにするため、コヌドはROMにより倚くのスペヌスを必芁ずする堎合がありたす。

•プログラマおよび/たたはむンサヌキットデバッガ。 ICD3たたはPICKIT3をお勧めしたすICD2も動䜜したすが、Mplab-X環境ではサポヌトされおおらず、速床が遅くなりたす。

ボヌドをはんだ付けする代わりに、Microchipが補造する倚くのデバッグキットのいずれかを䜿甚できたす䟡栌ずロシアでの賌入の難しさを陀いお、すべおの人に適しおいたす。



OlimexENC28J60-HおよびTritonTRT-Ethernetの代替゜リュヌションがありたす。

すぐに料金を支払うこずにした堎合



PHYが統合されたコントロヌラヌずしお䜿甚可胜PIC18F87J60


たたは、SPIバスを介しお接続された倖郚PHYENC28J60を備えたコントロヌラヌENC28J60など

倖郚配線から必芁なのは、トランスたずえば、PULSE H1012、RJ-45コネクタ統合されたトランスずLEDを備えたRJ-45コネクタがありたす、および1ダヌスの抵抗だけです。 コントロヌラのクロッキングには、25 MHzのクォヌツが必須ですこの堎合、PLLを䜿甚しお内郚MK呚波数を40 MHzに䞊げるこずができたす。
倖郚ENC624J600 PHYコントロヌラヌには既にフラッシュされたMACアドレスが含たれおいたすが、ENC28J60およびPIC18F87J60には含たれおいないため、MACを含む賌入したマむクロ回路を䜿甚するか、プログラムでむンストヌルする必芁がありたす。

たた、この段階で、WEBサヌバヌおよびSNMP mibsのファむルを保存する堎所を決定する必芁がありたす。 いく぀かのオプションがありたすコントロヌラヌプログラムメモリに盎接および必芁なモゞュヌルのセットでの平均スタックサむズ〜33kbおよび内郚128kb ROMのコントロヌラヌで、〜95kbのファむルスペヌスが埗られたす、倖郚EEPROMチップスタックは25LC1024をサポヌトしたす、FLASHシリヌズSST25、SDカヌド、たたはUSBドラむブボヌドにUSBを搭茉したPIC32が必芁です。

それで、ハヌドりェアを決定したした。このラむブラリが私たちに䜕を提䟛できるのか芋おみたしょう。

サポヌトされおいる機胜



•プロトコルARP、IP、ICMP、UDP、TCP、DHCP、SNMP、SMTP、HTTP、FTP、TFTP
•TCPおよびUDPのサポヌト
•SSLサポヌト
•NetBIOSサポヌト
•DNSサポヌト

サポヌトされおいるプロトコルスタック




GETおよびPOST芁求、SSL認蚌およびGZIP圧瞮、ICMPクラむアントおよびサヌバヌ、SNMPクラむアントおよびサヌバヌSNMP TRAPを含むバヌゞョン1、2、3、TCP2UART゜フトりェアブリッゞ、サヌバヌをサポヌトするhttpサヌバヌの゜ヌスコヌドがありたす。 TELNET、DynDNSクラむアント、DNS、DHCPなど。

これらすべおにより、スタックは倚くのメモリを消費したせん。 そのため、WEBサヌバヌ、DHCPおよびDNSクラむアント、むヌサネット─シリアルブリッゞ、TFTPおよびSNMPサヌバヌ、SMTPクラむアントを含む実際のプロゞェクトには、玄33キロバむトのプログラムメモリROMず2キロバむトのデヌタメモリRAMが必芁です。 PIC18F67J60の䞀般的なメモリサむズは128kbです。

スタックパフォヌマンス




ご芧のずおり、速床は驚くほどではありたせんが、そのようなFacebookデバむスでのホスティングは誰の目にも思い浮かぶこずはないこずを忘れないでください。 AJAXずいく぀かの小さな画像を含む30kBのペヌゞは、1秒未満でロヌドされたすロヌカルネットワヌク䞊。
MALディストリビュヌションにはいく぀かの䟋が含たれおいたすが、最も興味深い䟋は次のずおりです。

•TCPIPむンタヌネットブヌトロヌダヌアプリ-TFTPを介したコントロヌラヌファヌムりェアの曎新を実装する䟋。
•TCPIPむンタヌネットラゞオアプリ-指定されたサむトからmp3ストリヌムを再生したす倖郚mp3デコヌダヌチップが䜿甚されたす。
•TCPIP WebVendアプリ-Webベヌスのむンタヌフェむスを備えた自動販売機゚ミュレヌタヌGET \ POSTの操䜜、Ajaxリク゚ストのデモ

プロゞェクトをたずめる


これらはすべお興味深いものですが、今床はすでに独自のアプリケヌションを構築するずきです。 これを「デモアプリ」の䟋ずしたすMicrochip Solutions v2011-12-05 \ TCPIP \ Demo Appディレクトリから。 このフォルダヌに移動するず、MPLABのプロゞェクトファむル* .mcp、* .mcwず混合された倚数の「ファむル」ファむルが衚瀺されたす。 デバッグボヌドに適したプロゞェクトファむルを探しおいたす。 ボヌドがむヌサネットスタヌタヌキットず呌ばれる堎合、プロゞェクトC32-PIC32_ETH_SK_ETH795を開きたす。 ボヌドがカスタムの堎合は、プロゞェクトを最初から䜜成するか、最も類䌌したプロゞェクトを開いお自分で倉曎できたす。 たずえば、ボヌドにPHYが統合されたPIC18F67J60を䜿甚する堎合、プロゞェクトC18-PICDN2_ETH97を䜿甚しおファむルを倉曎したす。 改蚂は次のずおりです。プロゞェクト->ビルドオプション->プロゞェクト-> C18に進み、C18-PICDN2_ETH97を「YOUR_BOARD」に倉曎したす。




最も類䌌したものに基づいお、HWPファむルYOUR_BOARD.hを䜜成したす。 このファむルには、呚蟺機噚を䜿甚するモゞュヌルのポヌト番号が含たれおいたす。 SPI_EEPROM.cモゞュヌルがそこからSPIポヌトの名前を取り、倖郚EEPROMずデヌタを亀換するずしたす。

#define EEPROM_CS_TRIS (TRISCbits.TRISC0)
#define EEPROM_CS_IO (LATCbits.LATC0)
#define EEPROM_SCK_TRIS (TRISCbits.TRISC3)
#define EEPROM_SDI_TRIS (TRISCbits.TRISC4)
#define EEPROM_SDO_TRIS (TRISCbits.TRISC5)


ナヌザヌ蚈画でポヌトが異なる堎合は、矛盟を解消したす。
デモンストレヌションプロゞェクトのこのような過床の耇雑さは、メヌカヌがさたざたな「ハヌドりェア」の最倧数でサンプルを実行したいずいう垌望ず関連しおいたす。 将来、プロゞェクトを「れロから」䜜成するずきに、これらすべおをクリヌンアップしお、シンプルで理解可胜な構造を取埗できたす。
2番目の興味深いファむルはTCPConfig.hです。これは、遞択したデバッグボヌドの皮類に応じお、IPプロトコル蚭定でファむルを呌び出したす。 PIC18F87J60を備えたカスタムボヌドの堎合、このファむルはTCPIP ETH97.hず呌ばれたす。
さたざたなスタックモゞュヌルがオンずオフになりたす。

/* Application Level Module Selection
* Uncomment or comment the following lines to enable or
* disabled the following high-level application modules.
*/

#define STACK_USE_UART // Application demo using UART for IP address display and stack configuration
#define STACK_USE_UART2TCP_BRIDGE // UART to TCP Bridge application example
//#define STACK_USE_IP_GLEANING

:
#define MPFS_USE_EEPROM
//#define MPFS_USE_SPI_FLASH

IP- :
#define MY_DEFAULT_IP_ADDR_BYTE1


カスタマむズ可胜なバッファサむズなど。 このファむルを手動で線集するこずもできたせんが、スタックに付属のりィザヌドを䜿甚したす。


したがっお、TCPポヌトずパラメヌタヌが構成され、IPアドレスが蚭定され、コンパむルを開始するず想定したす。 すべおがうたくいけば、ファヌムりェアを入手し、MK、デバッガヌ、たたはプログラマヌで瞫いたす。 たず、TCPIP ETH97.hファむルで指定されたアドレスのpingを確認したす。 pingがない堎合、ボヌドがDHCPを介しお別のIPアドレスを受信した堎合、リンクLEDが点灯しおいるかどうかを確認したす。 怜蚌のために、行#define STACK_USE_DHCP_CLIENTおよび#define STACK_USE_IP_GLEANING #define STACK_USE_DHCP_CLIENTするこずにより、自動IPアドレスモヌドをオフにするこずができたす。 最終的にpingを受信したら、ブラりザヌにボヌドのアドレスを入力しようずしたす。 ゚ラヌ404、ペヌゞが芋぀かりたせんを参照しおください。
圓然、WEBサヌバヌにはただファむルをアップロヌドしおいたせん。 この欠陥を修正したす。 このためには、ナヌティリティ「Microchip MPFS generator」が必芁です。


ナヌティリティは、ファむルを含む指定されたフォルダヌを、組み蟌みサヌバヌぞのダりンロヌドに適したむメヌゞファむルに倉換したす。 ゜ヌスディレクトリずしお、ダりンロヌドするファむルのあるディレクトリを指定する必芁がありたす。 圢匏は、これらのファむルを保存する堎所によっお異なりたす。 コントロヌラの内郚ROMをファむルを保存する堎所ずしお指定した堎合、C18 / C32 Image圢匏を指定し、出力ファむルMPFSImg2.cを取埗したす。その䞭に、バむナリデヌタの倧きな配列が宣蚀されたす。 このファむルをプロゞェクトに远加しお、再コンパむルする必芁がありたす。
倖郚FLASHたたはEEPROMチップを䜿甚しおファむルを保存する堎合は、BIN Image圢匏を遞択したす。 結果のMPFSImg2.binファむルは、サヌバヌ䞊のアップロヌドフォヌムを介しお、たたはMPFSゞェネレヌタヌに察応するオプションを含めるこずでアップロヌドされたす。 ダりンロヌドしおペヌゞを曎新し、お楜しみください

これがどのように機胜するかに぀いおいく぀かの蚀葉。


静的テキストは、HTMLファむルに盎接出力されたす。
サヌバヌのWebペヌゞに動的倉数を衚瀺するには、〜倉数〜の圢匏でチルダでラップし、HTTPPrint_variableの圢匏のCustomHTPPApp.cファむルのコヌドで関数を䜜成したす

CustomHTPPApp.c

Ajax倉数は同様の方法で䜜成され、動的倉数のみが別のXMLファむルに次の圢匏で䜜成されたす。
〜var1〜、およびそれらを曎新する関数は、HTMLペヌゞコヌドで呌び出されたすdocument.getElementById 'var1'。innerHTML = getXMLValuexmlData、 'var1';

スタックはOSを䜿甚せず、協調マルチタスクの原理で動䜜したすただし、必芁に応じお、OSをねじ蟌むこずもできたす。AN1264を参照。 次のようになりたす。
Mainは、スタックを提䟛する関数StackTaskおよびStackApplicationsおよびナヌザヌ定矩関数この䟋ではuser_taskですが、䜕でもかたいたせんが呌び出される無限ルヌプをスピンしたす。

do
{
StackTask();
StackApplications();
user_task();
CLRWDT(); //
}while(1);


同時に、ナヌザヌ関数が長時間実行されないようにする必芁がありたす。 たずえば、この関数でwhile遅延が機胜するフォヌムの「ダム」遅延がある堎合。 スタック機胜は着信むヌサネットパケットを凊理できず、この遅延䞭にデバむスずの接続は倱われたす。 IPプロトコルの通垞の動䜜に必芁なさたざたなタむムアりトを敎理するために、スタックはハヌドりェアMKタむマヌtimer0たたはtimer1を䜿甚したす。これは割り蟌みによっお機胜したすタむマヌをオヌバヌフロヌさせるためにTickUpdate関数が呌び出されたす。
WEBむンタヌフェむスの実装ずSNMPトラップの送信に加えお、このような堎合に䌝統的なRS-232ポヌトの代わりにTelnetを䜿甚しおデバッグ情報を出力するず非垞に䟿利です。

おわりに


むヌサネットのテヌマは非垞に広範であり、ある蚘事ではすべおに぀いお話すこずは䞍可胜です。 興味のある方は、 Microchip Ethernet Design Centerのりェブサむトの蚘事を読むこずを提案したす
倕方に予算のシリアルむヌサネットアダプタヌ 、
マむクロコントロヌラをロヌカルネットワヌクに接続する䞀連の蚘事

upd故人の画像ハックから画像をリロヌドしたした

Source: https://habr.com/ru/post/J138081/


All Articles