カスタムI2Cマスタースレーブシステムを設計およびデバッグする方法


10

カスタムI2Cマスタースレーブシステムが必要な場合の手順

適用する設計基準は何ですか?

問題のトラブルシューティングに使用できるデバッグツールは何ですか?


これは参考質問です。これをわかりにくくするコメントをいくつか削除しました。(質問は質問者によって答えられます)。
ニックギャモン

回答:


10

私がEmbedded Linux Conferenceで提供したこのチュートリアルでは、質問に答え、対処されたトピックの詳細な説明へのリンクを提供し、Arduino Mini Proがスレーブとして機能し、4つの独立したホイールを制御する4WDドローンの運転の実際的な例を使用します。元のドキュメントはここにあります

注:この回答は、リンクのハイライトを調整しているため、現在作業中です。


I2Cバスの典型的なアプリケーション

  • 比較的遅い周辺機器とのインターフェース。例:センサー、機械式アクチュエーター。
  • 他のチャネルを使用してデータを交換する「高速」周辺機器を制御する。例:コーデック。

    PCでは、オペレーティングシステムは通常、I2Cを介して以下と対話します。

    • 温度およびバッテリー電圧計;
    • ファン速度コントローラー;
    • オーディオコーデック。

複数のバスコントローラが使用可能な場合、周辺機器は速度によってグループ化されるため、高速のものが周辺機器によってペナルティを課されることはありません。


I2Cバスの概要-主な機能

  • シリアルバス。
  • 2行のみ:Serial CLockおよびSerial DAta(プラスアース)。
  • 4つの速度:100kHz、400kHz、1MHz、3.2MHz。
  • 通常、1つのマスターデバイスと1つ以上のスレーブ。
  • 通信は常にマスターデバイスによって開始されます。
  • 同じバス上に複数のマスターを共存させることができます(マルチマスター)。
  • オープンドレイン:SDAとSCLの両方にプルアップ抵抗が必要です。
  • 「クロックストレッチ」
    • マスターはSCLを制御しますが、速度を調整する必要がある場合は、スレーブが(オープンドレインのため)SCLを保持できます。
    • マスターはこのシナリオをチェックする必要があります。
    • スレーブはスタックしてバスを詰まらせる可能性があります。マスターからスレーブへのリセットラインが必要です。
  • 通常は7ビットのアドレス指定ですが、10ビットもサポートされています。
  • 論理プロトコル:実際の電圧レベルは指定されておらず、個々の実装に依存します。例:1.8V / 3.3V / 5.0V

参照URL:

バス構成の例

バス構成の例


プロトコルの特性(簡略化)

  • 2つのメッセージタイプ:読み取り書き込み
  • 開始/停止ビット-残りの回答では「[」と「]」として表されます
  • アドレス:7または10ビット
  • R / Wビット:R = 1 / W = 0送信されたメッセージのタイプを識別するために使用されます。
  • バス上のデータ:(アドレス<< 1 | R / W)
  • 選択したデバイス内で、情報ハンドラーとして登録します。

バス交通の例

バス交通の例 バス書き込みサイクルの例 バスリードサイクルの例Part1 バスリードサイクルの例Part2


カスタムスレーブ

なぜカスタムI2Cスレーブを作成するのですか?

  • 必要なセンサー/アクチュエータはI2Cインターフェイスでは利用できません。
  • 必要なスレーブよりも固有のアドレスが少ない。
  • スレーブで必要なカスタム機能:
    • 刺激に対する半自律的反応。
    • 入力データのフィルタリング/前処理。
  • 電力の最適化:カスタムの「センサーハブ」がメインプロセッサのアイドル中にハウスキーピングを行います。
  • 入力に対するリアルタイムの応答。
  • [ここにあなたの想像力]

カスタムI2Cスレーブを設計する方法は?

  • 要件を定義します(前のスライドを参照)。
  • マイクロコントローラまたはマイクロプロセッサを選択してください。
  • スケジューラまたはオペレーティングシステム(存在する場合)を選択します。
  • 通信サブプロトコルを定義します。
    • 交換するパラメータとコマンドを定義します。
    • それらを「レジスタ」に整理し、無料のアドレスを選択します。

I2Cマスターの設計

主要な設計基準:

  • 重量/寸法。
  • 必要な計算能力と平均待ち時間。
  • PCのようなデバイス
    • 組み込みデバイス、通常はヘッドレス。
    • 優先プログラミング言語:インタープリタとコンパイルの比較。
  • スレーブを駆動するためのバス/ gpiosの可用性:
    • GPIOのみ:プロトコルのビットバン
    • I2C:ユーザー空間アプリケーションとカーネルドライバー。
    • 使用可能なGPIO / I2Cインターフェースはありません:USB-I2Cアダプター。

デバッグ:分割統治

アドホックデバイスを使用してバスを直接制御します。例:

  • バス海賊(他のバスにも便利)
  • USBからI2Cマスターアダプター。これもFTDI FT232Rチップに基づいています。
  • カスタムデバイス(個別のプロジェクトである可能性があります)。
  • ロジックアナライザーまたはスコープ/高度なメーターでバスをスヌープします。例:

    • 互換性のあるロジックアナライザーを備えたsigrok / pulseview
    • 2チャネルスタンドアロンスコープ/メーター
    • スレーブ固有の回路内デバッガー/回路内エミュレーターを使用します。

      例:AVRチップ用のAVR Dragon(Arduino UNO、Nano、Mini、MiniPro)


