著者:TorchiotBootcamp
リンク:https://zhuanlan.zhihu.com/p/339700391
From:Quora
1。はじめに
Silicon Labsは、Zigbee Gateway Design用のホスト+NCPソリューションを提供しています。このアーキテクチャでは、ホストはUARTまたはSPIインターフェイスを介してNCPと通信できます。最も一般的には、SPIよりもはるかに簡単なため、UARTが使用されています。
シリコンラボは、ホストプログラムのサンプルプロジェクトも提供しています。z3gatewayhost
。サンプルはUNIXのようなシステムで実行されます。一部のお客様は、RTOで実行できるホストサンプルを必要とする場合がありますが、残念ながら、当面はRTOベースのホストサンプルはありません。ユーザーは、RTOに基づいて独自のホストプログラムを開発する必要があります。
カスタマイズされたホストプログラムを開発する前に、UARTゲートウェイプロトコルを理解することが重要です。 UARTベースのNCPとSPIベースのNCPの両方について、ホストはEZSPプロトコルを使用してNCPと通信します。ezsp略ですEmberzNetシリアルプロトコル、そしてそれはで定義されていますUG100。 UARTベースのNCPの場合、EZSPデータをUARTよりも確実に運ぶように下層層プロトコルが実装されています。灰プロトコル、略非同期シリアルホスト。 Ashの詳細については、参照してくださいUG101そしてUG115.
EZSPとASHの関係は、次の図で説明できます。
EZSPとASHプロトコルのデータ形式は、次の図で説明できます。
このページでは、Zigbee Gatewayで頻繁に使用されるUARTデータといくつかのキーフレームをフレーミングするプロセスを紹介します。
2。フレーム化
一般的なフレーム化プロセスは、次のチャートで説明できます。
このチャートでは、データはEZSPフレームを意味します。一般に、フレーミングプロセスは次のとおりです。| no |ステップ|参照|
|: - |: - |: - |
| 1 | ezspフレームを埋めます| ug100 |
| 2 |データランダム化| UG101のセクション4.3 |
| 3 | ug101の制御バイト| chap2およびchap3を追加します|
| 4 | UG101のCRC |セクション2.3を計算します|
| 5 |バイトスタッピング| UG101のセクション4.2 |
| 6 | endフラグを追加| UG101のセクション2.4 |
2.1。 EZSPフレームを埋めます
EZSPフレーム形式は、UG100の第3章に示されています。
SDKのアップグレード時にこの形式が変更される可能性があることに注意してください。フォーマットが変更されたら、新しいバージョン番号を付けます。最新のEZSPバージョン番号は、この記事が書かれているときに8です(EmberzNet 6.8)。
EZSPフレーム形式は異なるバージョン間で異なる可能性があるため、ホストとNCPが必須の要件がありますしなければならない同じEZSPバージョンで作業します。そうでなければ、彼らは予想どおりに通信することはできません。
それを達成するには、ホストとNCPの間の最初のコマンドはバージョンコマンドでなければなりません。言い換えれば、ホストは他の通信の前にNCPのEZSPバージョンを取得する必要があります。 EZSPバージョンがホスト側のEZSPバージョンと異なる場合、通信を中止する必要があります。
この背後にある暗黙の要件は、バージョンコマンドの形式ができるということです決して変わらないでください。 EZSPバージョンのコマンド形式は、以下のようなものです。
链接:https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权、非商业转载请注明出处。
2.2。データランダム化
詳細なランダム化プロセスは、UG101のセクション4.3で説明されています。 EZSPフレーム全体がランダム化されます。ランダム化は、排他的またはEZSPフレームと擬似ランダムシーケンスであることです。
以下は、擬似ランダムシーケンスを生成するアルゴリズムです。
- RAND0 = 0×42
- ランディのビット0が0の場合、randi+1 = randi >> 1
- ランディのビット0が1の場合、randi+1 =(randi >> 1) ^ 0xb8
2.3。コントロールバイトを追加します
コントロールバイトは1バイトデータであり、フレームのヘッドに追加する必要があります。形式を以下の表に示します。
完全に、6種類の制御バイトがあります。最初の3つは、データ、ACK、NAKを含むEZSPデータの一般的なフレームに使用されます。最後の3つは、RST、RSTACK、エラーを含む一般的なEZSPデータなしで使用されます。
RST、rstack、およびエラーの形式については、セクション3.1〜3.3で説明します。
2.4。 CRCを計算します
16ビットCRCは、データの最後まで制御バイトからバイトで計算されます。標準CRCCCITT(g(x)= x16 + x12 + x5 + 1)は0xffffに初期化されます。最も重要なバイトは、最も有意なバイト(ビッグエンディアンモード)に先行します。
2.5。バイトスタッピング
UG101のセクション4.2で説明されているように、特別な目的で使用されるバイト値がいくつかあります。これらの値は、次の表にあります。
これらの値がフレームに表示されると、データに対して特別な処理が行われます。 - 予約されたバイトの前にエスケープバイト0x7dを挿入します - その予約されたバイトのBIT5を逆にします
以下は、このアルゴリズムの例です。
2.6。エンドフラグを追加します
最後のステップは、フレームの最後にエンドフラグ0x7Eを追加することです。その後、データはUARTポートに送信できます。
3。デフレーミングプロセス
UARTからデータが受信されたら、それをデコードするための逆の手順を実行する必要があります。
4。参照
投稿時間:2月-08-2022