អំពី Zigbee EZSP UART

អ្នកនិពន្ធ៖ TorchIoTBootCamp
តំណភ្ជាប់៖ https://zhuanlan.zhihu.com/p/339700391
ពី៖ កូរ៉ា

១. សេចក្តីផ្តើម

Silicon Labs បានផ្តល់ជូននូវដំណោះស្រាយ host+NCP សម្រាប់ការរចនាច្រកទ្វារ Zigbee។ នៅក្នុងស្ថាបត្យកម្មនេះ host អាចទំនាក់ទំនងជាមួយ NCP តាមរយៈចំណុចប្រទាក់ UART ឬ SPI។ ភាគច្រើន UART ត្រូវបានប្រើព្រោះវាសាមញ្ញជាង SPI។

Silicon Labs ក៏បានផ្តល់គម្រោងគំរូសម្រាប់កម្មវិធីម្ចាស់ផ្ទះផងដែរ ដែលជាគំរូម៉ាស៊ីនបម្រើច្រកទ្វារ Z3គំរូនេះដំណើរការលើប្រព័ន្ធដែលស្រដៀងនឹង Unix។ អតិថិជនមួយចំនួនប្រហែលជាចង់បានគំរូម៉ាស៊ីនដែលអាចដំណើរការលើ RTOS ប៉ុន្តែជាអកុសល មិនមានគំរូម៉ាស៊ីនដែលមានមូលដ្ឋានលើ RTOS សម្រាប់ពេលបច្ចុប្បន្នទេ។ អ្នកប្រើប្រាស់ត្រូវបង្កើតកម្មវិធីម៉ាស៊ីនផ្ទាល់ខ្លួនរបស់ពួកគេដោយផ្អែកលើ RTOS។

វាជារឿងសំខាន់ក្នុងការយល់ដឹងអំពីពិធីការច្រកទ្វារ UART មុនពេលបង្កើតកម្មវិធីម៉ាស៊ីនដែលប្ដូរតាមបំណង។ សម្រាប់ទាំង NCP ដែលមានមូលដ្ឋានលើ UART និង NCP ដែលមានមូលដ្ឋានលើ SPI ម៉ាស៊ីនប្រើពិធីការ EZSP ដើម្បីទំនាក់ទំនងជាមួយ NCP។អ៊ីហ្សភីអេសគឺខ្លីសម្រាប់ពិធីការស៊េរី EmberZnetហើយវាត្រូវបានកំណត់នៅក្នុងUG100សម្រាប់ NCP ដែលមានមូលដ្ឋានលើ UART ពិធីការស្រទាប់ខាងក្រោមត្រូវបានអនុវត្តដើម្បីផ្ទុកទិន្នន័យ EZSP ប្រកបដោយភាពជឿជាក់លើ UART នោះគឺផេះពិធីការ, អក្សរកាត់សម្រាប់ម៉ាស៊ីន​សៀរៀល​អសមកាលសម្រាប់ព័ត៌មានលម្អិតបន្ថែមអំពី ASH សូមមើលUG101និងUG115.

ទំនាក់ទំនងរវាង EZSP និង ASH អាចត្រូវបានបង្ហាញដោយដ្យាក្រាមខាងក្រោម៖

១

ទម្រង់ទិន្នន័យរបស់ EZSP និងពិធីការ ASH អាចត្រូវបានបង្ហាញដោយដ្យាក្រាមខាងក្រោម៖

២

នៅក្នុងទំព័រនេះ យើងនឹងណែនាំដំណើរការនៃការកំណត់ស៊ុមទិន្នន័យ UART និងស៊ុមគន្លឹះមួយចំនួនដែលត្រូវបានប្រើជាញឹកញាប់នៅក្នុងច្រកទ្វារ Zigbee។

២. ការដាក់ស៊ុម

ដំណើរការ​ស៊ុម​ទូទៅ​អាច​ត្រូវ​បាន​បង្ហាញ​ដោយ​តារាង​ខាងក្រោម៖

៣

នៅក្នុងតារាងនេះ ទិន្នន័យមានន័យថាស៊ុម EZSP។ ជាទូទៅ ដំណើរការស៊ុមគឺ៖ |ទេ|ជំហាន|ឯកសារយោង|

