ກ່ຽວກັບ Zigbee EZSP UART

ຜູ້ຂຽນ: TorchIoTBootCamp
ລິ້ງ: https://zhuanlan.zhihu.com/p/339700391
ຈາກ:Quora

1. ບົດນໍາ

Silicon Labs ໄດ້ສະເໜີໂຊລູຊັ່ນ host+NCP ສຳລັບການອອກແບບປະຕູ Zigbee. ໃນສະຖາປັດຕະຍະກຳນີ້, host ສາມາດສື່ສານກັບ NCP ຜ່ານ UART ຫຼື ອິນເຕີເຟດ SPI. ສ່ວນຫຼາຍແລ້ວ, UART ຖືກນໍາໃຊ້ຍ້ອນວ່າມັນງ່າຍກວ່າ SPI ຫຼາຍ.

ຫ້ອງທົດລອງ Silicon ຍັງໄດ້ສະໜອງໂຄງການຕົວຢ່າງສຳລັບໂປຣແກຣມໂຮດຕິ້ງ, ເຊິ່ງເປັນຕົວຢ່າງໂຮສຕ໌ Z3Gatewayຕົວຢ່າງເຮັດວຽກຢູ່ໃນລະບົບທີ່ຄ້າຍຄືກັບ Unix. ລູກຄ້າບາງຄົນອາດຕ້ອງການຕົວຢ່າງໂຮດທີ່ສາມາດເຮັດວຽກຢູ່ໃນ RTOS, ແຕ່ໂຊກບໍ່ດີ, ປັດຈຸບັນຍັງບໍ່ມີຕົວຢ່າງໂຮດທີ່ອີງໃສ່ RTOS. ຜູ້ໃຊ້ຕ້ອງພັດທະນາໂປຣແກຣມໂຮດຂອງຕົນເອງໂດຍອີງໃສ່ RTOS.

ມັນເປັນສິ່ງສຳຄັນທີ່ຈະຕ້ອງເຂົ້າໃຈໂປໂຕຄອນເກດເວ UART ກ່ອນທີ່ຈະພັດທະນາໂປຣແກຣມໂຮດທີ່ກຳນົດເອງ. ສຳລັບທັງ NCP ທີ່ອີງໃສ່ UART ແລະ NCP ທີ່ອີງໃສ່ SPI, ໂຮດໃຊ້ໂປໂຕຄອນ EZSP ເພື່ອສື່ສານກັບ NCP.EZSPແມ່ນຫຍໍ້ມາຈາກໂປໂຕຄອນອະນຸກົມ EmberZnet, ແລະມັນຖືກກຳນົດໄວ້ໃນUG100ສຳລັບ NCP ທີ່ອີງໃສ່ UART, ໂປໂຕຄອນຊັ້ນລຸ່ມຈະຖືກຈັດຕັ້ງປະຕິບັດເພື່ອນຳຂໍ້ມູນ EZSP ໄປໃຊ້ຢ່າງໜ້າເຊື່ອຖືຜ່ານ UART, ນັ້ນຄືຂີ້ເທົ່າໂປໂຕຄອນ, ຫຍໍ້ມາຈາກໂຮສຕ໌ອະນຸກົມແບບບໍ່ປະສານກັນສຳລັບລາຍລະອຽດເພີ່ມເຕີມກ່ຽວກັບ ASH, ກະລຸນາອ້າງອີງເຖິງUG101ແລະUG115.

ຄວາມສຳພັນລະຫວ່າງ EZSP ແລະ ASH ສາມາດສະແດງໃຫ້ເຫັນໂດຍແຜນວາດຕໍ່ໄປນີ້:

1

ຮູບແບບຂໍ້ມູນຂອງ EZSP ແລະໂປໂຕຄອນ ASH ສາມາດສະແດງໃຫ້ເຫັນໂດຍແຜນວາດຕໍ່ໄປນີ້:

2

ໃນໜ້ານີ້, ພວກເຮົາຈະແນະນຳຂະບວນການສ້າງກອບຂໍ້ມູນ UART ແລະບາງ key frames ທີ່ມັກໃຊ້ໃນ gateway Zigbee.

2. ການວາງກອບ

