Yazar:TorchIoTBootCamp
Bağlantı: https://zhuanlan.zhihu.com/p/339700391
Gönderen:Quora
1. Giriş
Silicon Labs, Zigbee ağ geçidi tasarımı için bir ana bilgisayar+NCP çözümü sundu. Bu mimaride ana bilgisayar, NCP ile UART veya SPI arayüzü aracılığıyla iletişim kurabilir. En yaygın olarak UART, SPI'den çok daha basit olduğu için kullanılır.
Silicon Labs ayrıca ana bilgisayar programı için örnek bir proje de sağladı.Z3Ağ Geçidi Ana Bilgisayarı
. Örnek Unix benzeri bir sistemde çalışır. Bazı müşteriler RTOS üzerinde çalışabilen bir ana bilgisayar örneği isteyebilir ancak ne yazık ki şu an için RTOS tabanlı bir ana bilgisayar örneği mevcut değildir. Kullanıcıların RTOS'a dayalı olarak kendi ana bilgisayar programlarını geliştirmeleri gerekir.
Özelleştirilmiş bir ana bilgisayar programı geliştirmeden önce UART ağ geçidi protokolünü anlamak önemlidir. Hem UART tabanlı NCP hem de SPI tabanlı NCP için ana bilgisayar, NCP ile iletişim kurmak için EZSP protokolünü kullanır.EZSPiçin kısaEmberZnet Seri Protokolü, ve içinde tanımlanırUG100. UART tabanlı NCP için, EZSP verilerini UART üzerinden güvenilir bir şekilde taşımak için daha düşük bir katman protokolü uygulanır.KÜLprotokol, kısaltmasıAsenkron Seri Ana Bilgisayar. ASH hakkında daha fazla ayrıntı için lütfen bkz.UG101VeUG115.
EZSP ve ASH arasındaki ilişki aşağıdaki diyagramla gösterilebilir:
EZSP ve ASH protokolünün veri formatı aşağıdaki diyagramla gösterilebilir:
Bu sayfada UART verilerinin çerçeveleme işlemini ve Zigbee ağ geçidinde sıklıkla kullanılan bazı anahtar çerçeveleri tanıtacağız.
2. Çerçeveleme
Genel çerçeveleme süreci aşağıdaki şemada gösterilebilir:
Bu grafikte veriler EZSP çerçevesini ifade etmektedir. Genel olarak çerçeveleme süreçleri şunlardır: |Hayır|Adım|Referans|
|:-|:-|:-|
|1|EZSP Çerçevesini Doldurun|UG100|
|2|Veri Rastgeleleştirme|UG101 Bölüm 4.3|
|3|UG101'in Kontrol Baytını Ekle|Bölüm2 ve Bölüm3|
|4|CRC'yi hesaplayın|UG101 Bölüm 2.3|
|5|Bayt Doldurma|UG101 Bölüm 4.2|
|6|Bitiş Bayrağını Ekle|UG101 Bölüm 2.4|
2.1. EZSP Çerçevesini Doldurun
EZSP çerçeve formatı UG100'ün 3. Bölümünde gösterilmektedir.
SDK güncellendiğinde bu formatın değişebileceğini unutmayın. Format değiştiğinde ona yeni bir versiyon numarası vereceğiz. Bu yazı yazıldığında en son EZSP sürüm numarası 8'dir (EmberZnet 6.8).
EZSP çerçeve formatı farklı sürümler arasında farklı olabileceğinden, ana bilgisayar ve NCP'nin uyumlu olması zorunlu bir gereksinimdir.MUTLAKaynı EZSP sürümüyle çalışın. Aksi takdirde beklendiği gibi iletişim kuramazlar.
Bunu başarmak için, ana bilgisayar ile NCP arasındaki ilk komut version komutu olmalıdır. Başka bir deyişle, ana bilgisayarın başka herhangi bir iletişimden önce NCP'nin EZSP sürümünü alması gerekir. EZSP sürümü ana bilgisayar tarafının EZSP sürümünden farklıysa iletişimin iptal edilmesi gerekir.
Bunun ardındaki örtülü gereklilik, version komutunun formatınınASLA DEĞİŞMEYİN. EZSP sürüm komut formatı aşağıdaki gibidir:
https://zhuanlan.zhihu.com/p/339700391
Yani şarkı sözleri: Bir örnek:
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
2.2. Veri Rastgeleleştirmesi
Ayrıntılı randomizasyon süreci UG101'in 4.3 bölümünde açıklanmaktadır. EZSP çerçevesinin tamamı rastgele seçilecektir. Rastgeleleştirme, EZSP çerçevesini ve sözde rastgele diziyi dışlamak VEYA'ya yöneliktir.
Aşağıda sözde rastgele diziyi oluşturma algoritması verilmiştir.
- Rand0 = 0×42
- randi'nin 0 biti 0 ise, randi+1 = randi >> 1
- randi'nin 0 biti 1 ise, randi+1 = (randi >> 1) ^ 0xB8
2.3. Kontrol Baytını Ekle
Kontrol baytı bir baytlık veridir ve çerçevenin başlığına eklenmelidir. Format aşağıdaki tabloda gösterilmektedir:
Toplamda 6 çeşit kontrol baytı vardır. İlk üçü, DATA, ACK ve NAK dahil olmak üzere EZSP verilerine sahip ortak çerçeveler için kullanılır. Son üçü, RST, RSTACK ve ERROR dahil ortak EZSP verileri olmadan kullanılır.
RST, RSTACK ve ERROR formatı bölüm 3.1 ila 3.3'te açıklanmıştır.
2.4. CRC'yi hesaplayın
16 bitlik bir CRC, kontrol baytından verinin sonuna kadar olan baytlar üzerinden hesaplanır. Standart CRCCCITT (g(x) = x16 + x12 + x5 + 1) 0xFFFF olarak başlatılır. En anlamlı bayt, en az anlamlı bayttan önce gelir (big-endian modu).
2.5. Bayt Doldurma
UG101'in 4.2 bölümünde açıklandığı gibi, özel amaçlarla kullanılan bazı ayrılmış bayt değerleri vardır. Bu değerler aşağıdaki tabloda bulunabilir:
Bu değerler çerçevede göründüğünde verilere özel bir işlem yapılacaktır. – Çıkış baytı 0x7D'yi ayrılmış baytın önüne ekleyin – Bu ayrılmış baytın bit5'ini ters çevirin
Aşağıda bu algoritmanın bazı örnekleri verilmiştir:
2.6. Bitiş Bayrağını Ekle
Son adım, çerçevenin sonuna 0x7E bitiş bayrağını eklemektir. Bundan sonra veriler UART portuna gönderilebilir.
3. Çerçeveden Çıkarma Süreci
UART'tan veri alındığında, kodu çözmek için ters adımları uygulamamız yeterlidir.
4. Referanslar
Gönderim zamanı: Şubat-08-2022