|:-|:-|:-|

|1|បំពេញស៊ុម EZSP|UG100|

|2|ការ​ធ្វើ​ឲ្យ​ទិន្នន័យ​ចៃដន្យ|ផ្នែកទី 4.3 នៃ UG101|

|៣|បន្ថែម​បៃ​ត្រួតពិនិត្យ|ជំពូកទី ២ និងជំពូកទី ៣ នៃ UG១០១|

|៤|គណនា CRC|ផ្នែកទី 2.3 នៃ UG101|

|៥|ការបំពេញបៃត៍|ផ្នែកទី ៤.២ នៃ UG១០១|

|៦|បន្ថែមទង់បញ្ចប់|ផ្នែកទី 2.4 នៃ UG101|

2.1. បំពេញស៊ុម EZSP

ទម្រង់​ស៊ុម EZSP ត្រូវ​បាន​បង្ហាញ​នៅ​ក្នុង​ជំពូក​ទី 3 នៃ UG100។

៤

សូមចំណាំថា ទម្រង់នេះអាចផ្លាស់ប្តូរនៅពេលដែល SDK ធ្វើឱ្យប្រសើរឡើង។ នៅពេលដែលទម្រង់ផ្លាស់ប្តូរ យើងនឹងផ្តល់លេខកំណែថ្មី។ លេខកំណែ EZSP ចុងក្រោយបំផុតគឺ 8 នៅពេលដែលអត្ថបទនេះត្រូវបានសរសេរ (EmberZnet 6.8)។

ដោយសារទម្រង់ស៊ុម EZSP អាចខុសគ្នារវាងកំណែផ្សេងៗគ្នា មានតម្រូវការចាំបាច់ដែលម៉ាស៊ីន និង NCPត្រូវតែធ្វើការជាមួយកំណែ EZSP ដូចគ្នា។ បើមិនដូច្នោះទេ ពួកគេមិនអាចទំនាក់ទំនងដូចការរំពឹងទុកបានទេ។

ដើម្បីសម្រេចបាននូវគោលដៅនោះ ពាក្យបញ្ជាដំបូងរវាងម៉ាស៊ីន និង NCP ត្រូវតែជាពាក្យបញ្ជាកំណែ។ ម្យ៉ាងវិញទៀត ម៉ាស៊ីនត្រូវតែទាញយកកំណែ EZSP របស់ NCP មកវិញ មុនពេលការទំនាក់ទំនងផ្សេងទៀត។ ប្រសិនបើកំណែ EZSP ខុសពីកំណែ EZSP របស់ម៉ាស៊ីន ការទំនាក់ទំនងត្រូវតែបញ្ឈប់។

តម្រូវការបង្កប់ន័យនៅពីក្រោយនេះគឺថា ទម្រង់នៃពាក្យបញ្ជាកំណែអាចកុំ​ផ្លាស់ប្ដូរទម្រង់​ពាក្យបញ្ជា​កំណែ EZSP មាន​ដូចខាងក្រោម៖

៥

ការពន្យល់អំពីវាលប៉ារ៉ាម៉ែត្រ និងទម្រង់នៃការឆ្លើយតបកំណែអាចរកបាននៅក្នុងជំពូកទី 4 នៃ UG100។ វាលប៉ារ៉ាម៉ែត្រគឺជាកំណែ EZSP នៃកម្មវិធីម៉ាស៊ីន។ នៅពេលដែលអត្ថបទនេះត្រូវបានសរសេរ វាគឺ 8។
៧
ប្រភព៖ TorchIoTBootCamp
ប្រភព៖ https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处។

២.២. ការ​ធ្វើ​ឲ្យ​ទិន្នន័យ​ចៃដន្យ

ដំណើរការចៃដន្យលម្អិតត្រូវបានពិពណ៌នានៅក្នុងផ្នែកទី 4.3 នៃ UG101។ ស៊ុម EZSP ទាំងមូលនឹងត្រូវបានចៃដន្យ។ ការចៃដន្យគឺដើម្បី exclusive-OR ស៊ុម EZSP និងលំដាប់ pseudo-random។

