ავტორი: 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 კარიბჭის პროტოკოლი, სანამ შეიმუშავებთ მორგებული მასპინძლის პროგრამას.როგორც UART-ზე დაფუძნებული NCP-ისთვის, ასევე SPI-ზე დაფუძნებული NCP-სთვის, ჰოსტი იყენებს EZSP პროტოკოლს NCP-თან კომუნიკაციისთვის.EZSPმოკლეაEmberZnet სერიული პროტოკოლი, და იგი განისაზღვრებაUG100.UART-ზე დაფუძნებული NCP-სთვის, ქვედა ფენის პროტოკოლი დანერგილია EZSP მონაცემების საიმედოდ გადასატანად UART-ზე, ეს არისნაცარიპროტოკოლი, მოკლედასინქრონული სერიული ჰოსტი.ASH-ის შესახებ დამატებითი ინფორმაციისთვის, გთხოვთ, იხილოთUG101დაUG115.
EZSP-სა და ASH-ს შორის ურთიერთობა შეიძლება ილუსტრირებული იყოს შემდეგი დიაგრამით:
EZSP და ASH პროტოკოლის მონაცემთა ფორმატი შეიძლება ილუსტრირებული იყოს შემდეგი დიაგრამით:
ამ გვერდზე ჩვენ წარმოგიდგენთ UART მონაცემების და ზოგიერთი ძირითადი ჩარჩოს ჩარჩოების პროცესს, რომლებიც ხშირად გამოიყენება Zigbee gateway-ში.
2. ჩარჩო
ჩარჩოების ზოგადი პროცესი შეიძლება ილუსტრირებული იყოს შემდეგი სქემით:
ამ სქემაში მონაცემები ნიშნავს EZSP ჩარჩოს.ზოგადად, ფრეიმინგის პროცესებია: |არა|საფეხური|მინიშნება|
|:-|:-|:-|
|1|შეავსეთ EZSP ჩარჩო|UG100|
|2|მონაცემთა რანდომიზაცია|UG101-ის 4.3 განყოფილება|
|3|დაამატე საკონტროლო ბაიტი|თავი2 და თავი3 UG101|
|4|გამოთვალეთ CRC|UG101-ის 2.3 განყოფილება|
|5|ბაიტი ჩაყრა|UG101-ის 4.2|
|6|დაამატე ბოლო დროშა|UG101-ის 2.4 სექცია|
2.1.შეავსეთ EZSP ჩარჩო
EZSP ჩარჩოს ფორმატი ილუსტრირებულია UG100-ის მე-3 თავში.
ყურადღება მიაქციეთ, რომ ეს ფორმატი შეიძლება შეიცვალოს SDK-ის განახლებისას.როდესაც ფორმატი შეიცვლება, ჩვენ მივცემთ მას ახალი ვერსიის ნომერს.EZSP-ის უახლესი ვერსიის ნომერია 8, როდესაც ეს სტატია იწერება (EmberZnet 6.8).
ვინაიდან EZSP ჩარჩოს ფორმატი შეიძლება განსხვავდებოდეს სხვადასხვა ვერსიებს შორის, არსებობს სავალდებულო მოთხოვნა, რომ ჰოსტი და NCPᲣᲜᲓᲐიმუშავეთ იგივე EZSP ვერსიით.წინააღმდეგ შემთხვევაში, მათ არ შეუძლიათ კომუნიკაცია ისე, როგორც მოსალოდნელია.
ამის მისაღწევად, ჰოსტსა და NCP-ს შორის პირველი ბრძანება უნდა იყოს ვერსიის ბრძანება.სხვა სიტყვებით რომ ვთქვათ, მასპინძელმა უნდა მოიძიოს NCP-ის EZSP ვერსია ნებისმიერი სხვა კომუნიკაციის წინ.თუ EZSP ვერსია განსხვავდება მასპინძელი მხარის EZSP ვერსიისგან, კომუნიკაცია უნდა შეწყდეს.
ამის უკან ნაგულისხმევი მოთხოვნა ის არის, რომ ვერსიის ბრძანების ფორმატმა შეიძლებაᲐᲠᲐᲡᲝᲓᲔᲡ ᲐᲠ ᲨᲔᲘᲪᲕᲚᲔᲑᲐ.EZSP ვერსიის ბრძანების ფორმატი შემდეგია:
链接:https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有.
2.2.მონაცემთა რანდომიზაცია
დეტალური რანდომიზაციის პროცესი აღწერილია UG101-ის 4.3 ნაწილში.მთელი EZSP ჩარჩო იქნება რანდომიზებული.რანდომიზაცია არის ექსკლუზიური ან EZSP ჩარჩო და ფსევდო შემთხვევითი თანმიმდევრობა.
ქვემოთ მოცემულია ფსევდო შემთხვევითი მიმდევრობის გენერირების ალგორითმი.
- rand0 = 0×42
- თუ რანდის 0 ბიტი არის 0, რანდი+1 = რანდი >> 1
- თუ რანდის 0 ბიტი არის 1, რანდი+1 = (რანდი >> 1) ^ 0xB8
2.3.დაამატეთ საკონტროლო ბაიტი
საკონტროლო ბაიტი არის ერთი ბაიტის მონაცემი და უნდა დაემატოს ჩარჩოს თავში.ფორმატი ილუსტრირებულია ქვემოთ მოცემული ცხრილით:
სულ არის 6 სახის საკონტროლო ბაიტი.პირველი სამი გამოიყენება EZSP მონაცემებით საერთო ჩარჩოებისთვის, მათ შორის DATA, ACK და NAK.ბოლო სამი გამოიყენება EZSP-ის საერთო მონაცემების გარეშე, მათ შორის RST, RSTACK და ERROR.
RST, RSTACK და ERROR ფორმატი აღწერილია 3.1-დან 3.3-მდე.
2.4.გამოთვალეთ CRC
16-ბიტიანი CRC გამოითვლება ბაიტებზე საკონტროლო ბაიტიდან მონაცემების ბოლომდე.სტანდარტული CRCCCITT (g(x) = x16 + x12 + x5 + 1) ინიციალიზებულია 0xFFFF-მდე.ყველაზე მნიშვნელოვანი ბაიტი წინ უსწრებს ყველაზე ნაკლებად მნიშვნელოვან ბაიტს (დიდი-ენდიის რეჟიმი).
2.5.ბაიტის ჩაყრა
როგორც UG101-ის 4.2 განყოფილებაშია აღწერილი, არსებობს გარკვეული რეზერვირებული ბაიტის მნიშვნელობები, რომლებიც გამოიყენება სპეციალური მიზნებისთვის.ეს მნიშვნელობები შეგიძლიათ იხილოთ შემდეგ ცხრილში:
როდესაც ეს მნიშვნელობები გამოჩნდება ჩარჩოში, მონაცემთა სპეციალური დამუშავება მოხდება.– ჩადეთ გაქცევის ბაიტი 0x7D რეზერვირებული ბაიტის წინ – შეცვალეთ რეზერვირებული ბაიტის ბიტი5
ქვემოთ მოცემულია ამ ალგორითმის რამდენიმე მაგალითი:
2.6.დაამატეთ ბოლო დროშა
საბოლოო ნაბიჯი არის ბოლო დროშის 0x7E დამატება ჩარჩოს ბოლოს.ამის შემდეგ, მონაცემები შეიძლება გაიგზავნოს UART პორტში.
3. დე-ჩარჩოების პროცესი
როდესაც მონაცემები მიიღება UART-დან, ჩვენ უბრალოდ უნდა გავაკეთოთ საპირისპირო ნაბიჯები მის გაშიფვრისთვის.
4. ლიტერატურა
გამოქვეყნების დრო: თებ-08-2022