Zigbee EZSP UART-ийн тухай

Зохиогч: TorchIoTBootCamp
Холбоос: https://zhuanlan.zhihu.com/p/339700391
Эх сурвалж: Quora

1. Оршил

Silicon Labs нь Zigbee гарцын дизайны хувьд хост+NCP шийдлийг санал болгосон. Энэхүү архитектурт хост нь UART эсвэл SPI интерфэйсээр дамжуулан NCP-тэй холбогдож болно. SPI-ээс хамаагүй хялбар тул UART-ийг ихэвчлэн ашигладаг.

Silicon Labs нь мөн хост програмын жишээ төслийг өгсөн бөгөөд энэ нь жишээ юм.Z3GatewayHost. Дээж нь Unix төст систем дээр ажилладаг. Зарим хэрэглэгчид RTOS дээр ажиллах боломжтой хост дээжийг хүсч болох ч харамсалтай нь одоогоор RTOS дээр суурилсан хост дээж байхгүй байна. Хэрэглэгчид RTOS дээр суурилсан өөрсдийн хост програмыг боловсруулах шаардлагатай байна.

Өөрчлөн тохируулсан хост програмыг боловсруулахаасаа өмнө UART гарцын протоколыг ойлгох нь чухал юм. UART дээр суурилсан NCP болон SPI дээр суурилсан NCP-ийн аль алиных нь хувьд хост нь NCP-тэй харилцахын тулд EZSP протоколыг ашигладаг.EZSPтовчлол юмEmberZnet цуваа протокол, мөн үүнийг дараах байдлаар тодорхойлсон болноUG100UART дээр суурилсан NCP-ийн хувьд EZSP өгөгдлийг UART-аар найдвартай дамжуулахын тулд доод түвшний протоколыг хэрэгжүүлдэг бөгөөд энэ ньҮнспротокол, товчлолАсинхрон цуваа хостASH-ийн талаар дэлгэрэнгүй мэдээлэл авахыг хүсвэл дараах хаягаар зочилно уу.UG101мөнUG115.

EZSP болон ASH-ийн хоорондын хамаарлыг дараах диаграммд харуулж болно.

1

EZSP болон ASH протоколын өгөгдлийн форматыг дараах диаграммд дүрсэлж болно.

2

Энэ хуудсанд бид UART өгөгдлийг хүрээлэх үйл явц болон Zigbee гарцад байнга ашиглагддаг зарим түлхүүр хүрээнүүдийг танилцуулах болно.

2. Хүрээлэх

Ерөнхий хүрээний үйл явцыг дараах диаграммаар дүрсэлж болно.

3

Энэ диаграммд өгөгдөл нь EZSP хүрээг илэрхийлж байна. Ерөнхийдөө хүрээлэх үйл явц нь: |Үгүй|Алхам|Лавлагаа|

|:-|:-|:-|

|1|EZSP хүрээг бөглөх|UG100|

|2|Өгөгдлийг санамсаргүй байдлаар ангилах|UG101-ийн 4.3-р хэсэг|

|3|UG101-ийн 2 ба 3-р бүлгийг хянах байтыг нэмэх|

|4|UG101-ийн 2.3-р хэсэгт заасан CRC-г тооцоолох|

|5|Байтын чихмэл|UG101-ийн 4.2-р хэсэг|

|6|Төгсгөлийн тугийг нэмэх|UG101-ийн 2.4-р хэсэг|

2.1. EZSP хүрээг бөглөнө үү

EZSP хүрээний форматыг UG100-ийн 3-р бүлэгт харуулав.

4

SDK шинэчлэгдэх үед энэ формат өөрчлөгдөж болохыг анхаарна уу. Формат өөрчлөгдөхөд бид түүнд шинэ хувилбарын дугаар өгөх болно. Энэ нийтлэлийг бичих үед EZSP-ийн хамгийн сүүлийн хувилбарын дугаар 8 байсан (EmberZnet 6.8).

EZSP фрэймийн формат нь өөр өөр хувилбаруудын хооронд өөр байж болох тул хост болон NCP нь заавал дагаж мөрдөх ёстой шаардлага байдагЗААВАЛижил EZSP хувилбартай ажиллах. Үгүй бол тэд хүлээгдэж байсан шигээ харилцаж чадахгүй.