ខាងក្រោមនេះជាក្បួនដោះស្រាយសម្រាប់បង្កើតលំដាប់ចៃដន្យក្លែងក្លាយ។

  • រ៉ាន់ដ ០ = ០ × ៤២
  • ប្រសិនបើប៊ីត ០ នៃ randi គឺ ០ នោះ randi+១ = randi >> ១
  • ប្រសិនបើប៊ីត ០ របស់ randi គឺ ១ នោះ randi+១ = (randi >> ១) ^ ០xB៨

២.៣. បន្ថែមបៃត្រួតពិនិត្យ

បៃត្រួតពិនិត្យគឺជាទិន្នន័យមួយបៃ ហើយគួរតែត្រូវបានបន្ថែមទៅក្បាលនៃស៊ុម។ ទម្រង់ត្រូវបានបង្ហាញជាមួយតារាងខាងក្រោម៖

៦

សរុបមក មានបៃត្រួតពិនិត្យចំនួន ៦ ប្រភេទ។ បៃបីដំបូងត្រូវបានប្រើសម្រាប់ស៊ុមទូទៅដែលមានទិន្នន័យ EZSP រួមទាំង DATA, ACK និង NAK។ បៃបីចុងក្រោយត្រូវបានប្រើដោយគ្មានទិន្នន័យ EZSP ទូទៅ រួមទាំង RST, RSTACK និង ERROR។

ទម្រង់​នៃ RST, RSTACK និង ERROR ត្រូវ​បាន​ពិពណ៌នា​នៅ​ក្នុង​ផ្នែក 3.1 ដល់ 3.3។

២.៤. គណនា CRC

CRC ១៦ ប៊ីត ត្រូវបានគណនាលើបៃពីបៃត្រួតពិនិត្យរហូតដល់ចុងបញ្ចប់នៃទិន្នន័យ។ CRCCCITT ស្តង់ដារ (g(x) = x16 + x12 + x5 + 1) ត្រូវបានចាប់ផ្តើមទៅ 0xFFFF។ បៃសំខាន់បំផុតនាំមុខបៃដែលមិនសូវសំខាន់ (របៀប big-endian)។

២.៥. ការបំពេញបៃត៍

ដូចដែលបានពិពណ៌នានៅក្នុងផ្នែកទី 4.2 នៃ UG101 មានតម្លៃបៃត៍ដែលបានរក្សាទុកមួយចំនួនដែលត្រូវបានប្រើសម្រាប់គោលបំណងពិសេស។ តម្លៃទាំងនេះអាចរកបាននៅក្នុងតារាងខាងក្រោម៖

៧

នៅពេលដែលតម្លៃទាំងនេះលេចឡើងក្នុងស៊ុម ការព្យាបាលពិសេសមួយនឹងត្រូវបានធ្វើឡើងចំពោះទិន្នន័យ។ – បញ្ចូលបៃគេច 0x7D នៅពីមុខបៃដែលបានបម្រុងទុក – បញ្ច្រាសប៊ីត 5 នៃបៃដែលបានបម្រុងទុកនោះ។

ខាងក្រោមនេះជាឧទាហរណ៍មួយចំនួននៃក្បួនដោះស្រាយនេះ៖

៨

២.៦. បន្ថែមទង់បញ្ចប់

ជំហានចុងក្រោយគឺបន្ថែមទង់បញ្ចប់ 0x7E ទៅចុងបញ្ចប់នៃស៊ុម។ បន្ទាប់ពីនោះ ទិន្នន័យអាចត្រូវបានផ្ញើទៅកាន់ច្រក UART។

៣. ដំណើរការ​ដក​ស៊ុម​ចេញ

នៅពេលដែលទិន្នន័យត្រូវបានទទួលពី UART យើងគ្រាន់តែត្រូវធ្វើជំហានបញ្ច្រាសដើម្បីឌិគ្រីបវា។

៤. ឯកសារយោង


ពេលវេលាបង្ហោះ៖ ខែកុម្ភៈ-០៨-២០២២
ជជែកតាមអ៊ីនធឺណិត WhatsApp!