เกี่ยวกับ 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และยูจี115.

ความสัมพันธ์ระหว่าง 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!