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

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

1. บทนำ

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

Silicon Labs ยังได้จัดทำโครงการตัวอย่างสำหรับโปรแกรมโฮสต์ ซึ่งเป็นตัวอย่างZ3GatewayHostตัวอย่างนี้ทำงานบนระบบที่คล้ายกับ 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|UG100|

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

|3|เพิ่มไบต์ควบคุม|บทที่ 2 และบทที่ 3 ของ UG101|

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

|5|การยัดไบต์|ส่วนที่ 4.2 ของ UG101|

|6|เพิ่มธงสิ้นสุด|ส่วนที่ 2.4 ของ UG101|

2.1. กรอกกรอบ EZSP

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

4

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

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

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

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

5

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

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

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

ด้านล่างนี้เป็นอัลกอริทึมในการสร้างลำดับแบบสุ่มเทียม

  • rand0 = 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

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

2.5 การยัดไบต์

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

7

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

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

8

2.6. เพิ่มแฟล็กสิ้นสุด

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

3. กระบวนการถอดกรอบ

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

4. การอ้างอิง


เวลาโพสต์: 08 ก.พ. 2565
แชทออนไลน์ WhatsApp!