เกี่ยวกับ Zigbee EZSP UART

ผู้แต่ง:TorchIoTBootCamp
ลิงก์:https://zhuanlan.zhihu.com/p/339700391
จาก:โควรา

1. บทนำ

Silicon Labs ได้นำเสนอโซลูชันโฮสต์+NCP สำหรับการออกแบบเกตเวย์ Zigbeeในสถาปัตยกรรมนี้ โฮสต์สามารถสื่อสารกับ NCP ผ่านอินเทอร์เฟซ UART หรือ SPIโดยทั่วไปแล้ว UART จะถูกใช้เนื่องจากง่ายกว่า SPI มาก

Silicon Labs ยังได้จัดเตรียมโปรเจ็กต์ตัวอย่างสำหรับโปรแกรมโฮสต์ซึ่งก็คือตัวอย่างZ3เกตเวย์โฮสต์-ตัวอย่างทำงานบนระบบที่คล้าย Unixลูกค้าบางรายอาจต้องการตัวอย่างโฮสต์ที่สามารถทำงานบน RTOS ได้ แต่น่าเสียดายที่ยังไม่มีตัวอย่างโฮสต์ที่ใช้ RTOS ในขณะนี้ผู้ใช้จำเป็นต้องพัฒนาโปรแกรมโฮสต์ของตนเองโดยใช้ RTOS

สิ่งสำคัญคือต้องเข้าใจโปรโตคอลเกตเวย์ UART ก่อนที่จะพัฒนาโปรแกรมโฮสต์ที่ปรับแต่งเองสำหรับ NCP ที่ใช้ UART และ NCP ที่ใช้ SPI โฮสต์จะใช้โปรโตคอล EZSP เพื่อสื่อสารกับ NCPอีเอสเอสพีสั้นสำหรับEmberZnet โปรโตคอลแบบอนุกรมและกำหนดไว้ในยูจี100-สำหรับ NCP ที่ใช้ UART จะใช้โปรโตคอลชั้นล่างเพื่อส่งข้อมูล EZSP อย่างน่าเชื่อถือผ่าน UART นั่นคือเถ้าโปรโตคอล ย่อมาจากโฮสต์อนุกรมแบบอะซิงโครนัส-สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับ ASH โปรดดูที่ยูจี101และUG115.

ความสัมพันธ์ระหว่าง EZSP และ ASH สามารถแสดงได้ด้วยแผนภาพต่อไปนี้:

1

รูปแบบข้อมูลของ EZSP และโปรโตคอล ASH สามารถแสดงได้ด้วยแผนภาพต่อไปนี้:

2

ในหน้านี้ เราจะแนะนำกระบวนการจัดเฟรมข้อมูล UART และคีย์เฟรมบางส่วนซึ่งมักใช้ในเกตเวย์ Zigbee

2. การทำกรอบ

กระบวนการจัดเฟรมทั่วไปสามารถแสดงได้ด้วยแผนภูมิต่อไปนี้:

3

ในแผนภูมินี้ ข้อมูลหมายถึงเฟรม EZSPโดยทั่วไป กระบวนการเฟรมคือ: |ไม่ใช่|ขั้นตอน|ข้อมูลอ้างอิง|

-

|1|เติม EZSP Frame|UG100|

|2|การสุ่มข้อมูล|ส่วนที่ 4.3 ของ UG101|

|3|เพิ่ม Control Byte|Chap2 และ Chap3 ของ UG101|

|4|คำนวณ CRC|ส่วนที่ 2.3 ของ UG101|

|5|การเติมไบต์|ส่วนที่ 4.2 ของ UG101|

|6|เพิ่ม End Flag|ส่วนที่ 2.4 ของ UG101|

2.1.เติมเฟรม EZSP

รูปแบบเฟรม EZSP แสดงอยู่ในบทที่ 3 ของ UG100

4

โปรดทราบว่ารูปแบบนี้อาจเปลี่ยนแปลงได้เมื่ออัปเกรด SDKเมื่อรูปแบบเปลี่ยนแปลง เราจะให้หมายเลขเวอร์ชันใหม่แก่มันหมายเลขเวอร์ชัน EZSP ล่าสุดคือ 8 เมื่อมีการเขียนบทความนี้ (EmberZnet 6.8)

เนื่องจากรูปแบบเฟรม EZSP อาจแตกต่างกันระหว่างเวอร์ชันต่างๆ จึงมีข้อกำหนดบังคับที่โฮสต์และ NCPต้องทำงานร่วมกับ EZSP เวอร์ชันเดียวกันมิฉะนั้นจะไม่สามารถสื่อสารได้ตามที่คาดไว้

