Zigbee EZSP UART について

著者:TorchIoTBootCamp
リンク:https://zhuanlan.zhihu.com/p/339700391
From:クオラ

1. はじめに

Silicon Labs は、Zigbee ゲートウェイ設計用のホスト + NCP ソリューションを提供しました。このアーキテクチャでは、ホストは UART または SPI インターフェイスを介して NCP と通信できます。最も一般的には、SPI よりもはるかに単純な UART が使用されます。

Silicon Labs は、ホスト プログラム用のサンプル プロジェクトも提供しています。Z3ゲートウェイホスト。サンプルは Unix のようなシステム上で実行されます。一部の顧客は RTOS 上で実行できるホスト サンプルを必要としているかもしれませんが、残念ながら、現時点では RTOS ベースのホスト サンプルはありません。ユーザーはRTOSに基づいて独自のホストプログラムを開発する必要があります。

カスタマイズされたホスト プログラムを開発する前に、UART ゲートウェイ プロトコルを理解することが重要です。UART ベースの NCP と SPI ベースの NCP の両方の場合、ホストは EZSP プロトコルを使用して NCP と通信します。EZSPの略ですEmberZnet シリアル プロトコルで定義されています。UG100。UART ベースの NCP の場合、UART 経由で EZSP データを確実に伝送するために下位層プロトコルが実装されています。プロトコルの略称非同期シリアルホスト。ASH について詳しくは、こちらをご覧ください。UG101そしてUG115.

EZSP と ASH の関係は、次の図で示すことができます。

1

EZSP と ASH プロトコルのデータ形式は、次の図で示すことができます。

2

このページでは、UART データをフレーム化するプロセスと、Zigbee ゲートウェイで頻繁に使用されるいくつかのキー フレームを紹介します。

2. フレーミング

一般的なフレーム化プロセスは、次の図で説明できます。

3

このチャートでは、データは EZSP フレームを意味します。一般に、フレーミング プロセスは次のとおりです。 |いいえ|ステップ|参照|

|:-|:-|:-|

|1|EZSP フレームを埋める|UG100|

|2|データのランダム化|UG101 のセクション 4.3|

|3|制御バイトを追加|UG101 の Chap2 および Chap3|

|4|CRC の計算|UG101 のセクション 2.3|

|5|バイト スタッフィング|UG101 のセクション 4.2|

|6|終了フラグを追加|UG101 のセクション 2.4|

2.1.EZSP フレームを埋める

EZSP フレーム フォーマットは、UG100 の第 3 章に示されています。

4

SDK がアップグレードされると、この形式が変更される可能性があることに注意してください。形式が変更されると、新しいバージョン番号が付けられます。この記事の執筆時点における EZSP の最新バージョン番号は 8 (EmberZnet 6.8) です。

EZSP フレーム形式はバージョンごとに異なる場合があるため、ホストと NCP が一致するという必須要件があります。しなければならない同じ EZSP バージョンで動作します。そうしないと、期待どおりに通信できません。

これを実現するには、ホストと NCP の間の最初のコマンドが version コマンドである必要があります。つまり、ホストは他の通信の前に、NCP の EZSP バージョンを取得する必要があります。EZSP バージョンがホスト側の EZSP バージョンと異なる場合、通信を中止する必要があります。

この背後にある暗黙の要件は、version コマンドの形式が決して変更しないでください。EZSP版のコマンド形式は以下のとおりです。

5

パラメータ フィールドとバージョン応答の形式の説明は、UG100 の第 4 章にあります。パラメータ フィールドは、ホスト プログラムの EZSP バージョンです。この記事を書いている時点では8です。
7
作者:TorchIoTBootCamp
链接:https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作権所有者はすべて。市販のダウンロード システムの作成者は許可を取得し、非市販のダウンロードには登録されています。

2.2.データのランダム化

ランダム化プロセスの詳細については、UG101 のセクション 4.3 で説明されています。EZSP フレーム全体がランダム化されます。ランダム化は、EZSP フレームと擬似ランダム シーケンスの排他的論理和をとります。

以下は、擬似ランダムシーケンスを生成するアルゴリズムです。

  • rand0 = 0×42
  • randi のビット 0 が 0 の場合、randi+1 = randi >> 1
  • randi のビット 0 が 1 の場合、randi+1 = (randi >> 1) ^ 0xB8

2.3.制御バイトを追加する

コントロールバイトは1バイトのデータであり、フレームの先頭に付加されます。形式を以下の表に示します。

6

制御バイトは全部で 6 種類あります。最初の 3 つは、DATA、ACK、NAK などの EZSP データを含む共通フレームに使用されます。最後の 3 つは、RST、RSTACK、ERROR など、共通の EZSP データなしで使用されます。

RST、RSTACK、ERROR のフォーマットについてはセクション 3.1 ~ 3.3 で説明します。

2.4.CRCを計算する

16 ビット CRC は、制御バイトからデータの終わりまでのバイトに対して計算されます。標準の CRCCCITT (g(x) = x16 + x12 + x5 + 1) は 0xFFFF に初期化されます。最上位バイトは最下位バイトよりも前に配置されます (ビッグエンディアン モード)。

2.5.バイトスタッフィング

UG101 のセクション 4.2 で説明されているように、特別な目的に使用される予約されたバイト値がいくつかあります。これらの値は次の表にあります。

7

これらの値がフレームに表示されると、データに対して特別な処理が行われます。– エスケープバイト 0x7D を予約バイトの前に挿入します。 – その予約バイトのビット 5 を反転します。

以下に、このアルゴリズムの例をいくつか示します。

8

2.6.終了フラグを追加する

最後のステップは、フレームの最後に終了フラグ 0x7E を追加することです。その後、データを UART ポートに送信できるようになります。

3. デフレーム処理

UART からデータを受信したら、逆の手順を実行してデータをデコードするだけです。

4. 参考文献


投稿日時: 2022 年 2 月 8 日
WhatsAppオンラインチャット!