ผู้แต่ง: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 สามารถแสดงได้ด้วยแผนภาพต่อไปนี้:
รูปแบบข้อมูลของ EZSP และโปรโตคอล ASH สามารถแสดงได้ด้วยแผนภาพต่อไปนี้:
ในหน้านี้ เราจะแนะนำกระบวนการจัดเฟรมข้อมูล UART และคีย์เฟรมบางส่วนซึ่งมักใช้ในเกตเวย์ Zigbee
2. การทำกรอบ
กระบวนการจัดเฟรมทั่วไปสามารถแสดงได้ด้วยแผนภูมิต่อไปนี้:
ในแผนภูมินี้ ข้อมูลหมายถึงเฟรม 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
โปรดทราบว่ารูปแบบนี้อาจเปลี่ยนแปลงได้เมื่ออัปเกรด SDK เมื่อรูปแบบเปลี่ยนแปลง เราจะให้หมายเลขเวอร์ชันใหม่แก่มัน หมายเลขเวอร์ชัน EZSP ล่าสุดคือ 8 เมื่อมีการเขียนบทความนี้ (EmberZnet 6.8)
เนื่องจากรูปแบบเฟรม EZSP อาจแตกต่างกันระหว่างเวอร์ชันต่างๆ จึงมีข้อกำหนดบังคับที่โฮสต์และ NCPต้องทำงานร่วมกับ EZSP เวอร์ชันเดียวกัน มิฉะนั้นจะไม่สามารถสื่อสารได้ตามที่คาดไว้
เพื่อให้บรรลุเป้าหมายดังกล่าว คำสั่งแรกระหว่างโฮสต์และ NCP ต้องเป็นคำสั่งเวอร์ชัน กล่าวอีกนัยหนึ่ง โฮสต์จะต้องดึงข้อมูล NCP เวอร์ชัน EZSP ก่อนการสื่อสารอื่นใด หากเวอร์ชัน EZSP แตกต่างกับเวอร์ชัน EZSP ของฝั่งโฮสต์ การสื่อสารจะต้องถูกยกเลิก
ข้อกำหนดโดยนัยเบื้องหลังคือรูปแบบของคำสั่ง version สามารถทำได้ไม่เคยเปลี่ยนแปลง- รูปแบบคำสั่งเวอร์ชัน EZSP มีลักษณะดังนี้:
链接: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 ชนิด สามรายการแรกใช้สำหรับเฟรมทั่วไปที่มีข้อมูล 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 มีค่าไบต์ที่สงวนไว้บางส่วนที่ใช้เพื่อวัตถุประสงค์พิเศษ ค่าเหล่านี้สามารถพบได้ในตารางต่อไปนี้:
เมื่อค่าเหล่านี้ปรากฏในเฟรม จะมีการดูแลข้อมูลเป็นพิเศษ – ใส่ Escape byte 0x7D หน้าไบต์ที่สงวนไว้ – ย้อนกลับบิต 5 ของไบต์ที่สงวนไว้นั้น
ด้านล่างนี้คือตัวอย่างบางส่วนของอัลกอริทึมนี้:
2.6. เพิ่มธงสิ้นสุด
ขั้นตอนสุดท้ายคือการเพิ่มแฟล็กสิ้นสุด 0x7E ที่ส่วนท้ายของเฟรม หลังจากนั้นสามารถส่งข้อมูลไปที่พอร์ต UART ได้
3. กระบวนการดีเฟรม
เมื่อได้รับข้อมูลจาก UART เราเพียงแค่ต้องทำตามขั้นตอนย้อนกลับเพื่อถอดรหัส
4. ข้อมูลอ้างอิง
เวลาโพสต์: Feb-08-2022