เพื่อให้บรรลุเป้าหมายดังกล่าว คำสั่งแรกระหว่างโฮสต์และ NCP ต้องเป็นคำสั่งเวอร์ชันกล่าวอีกนัยหนึ่ง โฮสต์จะต้องดึงข้อมูล NCP เวอร์ชัน EZSP ก่อนการสื่อสารอื่นใดหากเวอร์ชัน EZSP แตกต่างกับเวอร์ชัน EZSP ของฝั่งโฮสต์ การสื่อสารจะต้องถูกยกเลิก

ข้อกำหนดโดยนัยเบื้องหลังคือรูปแบบของคำสั่ง version สามารถทำได้ไม่เคยเปลี่ยน-รูปแบบคำสั่งเวอร์ชัน EZSP มีลักษณะดังนี้:

5

คำอธิบายฟิลด์พารามิเตอร์และรูปแบบของการตอบกลับเวอร์ชันสามารถพบได้ในบทที่ 4 ของ UG100ฟิลด์พารามิเตอร์คือเวอร์ชัน EZSP ของโปรแกรมโฮสต์เมื่อบทความนี้เขียนเป็นวันที่ 8
7
ที่มา:TorchIoTBootCamp
链接:https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2.2.การสุ่มข้อมูล

กระบวนการสุ่มโดยละเอียดอธิบายไว้ในส่วน 4.3 ของ UG101เฟรม EZSP ทั้งหมดจะถูกสุ่มการสุ่มเป็นแบบเอกสิทธิ์เฉพาะบุคคลหรือเฟรม EZSP และลำดับการสุ่มเทียม

ด้านล่างนี้คืออัลกอริทึมของการสร้างลำดับการสุ่มหลอก

  • แรนด์0 = 0×42
  • ถ้าบิต 0 ของ randi เป็น 0, randi+1 = randi >> 1
  • ถ้าบิต 0 ของ randi คือ 1, randi+1 = (randi >> 1) ^ 0xB8

2.3.เพิ่มไบต์ควบคุม

ไบต์ควบคุมเป็นข้อมูลหนึ่งไบต์ และควรเพิ่มไว้ที่ส่วนหัวของเฟรมรูปแบบมีภาพประกอบตามตารางด้านล่าง:

6

มีไบต์ควบคุมทั้งหมด 6 ชนิดสามรายการแรกใช้สำหรับเฟรมทั่วไปที่มีข้อมูล EZSP รวมถึง DATA, ACK และ NAKสามรายการสุดท้ายถูกใช้โดยไม่มีข้อมูล EZSP ทั่วไป รวมถึง RST, RSTACK และ ERROR

รูปแบบของ RST, RSTACK และ ERROR อธิบายไว้ในส่วน 3.1 ถึง 3.3

2.4.คำนวณซีอาร์ซี

CRC 16 บิตคำนวณเป็นไบต์จากไบต์ควบคุมจนถึงจุดสิ้นสุดของข้อมูลCRCCCITT มาตรฐาน (g(x) = x16 + x12 + x5 + 1) เริ่มต้นเป็น 0xFFFFไบต์ที่มีนัยสำคัญที่สุดอยู่หน้าไบต์ที่มีนัยสำคัญน้อยที่สุด (โหมด big-endian)

2.5.การบรรจุไบต์

ตามที่อธิบายไว้ในส่วน 4.2 ของ UG101 มีค่าไบต์ที่สงวนไว้บางส่วนที่ใช้เพื่อวัตถุประสงค์พิเศษค่าเหล่านี้สามารถพบได้ในตารางต่อไปนี้:

7

เมื่อค่าเหล่านี้ปรากฏในเฟรม จะมีการดูแลข้อมูลเป็นพิเศษ– ใส่ Escape byte 0x7D หน้าไบต์ที่สงวนไว้ – ย้อนกลับบิต 5 ของไบต์ที่สงวนไว้นั้น

ด้านล่างนี้คือตัวอย่างบางส่วนของอัลกอริทึมนี้:

8

2.6.เพิ่มธงสิ้นสุด

ขั้นตอนสุดท้ายคือการเพิ่มแฟล็กสิ้นสุด 0x7E ที่ส่วนท้ายของเฟรมหลังจากนั้นสามารถส่งข้อมูลไปที่พอร์ต UART ได้

3. กระบวนการดีเฟรม

เมื่อได้รับข้อมูลจาก UART เราเพียงแค่ต้องทำตามขั้นตอนย้อนกลับเพื่อถอดรหัส

4. ข้อมูลอ้างอิง


เวลาโพสต์: Feb-08-2022
แชทออนไลน์ WhatsApp!