ຂະບວນການວາງກອບໂດຍທົ່ວໄປສາມາດສະແດງໃຫ້ເຫັນໂດຍຕາຕະລາງຕໍ່ໄປນີ້:

3

ໃນຕາຕະລາງນີ້, ຂໍ້ມູນໝາຍເຖິງເຟຣມ EZSP. ໂດຍທົ່ວໄປ, ຂະບວນການເຟຣມແມ່ນ: |ບໍ່|ຂັ້ນຕອນ|ເອກະສານອ້າງອີງ|

|:-|:-|:-|

|1|ຕື່ມໃສ່ກອບ EZSP|UG100|

|2|ການສຸ່ມຂໍ້ມູນ|ພາກທີ 4.3 ຂອງ UG101|

|3|ເພີ່ມໄບຕ໌ຄວບຄຸມ|ບົດທີ 2 ແລະ ບົດທີ 3 ຂອງ UG101|

|4|ຄິດໄລ່ CRC|ພາກທີ 2.3 ຂອງ UG101|

|5|ການຍັດຂໍ້ມູນແບບໄບຕ໌|ພາກທີ 4.2 ຂອງ UG101|

|6|ເພີ່ມທຸງສິ້ນສຸດ|ພາກທີ 2.4 ຂອງ UG101|

2.1. ຕື່ມໃສ່ກອບ EZSP

ຮູບແບບເຟຣມ EZSP ໄດ້ຖືກສະແດງຢູ່ໃນບົດທີ 3 ຂອງ UG100.

4

ຈົ່ງລະວັງວ່າຮູບແບບນີ້ອາດຈະມີການປ່ຽນແປງເມື່ອ SDK ອັບເກຣດ. ເມື່ອຮູບແບບມີການປ່ຽນແປງ, ພວກເຮົາຈະໃຫ້ເລກລຸ້ນໃໝ່ແກ່ມັນ. ເລກລຸ້ນ EZSP ລ່າສຸດແມ່ນ 8 ເມື່ອບົດຄວາມນີ້ຖືກຂຽນ (EmberZnet 6.8).

ເນື່ອງຈາກຮູບແບບເຟຣມ EZSP ອາດຈະແຕກຕ່າງກັນລະຫວ່າງລຸ້ນຕ່າງໆ, ມັນມີຂໍ້ກຳນົດທີ່ບັງຄັບໃຫ້ໂຮສ ແລະ NCPຕ້ອງເຮັດວຽກກັບ EZSP ລຸ້ນດຽວກັນ. ຖ້າບໍ່ດັ່ງນັ້ນ, ພວກເຂົາຈະບໍ່ສາມາດສື່ສານໄດ້ຕາມທີ່ຄາດໄວ້.

ເພື່ອບັນລຸເປົ້າໝາຍດັ່ງກ່າວ, ຄຳສັ່ງທຳອິດລະຫວ່າງໂຮສຕ໌ ແລະ NCP ຕ້ອງເປັນຄຳສັ່ງເວີຊັນ. ເວົ້າອີກຢ່າງໜຶ່ງ, ໂຮສຕ໌ຕ້ອງດຶງເອົາເວີຊັນ EZSP ຂອງ NCP ກັບຄືນມາກ່ອນການສື່ສານອື່ນໆ. ຖ້າເວີຊັນ EZSP ແຕກຕ່າງຈາກເວີຊັນ EZSP ຂອງຝັ່ງໂຮສຕ໌, ການສື່ສານຕ້ອງຖືກຍົກເລີກ.

ຂໍ້ກຳນົດທີ່ບໍ່ຊັດເຈນຢູ່ເບື້ອງຫຼັງນີ້ແມ່ນຮູບແບບຂອງຄຳສັ່ງເວີຊັນສາມາດຢ່າປ່ຽນແປງຮູບແບບຄຳສັ່ງລຸ້ນ EZSP ແມ່ນຄືກັບຂ້າງລຸ່ມນີ້:

5

