8051コアに基づくスマートスイッチ、イーサネット制御、パート1

こんにちは、ハブロビテス!

開発中のデバイスIRemo:Tap 、および既にhabrahabrについて書かれている他の類似物を幾分繰り返しています。 私のオプションはよりシンプルで安価になります。 通信のために、私は通常のツイストペアケーブルを選択し、制御のためにデバイスには独自のウェブページがあります。

この記事では、最初の段階である、将来のプロジェクトのための「頭脳」の作成について説明します。





ステージ番号ゼロ



複雑なものの開発を単純な「ブリック」に分割することは常に簡単です。 これは、モジュール性の科学的原理と呼ばれます。 それではまず、アイデアを考えてブロックに分けましょう。 デバイス全体で、コントロールユニット、スイッチングユニット、電源の3つの主要なモジュールを特定しました。



この記事では、Webサーバーとして動作するコントロールユニットに焦点を当て、リクエストを含むWebフォームを受け入れて処理します。 そして、ここで座って、開発中のモジュールのブロック図を1杯のコーラの上に描きます。



指定のデコードは次のとおりです。





最初のレンガ。



最初の段階。


要素ベースを選択することで、最初のブリックの開発を開始します。 ウクライナで利用可能なマイクロ回路に精通した後、MK C8051F340-GQR(64kbフラッシュ、4kb RAM、10ビットADC、任意のプロセッサポートへのUART、ADC、SPIを構成できるクロスバー、USB、組み込みソースからの48MHzクロック周波数、温度センサー)をプロジェクトの「頭脳」として使用し、CP2200-GQRチップをイーサネットコントローラーとして使用して、最大10 Mbpsの速度を提供します(これで十分です)。 両方のチップは、表面実装用のTQFP-48シャーシに存在します。 データシートC8051F340およびCP2200の詳細仕様。



最初の段階の残りのコンポーネントのうち、1:1トランスを備えたイーサネットコネクタが必要です。これは、コネクタ自体に統合することが望ましいです。 私はHR911105Aを選びました。



第二段階。


超小型回路は優れています(CP2201に類似したコントローラーがありますが、QFN-28パッケージにあり、はんだ付けが少し困難です)。 この段階で、回路図を作成します。

ここに私が得たものがあります(クリック可能な画像):





今、いくつかの明確化:

  1. ukとCP2200を接続することから始めましょう。 CP2200にはメモリがトリックアウトされているため、両方のマイクロサーキットにEMIF(外部メモリインターフェイス)インターフェイスが搭載されているため、状況は大幅に簡素化されます。 アドレスは、バイトP3、バイトP4-データ、0に設定するとWRではなくビットP1.7 \で送信され、チップは指定されたアドレスで書き込み内容を理解し、RDではなくビットP1.6 \を設定すると、それに応じて読み取ります。 接続はデータシートから取得されます。R1-8低ワット抵抗の公称値は1 KOhmであり、論理ユニットの値までピンに引きます。 それらの存在は必要ありません。

    他のピン:

    • P0.2 \ INTクロック信号、1に設定した後、マイクロ回路はリクエストの処理を開始します
    • P0.0 \ RESリセット信号
    • P0.1 \ CS-マイクロサーキットの選択、後に判明したように、繁殖しないことも可能でした。
  2. また、Q2水晶振動子にも注意してください;公称値は20,000 MHzです;その存在は必須です(Q1は省略可能)。
  3. イーサネットコネクタの接続にも問題はありません;接続全体もデータシートから取得されます。 R14、R14、C16、C17ローパスフィルター(定格は記事の下部に記載されています)。
  4. また、私はyusbを忘れていませんでした。 X1.1とX1.2を短絡すると、内部電圧レギュレータμを使用してUSBから電力を得ることができますが、残念ながら、CP2200チップに電力を供給しません(出力電流μは100 mA、送信中はCP2200要件122 mA)。
  5. LEDはX6に接続されます。X6は単に点灯し、電力の存在を通知します。BC847トランジスタに基づくトランジスタキー、制御ピンP2.7はX8に出力されます。ここでLEDを接続できます。 ファームウェアのデバッグ時に大いに役立ちました。
  6. X4は3.3Vで駆動されます。 X2では、mkがリーダーである場合、5Vを適用して、モードのさまざまなフラッシュドライブや他のUSBデバイスに電力を供給することもできます。 C2プログラマーのX3ポート。 残りのピンはコネクターX5に出力されます。


