Zigbee EZSP UART-ის შესახებ

ავტორი: TorchIoTBootCamp
ლინკი: https://zhuanlan.zhihu.com/p/339700391
გამომგზავნი: Quora

1. შესავალი

Silicon Labs-მა Zigbee კარიბჭის დიზაინისთვის შესთავაზა host+NCP გადაწყვეტა. ამ არქიტექტურაში, მასპინძლს შეუძლია NCP-თან კომუნიკაცია UART ან SPI ინტერფეისის საშუალებით. ყველაზე ხშირად გამოიყენება UART, რადგან ის SPI-ზე ბევრად მარტივია.

Silicon Labs-მა ასევე წარმოადგინა მასპინძელი პროგრამისთვის ნიმუშის პროექტი, რომელიც წარმოადგენს ნიმუშს.Z3GatewayHostნიმუში მუშაობს Unix-ის მსგავს სისტემაზე. ზოგიერთ მომხმარებელს შეიძლება სურდეს ჰოსტის ნიმუში, რომელიც RTOS-ზე იმუშავებს, მაგრამ სამწუხაროდ, ამ ეტაპზე RTOS-ზე დაფუძნებული ჰოსტის ნიმუში არ არსებობს. მომხმარებლებს RTOS-ზე დაფუძნებული საკუთარი ჰოსტის პროგრამის შემუშავება უწევთ.

მნიშვნელოვანია UART კარიბჭის პროტოკოლის გაგება მორგებული ჰოსტის პროგრამის შემუშავებამდე. როგორც UART-ზე დაფუძნებული NCP-ისთვის, ასევე SPI-ზე დაფუძნებული NCP-ისთვის, ჰოსტი იყენებს EZSP პროტოკოლს NCP-თან კომუნიკაციისთვის.EZSPარის შემოკლებულიEmberZnet სერიული პროტოკოლი, და ის განსაზღვრულიაUG100UART-ზე დაფუძნებული NCP-ისთვის, EZSP მონაცემების UART-ის საშუალებით საიმედოდ გადასატანად დანერგილია ქვედა ფენის პროტოკოლი, რაცნაცარიპროტოკოლი, შემოკლებულიასინქრონული სერიული მასპინძელიASH-ის შესახებ დამატებითი ინფორმაციისთვის იხილეთUG101დაUG115.

EZSP-სა და ASH-ს შორის ურთიერთკავშირის ილუსტრირება შესაძლებელია შემდეგი დიაგრამით:

1

EZSP-ისა და ASH პროტოკოლის მონაცემთა ფორმატის ილუსტრირება შესაძლებელია შემდეგი დიაგრამით:

2

ამ გვერდზე ჩვენ წარმოგიდგენთ UART მონაცემების ჩარჩოების შექმნის პროცესს და რამდენიმე საკვანძო ჩარჩოს, რომლებიც ხშირად გამოიყენება Zigbee-ს კარიბჭეში.

2. ჩარჩოების შექმნა

ჩარჩოს შექმნის ზოგადი პროცესი შეიძლება ილუსტრირებული იყოს შემდეგი დიაგრამით:

3

ამ დიაგრამაში მონაცემები EZSP ჩარჩოს ნიშნავს. ზოგადად, ჩარჩოების შექმნის პროცესებია: |არა|ნაბიჯი|მითითება|

|:-|:-|:-|

|1|EZSP ჩარჩოს შევსება|UG100|

|2|მონაცემთა რანდომიზაცია|UG101-ის 4.3-ე ნაწილი|

|3|UG101-ის საკონტროლო ბაიტის დამატება|თავი2 და თავი3|

|4|გამოთვალეთ CRC|UG101-ის 2.3-ე მუხლი|

|5|ბაიტის შევსება|UG101-ის მე-4.2 მუხლი|

|6|დაამატეთ დასასრული დროშა|UG101-ის 2.4-ე ნაწილი|

2.1. EZSP ჩარჩოს შევსება

EZSP ჩარჩოს ფორმატი ილუსტრირებულია UG100-ის მე-3 თავში.

4

გაითვალისწინეთ, რომ ეს ფორმატი შეიძლება შეიცვალოს SDK-ის განახლებისას. ფორმატის შეცვლისას მას ახალ ვერსიის ნომერს მივცემთ. ამ სტატიის დაწერის დროს EZSP-ის უახლესი ვერსიის ნომერია 8 (EmberZnet 6.8).