ຄຳອະທິບາຍຂອງພາກສະໜາມພາລາມິເຕີ ແລະ ຮູບແບບຂອງການຕອບສະໜອງຂອງລຸ້ນສາມາດພົບໄດ້ໃນບົດທີ 4 ຂອງ UG100. ພາກສະໜາມພາລາມິເຕີແມ່ນລຸ້ນ EZSP ຂອງໂປຣແກຣມໂຮດ. ເມື່ອບົດຄວາມນີ້ຖືກຂຽນ, ມັນແມ່ນ 8.
7
ທີ່ມາ: TorchIoTBootCamp
ຂໍ້ມູນຈາກ: https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处.

2.2. ການສຸ່ມຂໍ້ມູນ

ຂະບວນການສຸ່ມລະອຽດໄດ້ຖືກອະທິບາຍໄວ້ໃນພາກທີ 4.3 ຂອງ UG101. ເຟຣມ EZSP ທັງໝົດຈະຖືກສຸ່ມ. ການສຸ່ມແມ່ນເພື່ອ exclusive-OR ເຟຣມ EZSP ແລະລໍາດັບ pseudo-random.

ຂ້າງລຸ່ມນີ້ແມ່ນອັລກໍຣິທຶມຂອງການສ້າງລຳດັບແບບສຸ່ມປອມ.

  • ແຣນດ໌ 0 = 0 × 42
  • ຖ້າບິດ 0 ຂອງ randi ແມ່ນ 0, randi+1 = randi >> 1
  • ຖ້າບິດ 0 ຂອງ randi ແມ່ນ 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

CRC 16 ບິດຖືກຄິດໄລ່ຈາກໄບຕ໌ຈາກໄບຕ໌ຄວບຄຸມຈົນເຖິງຈຸດສິ້ນສຸດຂອງຂໍ້ມູນ. CRCCCITT ມາດຕະຖານ (g(x) = x16 + x12 + x5 + 1) ຖືກຕັ້ງຄ່າເບື້ອງຕົ້ນເປັນ 0xFFFF. ໄບຕ໌ທີ່ສຳຄັນທີ່ສຸດຢູ່ກ່ອນໄບຕ໌ທີ່ສຳຄັນໜ້ອຍທີ່ສຸດ (ໂໝດ big-endian).

2.5. ການຕື່ມຂໍ້ມູນດ້ວຍໄບຕ໌

ດັ່ງທີ່ໄດ້ອະທິບາຍໄວ້ໃນພາກທີ 4.2 ຂອງ UG101, ມີຄ່າໄບຕ໌ສະຫງວນໄວ້ບາງຄ່າທີ່ໃຊ້ສຳລັບຈຸດປະສົງພິເສດ. ຄ່າເຫຼົ່ານີ້ສາມາດພົບໄດ້ໃນຕາຕະລາງຕໍ່ໄປນີ້:

7

ເມື່ອຄ່າເຫຼົ່ານີ້ປາກົດຢູ່ໃນເຟຣມ, ການປະຕິບັດພິເສດຈະຖືກເຮັດກັບຂໍ້ມູນ. - ໃສ່ໄບຕ໌ escape 0x7D ຢູ່ທາງໜ້າໄບຕ໌ທີ່ສະຫງວນໄວ້ - ປີ້ນກັບບິດ 5 ຂອງໄບຕ໌ທີ່ສະຫງວນໄວ້ນັ້ນ

ຂ້າງລຸ່ມນີ້ແມ່ນຕົວຢ່າງບາງສ່ວນຂອງອັລກໍຣິທຶມນີ້:

8

2.6. ເພີ່ມທຸງສິ້ນສຸດ

ຂັ້ນຕອນສຸດທ້າຍແມ່ນການເພີ່ມທຸງສຸດທ້າຍ 0x7E ໃສ່ທ້າຍເຟຣມ. ຫຼັງຈາກນັ້ນ, ຂໍ້ມູນສາມາດຖືກສົ່ງໄປທີ່ພອດ UART ໄດ້.

3. ຂະບວນການຍົກເລີກກອບ

ເມື່ອຂໍ້ມູນໄດ້ຮັບຈາກ UART, ພວກເຮົາພຽງແຕ່ຕ້ອງເຮັດຂັ້ນຕອນກົງກັນຂ້າມເພື່ອຖອດລະຫັດມັນ.

4. ເອກະສານອ້າງອີງ


ເວລາໂພສ: ກຸມພາ-08-2022
ສົນທະນາ WhatsApp ອອນໄລນ໌!