ผู้เขียน: TorchIoTBootCamp
ลิงก์:https://zhuanlan.zhihu.com/p/339700391
จาก: Quora
1. บทนำ
Silicon Labs ได้นำเสนอโซลูชัน host+NCP สำหรับการออกแบบเกตเวย์ Zigbee ในสถาปัตยกรรมนี้ โฮสต์สามารถสื่อสารกับ NCP ผ่านอินเทอร์เฟซ UART หรือ SPI โดยทั่วไปแล้วจะใช้ UART เนื่องจากมีความเรียบง่ายกว่า SPI มาก
Silicon Labs ได้จัดเตรียมโปรเจ็กต์ตัวอย่างสำหรับโปรแกรมหลัก ซึ่งก็คือตัวอย่างนั้นเองZ3เกตเวย์โฮสต์ตัวอย่างนี้ทำงานบนระบบที่คล้าย Unix ลูกค้าบางรายอาจต้องการตัวอย่างโปรแกรมโฮสต์ที่สามารถทำงานบนระบบปฏิบัติการแบบเรียลไทม์ (RTOS) ได้ แต่ในขณะนี้ยังไม่มีตัวอย่างโปรแกรมโฮสต์ที่ใช้ RTOS ผู้ใช้จำเป็นต้องพัฒนาโปรแกรมโฮสต์ของตนเองโดยใช้ RTOS
สิ่งสำคัญคือต้องเข้าใจโปรโตคอลเกตเวย์ UART ก่อนที่จะพัฒนาโปรแกรมโฮสต์แบบกำหนดเอง สำหรับ NCP ทั้งแบบ UART และ SPI โฮสต์จะใช้โปรโตคอล EZSP ในการสื่อสารกับ NCPอีเอสพีเป็นคำย่อของโปรโตคอลอนุกรม EmberZnetและมันถูกกำหนดไว้ในยูจี100สำหรับ NCP ที่ใช้ UART นั้น จะมีการนำโปรโตคอลระดับล่างมาใช้เพื่อส่งข้อมูล EZSP อย่างน่าเชื่อถือผ่านทาง UART นั่นก็คือ...เถ้าโปรโตคอล ย่อมาจากโฮสต์อนุกรมแบบอะซิงโครนัสสำหรับรายละเอียดเพิ่มเติมเกี่ยวกับ ASH โปรดดูที่...ยูจี101และยูจี115.
ความสัมพันธ์ระหว่าง EZSP และ ASH สามารถแสดงได้ด้วยแผนภาพต่อไปนี้:
รูปแบบข้อมูลของโปรโตคอล EZSP และ ASH สามารถแสดงได้ด้วยแผนภาพต่อไปนี้:
ในหน้านี้ เราจะแนะนำกระบวนการจัดเฟรมข้อมูล UART และเฟรมสำคัญบางส่วนที่ใช้บ่อยในเกตเวย์ Zigbee
2. การจัดกรอบ
กระบวนการจัดทำกรอบโดยทั่วไปสามารถแสดงได้ด้วยแผนภูมิต่อไปนี้:
ในแผนภูมินี้ ข้อมูลหมายถึงเฟรม 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
โปรดทราบว่ารูปแบบนี้อาจเปลี่ยนแปลงได้เมื่อมีการอัปเกรด SDK เมื่อรูปแบบเปลี่ยนแปลง เราจะกำหนดหมายเลขเวอร์ชันใหม่ให้ หมายเลขเวอร์ชัน EZSP ล่าสุด ณ เวลาที่เขียนบทความนี้คือ 8 (EmberZnet 6.8)
เนื่องจากรูปแบบเฟรม EZSP อาจแตกต่างกันไปในแต่ละเวอร์ชัน จึงมีข้อกำหนดบังคับว่าโฮสต์และ NCP ต้องเป็นไปตามรูปแบบเฟรมดังกล่าวต้องต้องใช้งาน EZSP เวอร์ชันเดียวกัน มิเช่นนั้นจะไม่สามารถสื่อสารกันได้ตามที่คาดหวัง
เพื่อให้บรรลุเป้าหมายนั้น คำสั่งแรกระหว่างโฮสต์และ NCP ต้องเป็นคำสั่งเวอร์ชัน กล่าวคือ โฮสต์ต้องดึงเวอร์ชัน EZSP ของ NCP ก่อนที่จะมีการสื่อสารอื่นใด หากเวอร์ชัน EZSP แตกต่างจากเวอร์ชัน EZSP ฝั่งโฮสต์ การสื่อสารจะต้องถูกยกเลิก
ข้อกำหนดโดยนัยเบื้องหลังเรื่องนี้คือ รูปแบบของคำสั่งเวอร์ชันจะต้องเป็นไปตามเงื่อนไขที่กำหนดอย่าเปลี่ยนแปลงรูปแบบคำสั่งเวอร์ชัน EZSP มีดังต่อไปนี้:
链接:https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
2.2. การสุ่มข้อมูล
กระบวนการสุ่มอย่างละเอียดได้อธิบายไว้ในส่วนที่ 4.3 ของ UG101 เฟรม EZSP ทั้งหมดจะถูกสุ่ม การสุ่มนี้เป็นการนำเฟรม EZSP ไปทำการ Exclusive-OR กับลำดับสุ่มเทียม
ด้านล่างนี้คืออัลกอริทึมสำหรับการสร้างลำดับสุ่มเทียม
- rand0 = 0×42
- ถ้าบิตที่ 0 ของ randi เป็น 0, randi+1 = randi >> 1
- ถ้าบิตที่ 0 ของ randi เป็น 1, randi+1 = (randi >> 1) ^ 0xB8
2.3. เพิ่มไบต์ควบคุม
ไบต์ควบคุมเป็นข้อมูลขนาดหนึ่งไบต์ และควรเพิ่มเข้าไปที่ส่วนหัวของเฟรม รูปแบบแสดงไว้ในตารางด้านล่าง:
โดยรวมแล้ว มีไบต์ควบคุมอยู่ 6 ชนิด ชนิดแรก 3 ชนิดใช้สำหรับเฟรมทั่วไปที่มีข้อมูล EZSP ได้แก่ DATA, ACK และ NAK ส่วนชนิดหลัง 3 ชนิดใช้สำหรับเฟรมที่ไม่มีข้อมูล 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 มีค่าไบต์ที่สงวนไว้บางค่าที่ใช้เพื่อวัตถุประสงค์พิเศษ ค่าเหล่านี้สามารถพบได้ในตารางต่อไปนี้:
เมื่อค่าเหล่านี้ปรากฏในเฟรม ข้อมูลจะได้รับการประมวลผลเป็นพิเศษ – แทรกไบต์หลีกเลี่ยง 0x7D ไว้ข้างหน้าไบต์ที่สงวนไว้ – กลับบิตที่ 5 ของไบต์ที่สงวนไว้นั้น
ด้านล่างนี้คือตัวอย่างบางส่วนของอัลกอริธึมนี้:
2.6. เพิ่มแฟล็กสิ้นสุด
ขั้นตอนสุดท้ายคือการเพิ่มแฟล็กสิ้นสุด 0x7E ต่อท้ายเฟรม หลังจากนั้น ข้อมูลก็จะสามารถส่งไปยังพอร์ต UART ได้
3. กระบวนการถอดกรอบความคิด
เมื่อได้รับข้อมูลจาก UART แล้ว เราก็แค่ทำตามขั้นตอนย้อนกลับเพื่อถอดรหัสข้อมูลนั้น
4. เอกสารอ้างอิง
วันที่โพสต์: 8 กุมภาพันธ์ 2565