რადგან EZSP ჩარჩოს ფორმატი შეიძლება განსხვავდებოდეს სხვადასხვა ვერსიაში, არსებობს სავალდებულო მოთხოვნა, რომ მასპინძელი და NCPაუცილებელიამუშაობენ იმავე EZSP ვერსიასთან. წინააღმდეგ შემთხვევაში, მათ მოსალოდნელი კომუნიკაცია არ შეეძლებათ.

ამის მისაღწევად, ჰოსტსა და NCP-ს შორის პირველი ბრძანება უნდა იყოს version ბრძანება. სხვა სიტყვებით რომ ვთქვათ, ჰოსტმა ნებისმიერი სხვა კომუნიკაციის დაწყებამდე უნდა მოიძიოს NCP-ის EZSP ვერსია. თუ EZSP ვერსია განსხვავდება ჰოსტის მხარის EZSP ვერსიისგან, კომუნიკაცია უნდა შეწყდეს.

ამის იმპლიციტური მოთხოვნა ის არის, რომ ვერსიის ბრძანების ფორმატს შეუძლიაარასდროს შეცვალოEZSP ვერსიის ბრძანების ფორმატი ქვემოთაა მოცემული:

5

პარამეტრის ველისა და ვერსიის პასუხის ფორმატის ახსნა შეგიძლიათ UG100-ის მე-4 თავში. პარამეტრის ველი წარმოადგენს მასპინძელი პროგრამის EZSP ვერსიას. ამ სტატიის დაწერის დროს ის 8-ია.
7
სახელი: TorchIoTBootCamp
链接:https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有.

2.2. მონაცემთა რანდომიზაცია

დეტალური რანდომიზაციის პროცესი აღწერილია UG101-ის 4.3 ნაწილში. მთელი EZSP ჩარჩო რანდომიზებული იქნება. რანდომიზაცია ხდება EZSP ჩარჩოს და ფსევდოშემთხვევითი თანმიმდევრობის გამორიცხვით ან გამორიცხვით.

ქვემოთ მოცემულია ფსევდოშემთხვევითი თანმიმდევრობის გენერირების ალგორითმი.

  • rand0 = 0×42
  • თუ randi-ს 0 ბიტი 0-ია, randi+1 = randi >> 1
  • თუ randi-ს 0 ბიტი 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-ის გამოთვლა

16-ბიტიანი CRC გამოითვლება ბაიტებზე საკონტროლო ბაიტიდან მონაცემთა ბოლომდე. სტანდარტული CRCCCITT (g(x) = x16 + x12 + x5 + 1) ინიციალიზებულია 0xFFFF-ად. ყველაზე მნიშვნელოვანი ბაიტი უსწრებს ყველაზე ნაკლებად მნიშვნელოვან ბაიტს (big-endian რეჟიმი).

2.5. ბაიტების შევსება

როგორც აღწერილია UG101-ის 4.2 ნაწილში, არსებობს გარკვეული რეზერვირებული ბაიტური მნიშვნელობები, რომლებიც გამოიყენება სპეციალური მიზნებისთვის. ეს მნიშვნელობები შეგიძლიათ იხილოთ შემდეგ ცხრილში:

7

როდესაც ეს მნიშვნელობები გამოჩნდება ჩარჩოში, მონაცემებს განსაკუთრებული დამუშავება ჩაუტარდებათ. – დაჯავშნილი ბაიტის წინ ჩასვით escape ბაიტი 0x7D – შეცვალეთ ამ დაჯავშნილი ბაიტის მე-5 ბიტი.

ქვემოთ მოცემულია ამ ალგორითმის რამდენიმე მაგალითი:

8

2.6. დაამატეთ დასრულების დროშა

საბოლოო ნაბიჯი არის 0x7E საბოლოო დროშის დამატება ფრეიმის ბოლოს. ამის შემდეგ, მონაცემების გაგზავნა შესაძლებელია UART პორტში.

3. ჩარჩოების დე-ჩარჩოების პროცესი

როდესაც მონაცემები UART-დან მიიღება, მისი გაშიფვრისთვის მხოლოდ საპირისპირო ნაბიჯების შესრულებაა საჭირო.

4. ცნობები


გამოქვეყნების დრო: 2022 წლის 8 თებერვალი
WhatsApp-ის ონლაინ ჩატი!