ກ່ຽວກັບ Zigbee EZSP UART

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

1. ບົດແນະນຳ

Silicon Labs ໄດ້ສະເຫນີການແກ້ໄຂເຈົ້າພາບ + NCP ສໍາລັບການອອກແບບປະຕູ Zigbee. ໃນສະຖາປັດຕະຍະກໍານີ້, ເຈົ້າພາບສາມາດສື່ສານກັບ NCP ຜ່ານ UART ຫຼື SPI interface. ສ່ວນຫຼາຍມັກ, UART ຖືກນໍາໃຊ້ຍ້ອນວ່າມັນງ່າຍດາຍກວ່າ SPI.

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

ມັນເປັນສິ່ງສໍາຄັນທີ່ຈະເຂົ້າໃຈ UART gateway protocol ກ່ອນທີ່ຈະພັດທະນາໂຄງການເຈົ້າພາບທີ່ກໍາຫນົດເອງ. ສໍາລັບທັງສອງ NCP ທີ່ອີງໃສ່ UART ແລະ NCP ທີ່ອີງໃສ່ SPI, ເຈົ້າພາບໃຊ້ໂປໂຕຄອນ EZSP ເພື່ອຕິດຕໍ່ສື່ສານກັບ NCP.EZSPແມ່ນສັ້ນສໍາລັບEmberZnet Serial Protocol, ແລະມັນຖືກກໍານົດໄວ້ໃນUG100. ສໍາລັບ UART ທີ່ອີງໃສ່ NCP, ໂປໂຕຄອນຊັ້ນຕ່ໍາແມ່ນປະຕິບັດເພື່ອປະຕິບັດຂໍ້ມູນ EZSP ທີ່ເຊື່ອຖືໄດ້ຫຼາຍກວ່າ UART, ນັ້ນແມ່ນ.ຂີ້ເທົ່າprotocol, ຫຍໍ້ມາຈາກAsynchronous Serial Host. ສໍາລັບລາຍລະອຽດເພີ່ມເຕີມກ່ຽວກັບ ASH, ກະລຸນາເບິ່ງUG101ແລະUG115.

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

1

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

2

ໃນຫນ້ານີ້, ພວກເຮົາຈະແນະນໍາຂະບວນການສ້າງກອບຂໍ້ມູນ UART ແລະບາງກອບທີ່ສໍາຄັນທີ່ຖືກນໍາໃຊ້ເລື້ອຍໆໃນປະຕູ Zigbee.

2. ກອບ

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

3

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

|:-|:-|:-|

|1|ຕື່ມຂໍ້ມູນໃສ່ຂອບ EZSP|UG100|

|2|Data Randomization|ພາກທີ 4.3 ຂອງ UG101|

|3|ເພີ່ມ Control Byte|Chap2 ແລະ Chap3 ຂອງ UG101|

|4|ຄຳນວນ CRC|ພາກທີ 2.3 ຂອງ UG101|

|5|Byte Stuffing|ພາກທີ 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 ຂອງຝ່າຍເຈົ້າພາບ, ການສື່ສານຕ້ອງຖືກຍົກເລີກ.

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

5

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

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

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

ຂ້າງລຸ່ມນີ້ແມ່ນສູດການຄິດໄລ່ຂອງການສ້າງລໍາດັບ pseudo-random.

  • Rand0 = 0 × 42
  • ຖ້າ bit 0 ຂອງ Randi ແມ່ນ 0, randi+1 = randi >> 1
  • ຖ້າ bit 0 ຂອງ Randi ແມ່ນ 1, randi+1 = (randi >> 1) ^ 0xB8

2.3. ເພີ່ມ Control Byte

byte ຄວບຄຸມແມ່ນຂໍ້ມູນຫນຶ່ງ byte, ແລະຄວນຈະຖືກເພີ່ມໃສ່ຫົວຂອງກອບ. ຮູບ​ແບບ​ແມ່ນ​ໄດ້​ສະ​ແດງ​ໃຫ້​ເຫັນ​ໃນ​ຕາ​ຕະ​ລາງ​ຂ້າງ​ລຸ່ມ​ນີ້​:

6

ທັງຫມົດ, ມີ 6 ປະເພດຂອງ bytes ຄວບຄຸມ. ສາມທໍາອິດແມ່ນໃຊ້ສໍາລັບກອບທົ່ວໄປທີ່ມີຂໍ້ມູນ EZSP, ລວມທັງ DATA, ACK ແລະ NAK. ສາມອັນສຸດທ້າຍຖືກນໍາໃຊ້ໂດຍບໍ່ມີຂໍ້ມູນ EZSP ທົ່ວໄປ, ລວມທັງ RST, RSTACK ແລະ ERROR.

ຮູບແບບຂອງ RST, RSTACK ແລະ ERROR ໄດ້ຖືກອະທິບາຍໄວ້ໃນພາກ 3.1 ຫາ 3.3.

2.4. ຄິດໄລ່ CRC

A 16-bit CRC ຖືກຄິດໄລ່ເປັນ bytes ຈາກ byte ຄວບຄຸມຈົນກ່ວາໃນຕອນທ້າຍຂອງຂໍ້ມູນ. ມາດຕະຖານ CRCCCITT (g(x) = x16 + x12 + x5 + 1) ແມ່ນເລີ່ມຕົ້ນເປັນ 0xFFFF. byte ທີ່ສໍາຄັນທີ່ສຸດກ່ອນ byte ຫນ້ອຍທີ່ສຸດ (ຮູບແບບ big-endian).

2.5. Byte Stuffing

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

7

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

ຂ້າງລຸ່ມນີ້ແມ່ນບາງຕົວຢ່າງຂອງ algorithm ນີ້:

8

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

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

3. ຂະບວນການ De-framing

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

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


ເວລາປະກາດ: Feb-08-2022
WhatsApp ສົນທະນາອອນໄລນ໌!