ผู้แต่ง: Torchiotbootcamp
ลิงค์: https: //zhuanlan.zhihu.com/p/339700391
จาก: Quora
1. บทนำ
Silicon Labs เสนอโซลูชัน Host+NCP สำหรับการออกแบบเกตเวย์ Zigbee ในสถาปัตยกรรมนี้โฮสต์สามารถสื่อสารกับ NCP ผ่านอินเตอร์เฟส UART หรือ SPI โดยทั่วไปแล้ว UART จะถูกใช้เพราะง่ายกว่า SPI มาก
Silicon Labs ยังจัดทำโครงการตัวอย่างสำหรับโปรแกรมโฮสต์ซึ่งเป็นตัวอย่างz3gatewayhost
- ตัวอย่างทำงานบนระบบที่มีลักษณะเหมือน Unix ลูกค้าบางคนอาจต้องการตัวอย่างโฮสต์ที่สามารถทำงานบน RTOs แต่น่าเสียดายที่ไม่มีตัวอย่างโฮสต์ที่ใช้ RTOS ในขณะนี้ ผู้ใช้จำเป็นต้องพัฒนาโปรแกรมโฮสต์ของตัวเองตาม RTOS
สิ่งสำคัญคือต้องเข้าใจโปรโตคอล UART Gateway ก่อนที่จะพัฒนาโปรแกรมโฮสต์ที่กำหนดเอง สำหรับ NCP ที่ใช้ NCP และ SPI ทั้ง URART โฮสต์ใช้โปรโตคอล EZSP เพื่อสื่อสารกับ NCPEZSPสั้นสำหรับโปรโตคอลอนุกรม Emberznetและมันถูกกำหนดไว้ในUG100- สำหรับ NCP ที่ใช้ UART โปรโตคอลเลเยอร์ที่ต่ำกว่าจะถูกนำมาใช้เพื่อนำข้อมูล EZSP ไว้อย่างน่าเชื่อถือผ่าน UART นั่นคือเถ้าโปรโตคอลสั้นสำหรับโฮสต์อนุกรม- สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับ Ash โปรดดูUG101และUG115.
ความสัมพันธ์ระหว่าง EZSP และ Ash สามารถแสดงได้โดยแผนภาพต่อไปนี้:
รูปแบบข้อมูลของ EZSP และโปรโตคอล Ash สามารถแสดงได้โดยแผนภาพต่อไปนี้:
ในหน้านี้เราจะแนะนำกระบวนการกำหนดกรอบข้อมูล UART และเฟรมสำคัญบางส่วนที่ใช้บ่อยใน Zigbee Gateway
2. การวางกรอบ
กระบวนการจัดเฟรมทั่วไปสามารถแสดงโดยแผนภูมิต่อไปนี้:
ในแผนภูมินี้ข้อมูลหมายถึงเฟรม EZSP โดยทั่วไปกระบวนการกำหนดกรอบคือ: | ไม่ | ขั้นตอน | อ้างอิง |
-
| 1 | เติมเฟรม EZSP | UG100 |
| 2 | การสุ่มข้อมูล | ส่วน 4.3 ของ UG101 |
| 3 | เพิ่มไบต์ควบคุม | Chap2 และ Chap3 ของ UG101 |
| 4 | คำนวณ CRC | มาตรา 2.3 ของ UG101 |
| 5 | ไบต์การบรรจุ | ส่วน 4.2 ของ UG101 |
| 6 | เพิ่มธงท้าย | ส่วนที่ 2.4 ของ UG101 |
2.1. เติมเฟรม EZSP
รูปแบบเฟรม EZSP แสดงใน Chap 3 ของ UG100
ให้ความสนใจว่ารูปแบบนี้อาจเปลี่ยนแปลงได้เมื่อการอัพเกรด SDK เมื่อรูปแบบเปลี่ยนแปลงเราจะให้หมายเลขเวอร์ชันใหม่ หมายเลขรุ่น EZSP ล่าสุดคือ 8 เมื่อบทความนี้เขียน (Emberznet 6.8)
เนื่องจากรูปแบบเฟรม EZSP อาจแตกต่างกันระหว่างรุ่นที่แตกต่างกันจึงมีข้อกำหนดที่จำเป็นสำหรับโฮสต์และ NCPต้องทำงานกับรุ่น EZSP เดียวกัน มิฉะนั้นพวกเขาไม่สามารถสื่อสารได้ตามที่คาดหวัง
เพื่อให้บรรลุสิ่งนั้นคำสั่งแรกระหว่างโฮสต์และ NCP จะต้องเป็นคำสั่งเวอร์ชัน กล่าวอีกนัยหนึ่งโฮสต์จะต้องย้อนกลับรุ่น EZSP ของ NCP ก่อนการสื่อสารอื่น ๆ หากเวอร์ชัน EZSP แตกต่างจากรุ่น EZSP ของ Host Side การสื่อสารจะต้องถูกยกเลิก
ข้อกำหนดโดยนัยที่อยู่เบื้องหลังนี้คือรูปแบบของคำสั่งเวอร์ชันสามารถทำได้อย่าเปลี่ยน- รูปแบบคำสั่ง EZSP เวอร์ชันเป็นเหมือนด้านล่าง:
链接: 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 ชนิด สามตัวแรกใช้สำหรับเฟรมทั่วไปที่มีข้อมูล EZSP รวมถึงข้อมูล ACK และ NAK สามสุดท้ายใช้โดยไม่มีข้อมูล EZSP ทั่วไปรวมถึง RST, RSTACK และข้อผิดพลาด
รูปแบบของ rst, rstack และข้อผิดพลาดอธิบายไว้ในส่วน 3.1 ถึง 3.3
2.4. คำนวณ CRC
CRC 16 บิตคำนวณจากไบต์จากไบต์ควบคุมจนถึงสิ้นสุดข้อมูล CRCCCITT มาตรฐาน (G (x) = x16 + x12 + x5 + 1) จะเริ่มต้นเป็น 0xffff ไบต์ที่สำคัญที่สุดนำหน้าไบต์ที่สำคัญน้อยที่สุด (โหมดใหญ่-เอดิน)
2.5. การบรรจุไบต์
ตามที่อธิบายไว้ในส่วน 4.2 ของ UG101 มีค่าไบต์ที่สงวนไว้บางส่วนที่ใช้เพื่อวัตถุประสงค์พิเศษ ค่าเหล่านี้สามารถพบได้ในตารางต่อไปนี้:
เมื่อค่าเหล่านี้ปรากฏในเฟรมการรักษาพิเศษจะทำกับข้อมูล - แทรก The Escape Byte 0x7d ด้านหน้าไบต์ที่สงวนไว้ - ย้อนกลับ Bit5 ของไบต์ที่สงวนไว้
ด้านล่างนี้เป็นตัวอย่างของอัลกอริทึมนี้:
2.6. เพิ่มธงท้าย
ขั้นตอนสุดท้ายคือการเพิ่มธงปลาย 0x7e ไปที่ส่วนท้ายของเฟรม หลังจากนั้นข้อมูลสามารถส่งไปยังพอร์ต UART
3. กระบวนการ de-framing
เมื่อได้รับข้อมูลจาก UART เราเพียงแค่ต้องทำตามขั้นตอนย้อนกลับเพื่อถอดรหัส
4. ข้อมูลอ้างอิง
เวลาโพสต์: ก.พ. -08-2022