Үүнийг хийхийн тулд хост болон NCP-ийн хоорондох эхний тушаал нь хувилбарын команд байх ёстой. Өөрөөр хэлбэл, хост нь бусад харилцаа холбооноос өмнө NCP-ийн EZSP хувилбарыг дахин туршиж үзэх ёстой. Хэрэв EZSP хувилбар нь хост талын EZSP хувилбараас өөр бол харилцаа холбоог зогсоох ёстой.

Үүний цаад далд шаардлага нь хувилбарын командын формат байж болно гэсэн үг юмХЭЗЭЭ Ч БҮҮ ӨӨРЧЛӨГДEZSP хувилбарын командын формат нь дараах байдалтай байна:

5

Параметрийн талбар болон хувилбарын хариултын форматын тайлбарыг UG100-ийн 4-р бүлгээс олж болно. Параметрийн талбар нь хост програмын EZSP хувилбар юм. Энэ нийтлэлийг бичих үед энэ нь 8 байна.
7
Жишээ нь: TorchIoTBootCamp
链接:https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出

2.2. Өгөгдлийг санамсаргүй байдлаар ангилах

Санамсаргүй байдлаар эрэмбэлэх дэлгэрэнгүй үйл явцыг UG101-ийн 4.3-р хэсэгт тайлбарласан болно. EZSP хүрээг бүхэлд нь санамсаргүй байдлаар эрэмбэлэх болно. Санамсаргүй байдлаар эрэмбэлэх нь EZSP хүрээ болон хуурамч санамсаргүй дарааллыг хасах ЭСВЭЛ хасах зорилготой.

Доорх нь псевдо-санамсаргүй дарааллыг үүсгэх алгоритм юм.

  • ранд0 = 0×42
  • хэрэв рандийн 0 бит нь 0 бол ранд+1 = ранди >> 1
  • Хэрэв рандийн 0 бит нь 1 бол ранди+1 = (ранди >> 1) ^ 0xB8

2.3. Хяналтын байтыг нэмэх

Хяналтын байт нь нэг байт өгөгдөл бөгөөд фрэймийн толгойд нэмэгдэх ёстой. Форматыг доорх хүснэгтэд харуулав:

6

Нийтдээ 6 төрлийн хяналтын байт байдаг. Эхний гурвыг нь DATA, ACK болон NAK зэрэг EZSP өгөгдөлтэй нийтлэг фрэймүүдэд ашигладаг. Сүүлийн гурвыг нь RST, RSTACK болон ERROR зэрэг нийтлэг EZSP өгөгдөлгүйгээр ашигладаг.

RST, RSTACK болон ERROR форматыг 3.1-3.3 хэсэгт тайлбарласан болно.

2.4. CRC-г тооцоол

16 битийн CRC-г хяналтын байтаас өгөгдлийн төгсгөл хүртэлх байтууд дээр тооцоолно. Стандарт CRCCCITT (g(x) = x16 + x12 + x5 + 1) нь 0xFFFF болж эхэлдэг. Хамгийн чухал байт нь хамгийн бага ач холбогдолтой байтаас өмнө байрладаг (том төгсгөлийн горим).

2.5. Байтын чихмэл

UG101-ийн 4.2-р хэсэгт тайлбарласны дагуу тусгай зориулалтаар ашиглагддаг зарим нөөц байтын утгууд байдаг. Эдгээр утгуудыг дараах хүснэгтээс харж болно.

7

Эдгээр утгууд нь фрэймд гарч ирэх үед өгөгдөлд тусгай боловсруулалт хийнэ. – 0x7D escape байтыг нөөцлөгдсөн байтын өмнө оруулна – Тухайн нөөцлөгдсөн байтын бит5-г урвуу болгоно.

Энэ алгоритмын зарим жишээг доор харуулав:

8

2.6. Төгсгөлийн тугийг нэмнэ үү

Эцсийн алхам бол фрэймийн төгсгөлд 0x7E төгсгөлийн тугийг нэмэх явдал юм. Үүний дараа өгөгдлийг UART порт руу илгээж болно.

3. Хүрээг задлах үйл явц

UART-аас өгөгдөл хүлээн авахад бид үүнийг тайлахын тулд урвуу алхмуудыг хийх хэрэгтэй.

4. Ашигласан материал


Нийтэлсэн цаг: 2022 оны 2-р сарын 8
WhatsApp онлайн чат!