第三段階。


飼育回路図を作成しました。 問題はないはずです。 工場でボードを印刷したので( DNVP Electronmash )、2つの側面から回路を選択しました(右上隅は空のままで、そこに穴を開けたため、ブレッドボードのようなものを得ました)。



それでは、すべてをガーバー形式にエクスポートします(ボードイメージ、それぞれのファイルの各面)、穴はNCドリル形式で保存されます。

ライセンスされたAltiumをお持ちでない場合は、ガーベラファイルからソフトウェアへのすべてのリンクを削除することを忘れないでください。削除すると、罰金が科されます(前例があります)。 可能であれば、ライセンスソフトウェアを使用します。

手数料を受け取り、徴収します:

上:



下:



豊富なワイヤは、どのプログラマが使用されるかわからないという事実によるもので、最初はプログラマから電源とデータを供給することになっていたが、残念ながら、プログラマを配線するときにいくつかのミスを犯し、動作しなかった。 そのため、使用されたコネクタに持ち込まれました(同時に、モックアップ部分が役立ちました)。



第4ステージ。


すべての部品の説明がなければ、ファームウェアコードはまだ提供しませんが、Silabsの標準的な例を縫います。 問題は1つだけです。すべての例は、CP2200DKプレフィックスを使用して、Silabovskyデバッグモジュールの下で鋭くされています。 ここでの違いは制御ピンのみであるため、main.cファイルを開きます。

コードを次のように変更する関数void PORT_Init(void)を探しています。

void PORT_Init (void) { IT01CF = 0x02; // Enable Interrupt 0 on P0.3 TCON &= ~0x01; // Make /INT0 level triggered XBR1 = 0x40; // Enable crossbar and enable // weak pull-ups P0MDOUT |= 0x10 | 0x1F; // enable UTX as push-pull output P1MDOUT |= 0xD8 | 0xFF; // /WR and /RD are push-pull P2MDOUT |= 0xFF; P3MDOUT |= 0xFF; P4MDOUT |= 0xFF; }
      
      





void ether_reset_low()関数を見つけて、次のように変更します。

 void ether_reset_low() { P0 &= ~0x01; // Pull reset low }
      
      





また、void ether_reset_high()を使用してこれを行います。

 void ether_reset_high (void) { P0 |= 0x01; // Allow /RST to rise while(!(P0 & 0x01)); // Wait for /RST to go high }
      
      





mn_userconst.hを開きます

IPアドレスを設定します。

 #define IP_SRC_ADDR { 192, 168, 0, 6 }
      
      





ボイドメイン()

port_init()の後;

加える

 P0 &= ~0x02;//Cs=0
      
      





次に、VFILE_DIRに移動します

index.htmlを編集します

update.batを実行します。

したがって、16進値の標準配列はindex.htmlから作成されます。

コンパイルし、hexファイルに収集し、同じネットワーク上のコンピューターにIPアドレスを割り当ててフラッシュします。

ping:



さて、結果を見に行きましょう:



応答しない場合は、ケーブル、プログラムコードを確認し、それが本当に悪い場合は友人に行き、オシロスコープを使用してディベースします。



参照:


  1. 変換された例、およびaltium形式(10番目のバージョン)のボードの図面とpdf形式の要素のリスト:

  2. Datashits(技術文書):



次の記事に続きます。



デバイスと記事の作成に協力してくれた友人に感謝します。



All Articles