អ្នកនិពន្ធ៖ 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 មានដូចខាងក្រោម៖
ប្រភព៖ 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. ឯកសារយោង
ពេលវេលាផ្សាយ៖ ខែកុម្ភៈ-០៨-២០២២