អំពី Zigbee EZSP UART

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

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

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

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

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

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

១

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

២

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

2. ស៊ុម

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

៣

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

|:-|:-|:-|

|1|បំពេញ EZSP Frame|UG100|

|2|ទិន្នន័យចៃដន្យ|ផ្នែកទី 4.3 នៃ UG101|

|3|បន្ថែម Control Byte|Chap2 និង Chap3 នៃ UG101|

|4|គណនា CRC|ផ្នែក 2.3 នៃ UG101|

|5|Byte Stuffing|ផ្នែក 4.2 នៃ UG101|

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

២.១. បំពេញស៊ុម 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 ទាំងមូលនឹងត្រូវបានចៃដន្យ។ ការចៃដន្យគឺដើម្បីផ្តាច់មុខ - OR ស៊ុម EZSP និង pseudo-random លំដាប់។

ខាង​ក្រោម​នេះ​គឺ​ជា​ក្បួន​ដោះស្រាយ​នៃ​ការ​បង្កើត​លំដាប់ pseudo-random ។

  • Rand0 = 0 × 42
  • ប្រសិនបើប៊ីត 0 នៃ randi គឺ 0, randi + 1 = randi >> 1
  • ប្រសិនបើប៊ីត 0 នៃ randi គឺ 1, randi + 1 = (randi >> 1) ^ 0xB8

២.៣. បន្ថែម Control Byte

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

៦

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

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

២.៤. គណនា CRC

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

២.៥. ការបញ្ចូលបៃ

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

៧

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

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

៨

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

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

3. ដំណើរការ De-framing

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

4. ឯកសារយោង


ពេលវេលាផ្សាយ៖ ខែកុម្ភៈ-០៨-២០២២
WhatsApp ជជែកតាមអ៊ីនធឺណិត!