バス海賊

バス海賊

  • 主に開発目的のため。
  • バスを嗅ぎ、運転することができます。
  • マクロを含むシリアル(ttyACM)ポート経由のコンソールインターフェイス、またはいくつかのプログラミング言語のプログラムによるアクセス。
  • 内蔵プルアップ抵抗と電圧源(5V / 3.3V)
  • 他の多くのプロトコルをサポートします。
  • 参考文献:ウィキペディアメインページ

USB-I2Cアダプター

usbtoi2c

  • 小さな足跡。
  • 恒久的な設置に適しています。
  • ホストでの特別な接続は不要です。通常のPCとのインターフェースに使用できます。
  • SPI対応のバリアントも利用可能です。
  • コンソールインターフェイスはなく、シリアルバイナリプロトコルのみ。
  • プロトコルラッパーが必要です
  • リファレンス:プロトコル

シグロクとパルスビュー

sigrok(bakendコンポーネント)ロゴ

シグロク

PulseView(ビジュアライザ)の例

Pulseview

ローエンドロジックアナライザーの例

サレエ

  • LinuxでのPC駆動測定のデファクトスタンダード(他のOSでも利用可能)。
  • 幅広いロジックアナライザー、スコープ、メーターをサポート。
  • I2Cを含むさまざまなプロトコルデコーダー。
  • 論理信号の視覚化とプロトコルエラーのデバッグに役立ちます。
  • 非常にローエンドで安価なハードウェアでも、デバッグにまったく新しい次元を提供できます。
  • 参照:sigrokpulseviewサポートされているハードウェア

例:4WDドローンの操縦

2つのArduino Mini Proを使用して構築されたプロトタイプ。 ドローン


例ではスレーブは何をしますか?

I2Cスレーブ:

  • 各ホイールに適用されるトルクの量を制御します。
  • 各ホイールが回転する方向を制御します。
  • 光学式エンコーダー(走行距離計)を介して各ホイールの回転速度を測定します。
  • 上記のパラメーターをI2Cマスターに公開します。

スレーブの役割

I2Cスレーブの高レベルのブロック図。


スレーブの選択:Arduino Mini Pro

MiniPro

  • 各ホイールに提供するのに十分なピン/機能:
    • デューティサイクルの独立した構成を備えた1つのPWM出力。
    • オドメーター入力をIRQとして登録するための1 GPIO。
    • 選択するための2つのGPIO:
      • 進む
      • アイドル
      • ロック
  • 割り込み駆動のi2c交換用のI2C HWブロック。
  • SPIベースのプログラミング専用ピン。
  • 小さな足跡。
  • 低価格。
  • 写真に示されているクローンのボードレイアウトは、DILソケットへの取り付けに最適化されています。

スレーブ固有のICD:AVR Dragon

AVRドラゴン


OSの選択:ChibiOS

ChibiOS

  • RTOS:プリエンプション、タスク、セマフォ、動的システムティックなど。
  • 小さな設置面積:使用されたコード/データのみをリンクします
  • HALによるRTOSとBSPの区別。
  • 非商用利用のためのGPLv3。
  • 活発に開発されていますが、すでに成熟しています。
  • 8bit AVRをサポートします。

ただし、AVRのBSPサポートが制限されていたため、次の機能がありません。-AVR GPIOの割り込みドライバー(追加)。-AVRスレーブモードのI2Cサポート(カスタム)。AVRのドローンソフトウェアの一部として個別に開発する必要がありました


通信パラメーターの定義

各ホイールについて:

  • それを駆動するために使用されるPWM信号のデューティサイクル -1バイト。0xFF =最大トルク/ 0x00 =トルクなし。

  • ローテーションの方向 -1バイト。

    • 0x00 =アイドル
    • 0x01 =逆
    • 0x02 =フォワード
    • 0x03 =ロック
  • 光学エンコーダのスロット間の平均周期 -2バイト。

    • 何かを書き込むと、測定値がリセットされます。
  • パラメータインデックス -1ニブル:

    • 0 =デューティサイクル
    • 1 =方向
    • 2 =平均期間
  • ホイールインデックス -1ニブル:

    • 0 =左後
    • 1 =右後
    • 2 =右前
    • 3 =左前
    • 4 =すべて

サブプロトコル:レジスターの定義

レジスタ形式:0xαβ -α=パラメータインデックス-β=ホイールインデックス

アドレス(任意に選択):0x10

バス海賊フォーマット: -[=開始ビット-] =終了ビット-r =読み取りバイト-アドレス時間2(左シフト1)、R / Wビット用


例-バス海賊フォーマット

[i2c_addr reg_addr =(parm、wheel)reg_value]

[0x20 0x20 0x02]  Left Rear Forward
[0x20 0x21 0x01]  Right Rear Backward
[0x20 0x22 0x01]  Right Front Backward
[0x20 0x23 0x02]  Left Front Forward
[0x20 0x14 0xFF]  Wheels set to max torque

車は時計回りに回転します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.