ଜିଗବି EZSP UART ବିଷୟରେ

ଲେଖକ: ଟର୍ଚ୍ଚଆଇଓଟିବୁଟକ୍ୟାମ୍ପ
ଲିଙ୍କ୍ : https: //zhuanlan.zhihu.com/p/339700391
ପ୍ରେରକ: କ୍ୱାରା

1. ପରିଚୟ

ସିଲିକନ୍ ଲ୍ୟାବ୍ସ ଜିଗବି ଗେଟୱେ ଡିଜାଇନ୍ ପାଇଁ ଏକ ହୋଷ୍ଟ+NCP ସମାଧାନ ପ୍ରଦାନ କରିଛି। ଏହି ସ୍ଥାପତ୍ୟରେ, ହୋଷ୍ଟ UART କିମ୍ବା SPI ଇଣ୍ଟରଫେସ୍ ମାଧ୍ୟମରେ NCP ସହିତ ଯୋଗାଯୋଗ କରିପାରିବ। ସାଧାରଣତଃ, UART ବ୍ୟବହୃତ ହୁଏ କାରଣ ଏହା SPI ଅପେକ୍ଷା ବହୁତ ସରଳ।

ସିଲିକନ୍ ଲ୍ୟାବ୍ସ ହୋଷ୍ଟ ପ୍ରୋଗ୍ରାମ ପାଇଁ ଏକ ନମୁନା ପ୍ରକଳ୍ପ ମଧ୍ୟ ପ୍ରଦାନ କରିଛି, ଯାହା ହେଉଛି ନମୁନାZ3Gatewayହୋଷ୍ଟ। ନମୁନାଟି ଏକ ୟୁନିକ୍ସ ପରି ସିଷ୍ଟମରେ ଚାଲିଥାଏ। କିଛି ଗ୍ରାହକ ଏକ ହୋଷ୍ଟ ନମୁନା ଚାହିଁପାରନ୍ତି ଯାହା RTOS ରେ ଚାଲିପାରିବ, କିନ୍ତୁ ଦୁର୍ଭାଗ୍ୟବଶତଃ, ବର୍ତ୍ତମାନ ପାଇଁ କୌଣସି RTOS ଆଧାରିତ ହୋଷ୍ଟ ନମୁନା ନାହିଁ। ବ୍ୟବହାରକାରୀମାନଙ୍କୁ RTOS ଉପରେ ଆଧାରିତ ନିଜର ହୋଷ୍ଟ ପ୍ରୋଗ୍ରାମ ବିକଶିତ କରିବାକୁ ପଡିବ।

ଏକ କଷ୍ଟମାଇଜ୍ ହୋଷ୍ଟ ପ୍ରୋଗ୍ରାମ୍ ବିକାଶ କରିବା ପୂର୍ବରୁ UART ଗେଟୱେ ପ୍ରୋଟୋକଲକୁ ବୁଝିବା ଗୁରୁତ୍ୱପୂର୍ଣ୍ଣ। UART ଆଧାରିତ NCP ଏବଂ SPI ଆଧାରିତ NCP ଉଭୟ ପାଇଁ, ହୋଷ୍ଟ NCP ସହିତ ଯୋଗାଯୋଗ କରିବା ପାଇଁ EZSP ପ୍ରୋଟୋକଲ ବ୍ୟବହାର କରେ।EZSPNameପାଇଁ ସଂକ୍ଷିପ୍ତଏମ୍ବରଜନେଟ୍ ସିରିଏଲ୍ ପ୍ରୋଟୋକଲ୍, ଏବଂ ଏହାକୁUG100। UART ଆଧାରିତ NCP ପାଇଁ, UART ଉପରେ EZSP ତଥ୍ୟକୁ ନିର୍ଭରଯୋଗ୍ୟ ଭାବରେ ବହନ କରିବା ପାଇଁ ଏକ ନିମ୍ନ ସ୍ତର ପ୍ରୋଟୋକଲ କାର୍ଯ୍ୟକାରୀ କରାଯାଇଛି, ତାହା ହେଉଛିଆଶ୍ପ୍ରୋଟୋକଲ, ସଂକ୍ଷେପରେଏସିଙ୍କ୍ରୋନାସ୍ ସିରିଏଲ୍ ହୋଷ୍ଟ। ASH ବିଷୟରେ ଅଧିକ ବିବରଣୀ ପାଇଁ, ଦୟାକରି ଦେଖନ୍ତୁUG101ଏବଂUG115.

EZSP ଏବଂ ASH ମଧ୍ୟରେ ସମ୍ପର୍କକୁ ନିମ୍ନଲିଖିତ ଚିତ୍ର ଦ୍ୱାରା ଦର୍ଶାଯାଇପାରିବ:

୧

EZSP ଏବଂ ASH ପ୍ରୋଟୋକଲର ତଥ୍ୟ ଫର୍ମାଟ୍ ନିମ୍ନଲିଖିତ ଚିତ୍ର ଦ୍ୱାରା ଦର୍ଶାଯାଇପାରିବ:

୨

ଏହି ପୃଷ୍ଠାରେ, ଆମେ UART ଡାଟା ଫ୍ରେମ କରିବାର ପ୍ରକ୍ରିୟା ଏବଂ Zigbee ଗେଟୱେରେ ପ୍ରାୟତଃ ବ୍ୟବହୃତ ହେଉଥିବା କିଛି ମୁଖ୍ୟ ଫ୍ରେମଗୁଡ଼ିକୁ ପରିଚିତ କରାଇବୁ।

2. ଫ୍ରେମିଂ

ସାଧାରଣ ଫ୍ରେମିଂ ପ୍ରକ୍ରିୟାକୁ ନିମ୍ନଲିଖିତ ଚାର୍ଟ ଦ୍ୱାରା ଦର୍ଶାଯାଇପାରିବ:

3

ଏହି ଚାର୍ଟରେ, ତଥ୍ୟ ଅର୍ଥ EZSP ଫ୍ରେମ୍। ସାଧାରଣତଃ, ଫ୍ରେମିଂ ପ୍ରକ୍ରିୟାଗୁଡ଼ିକ ହେଉଛି: |ନା|ପଦକ୍ଷେପ|ସନ୍ଦର୍ଭ|

|:-|:-|:-|

|1|EZSP ଫ୍ରେମ ପୂରଣ କରନ୍ତୁ|UG100|

|2|ଡାଟା ରାଣ୍ଡୋମାଇଜେସନ୍|UG101 ର ଧାରା 4.3|

|3|UG101|ର କଣ୍ଟ୍ରୋଲ୍ ବାଇଟ୍|Chap2 ଏବଂ Chap3 ଯୋଡନ୍ତୁ।

|4|UG101 ର CRC|ଧାରା 2.3 ଗଣନା କରନ୍ତୁ|

|5|ବାଇଟ୍ ଷ୍ଟଫିଂ|UG101 ର ଧାରା 4.2|

|6|UG101 ର ଶେଷ ପତାକା|ଧାରା 2.4 ଯୋଡନ୍ତୁ|

2.1. EZSP ଫ୍ରେମ ପୂରଣ କରନ୍ତୁ

EZSP ଫ୍ରେମ୍ ଫର୍ମାଟ୍ UG100 ର ଅଧ୍ୟାୟ 3 ରେ ଚିତ୍ରିତ ହୋଇଛି।

୪

ଧ୍ୟାନ ଦିଅନ୍ତୁ ଯେ SDK ଅପଗ୍ରେଡ୍ ହେବା ସମୟରେ ଏହି ଫର୍ମାଟ୍ ପରିବର୍ତ୍ତନ ହୋଇପାରେ। ଯେତେବେଳେ ଫର୍ମାଟ୍ ପରିବର୍ତ୍ତନ ହୁଏ, ଆମେ ଏହାକୁ ଏକ ନୂତନ ସଂସ୍କରଣ ସଂଖ୍ୟା ଦେବୁ। ଏହି ଆର୍ଟିକିଲ୍ ଲେଖାଯିବା ସମୟରେ ସର୍ବଶେଷ EZSP ସଂସ୍କରଣ ସଂଖ୍ୟା 8 ଅଟେ (EmberZnet 6.8)।

ଯେହେତୁ EZSP ଫ୍ରେମ୍ ଫର୍ମାଟ୍ ବିଭିନ୍ନ ସଂସ୍କରଣ ମଧ୍ୟରେ ଭିନ୍ନ ହୋଇପାରେ, ତେଣୁ ଏକ ବାଧ୍ୟତାମୂଳକ ଆବଶ୍ୟକତା ଅଛି ଯେ ହୋଷ୍ଟ ଏବଂ NCPଆବଶ୍ୟକସମାନ EZSP ସଂସ୍କରଣ ସହିତ କାମ କରନ୍ତୁ। ନଚେତ୍, ସେମାନେ ଆଶାନୁରୂପ ଯୋଗାଯୋଗ କରିପାରିବେ ନାହିଁ।

ତାହା ହାସଲ କରିବା ପାଇଁ, ହୋଷ୍ଟ ଏବଂ NCP ମଧ୍ୟରେ ପ୍ରଥମ ନିର୍ଦ୍ଦେଶ ସଂସ୍କରଣ ନିର୍ଦ୍ଦେଶ ହେବା ଆବଶ୍ୟକ। ଅନ୍ୟ ଶବ୍ଦରେ, ହୋଷ୍ଟ ଅନ୍ୟ କୌଣସି ଯୋଗାଯୋଗ ପୂର୍ବରୁ NCPର EZSP ସଂସ୍କରଣକୁ ପୁନରୁଦ୍ଧାର କରିବା ଆବଶ୍ୟକ। ଯଦି EZSP ସଂସ୍କରଣ ହୋଷ୍ଟ ପକ୍ଷର EZSP ସଂସ୍କରଣ ସହିତ ଭିନ୍ନ ହୁଏ, ତେବେ ଯୋଗାଯୋଗକୁ ବାତିଲ କରାଯିବା ଆବଶ୍ୟକ।

ଏହା ପଛରେ ନିହିତ ଆବଶ୍ୟକତା ହେଉଛି ଯେ ସଂସ୍କରଣ କମାଣ୍ଡର ଫର୍ମାଟ୍କେବେବି ପରିବର୍ତ୍ତନ ହୁଅନ୍ତୁ ନାହିଁ। EZSP ସଂସ୍କରଣ କମାଣ୍ଡ ଫର୍ମାଟ୍ ନିମ୍ନଲିଖିତ ପରି ଅଟେ:

5

ପାରାମିଟର କ୍ଷେତ୍ରର ବ୍ୟାଖ୍ୟା ଏବଂ ସଂସ୍କରଣ ପ୍ରତିକ୍ରିୟାର ଫର୍ମାଟ୍ UG100 ର ଅଧ୍ୟାୟ 4 ରେ ମିଳିପାରିବ। ପାରାମିଟର କ୍ଷେତ୍ର ହେଉଛି ହୋଷ୍ଟ ପ୍ରୋଗ୍ରାମର EZSP ସଂସ୍କରଣ। ଯେତେବେଳେ ଏହି ଆର୍ଟିକିଲ୍ ଲେଖାଯାଏ, ଏହା 8 ଅଟେ।
୭
作者: TorchIoTBootCamp |
链接: https: //zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

୨.୨. ତଥ୍ୟ ଅନିୟମିତତା

UG101 ର ଧାରା 4.3 ରେ ବିସ୍ତୃତ ରେଣ୍ଡମାଇଜେସନ୍ ପ୍ରକ୍ରିୟା ବର୍ଣ୍ଣିତ ହୋଇଛି। ସମ୍ପୂର୍ଣ୍ଣ EZSP ଫ୍ରେମ୍ କୁ ରେଣ୍ଡମାଇଜେସନ୍ କରାଯିବ। ରେଣ୍ଡମାଇଜେସନ୍ ହେଉଛି EZSP ଫ୍ରେମ୍ ଏବଂ ଏକ ଛଦ୍ମ-ରେଣ୍ଡମ୍ କ୍ରମକୁ ସ୍ୱତନ୍ତ୍ର କରିବା ପାଇଁ।

ତଳେ ସ୍ୟୁଡୋ-ରେଣ୍ଡମ୍ କ୍ରମ ସୃଷ୍ଟି କରିବାର ଆଲଗୋରିଦମ ଦିଆଯାଇଛି।

  • ରାଣ୍ଡ୦ = ୦×୪୨
  • ଯଦି ରାଣ୍ଡିର ବିଟ୍ 0 0 ହୁଏ, ରାଣ୍ଡି+1 = ରାଣ୍ଡି >> 1
  • ଯଦି ରାଣ୍ଡିର ବିଟ୍ 0 1 ହୁଏ, ରାଣ୍ଡି+1 = (ରାଣ୍ଡି >> 1) ^ 0xB8

୨.୩. ନିୟନ୍ତ୍ରଣ ବାଇଟ୍ ଯୋଡନ୍ତୁ

କଣ୍ଟ୍ରୋଲ୍ ବାଇଟ୍ ହେଉଛି ଗୋଟିଏ ବାଇଟ୍ ଡାଟା, ଏବଂ ଏହାକୁ ଫ୍ରେମ୍‌ର ଶୀର୍ଷରେ ଯୋଡାଯିବା ଉଚିତ। ଫର୍ମାଟ୍ ନିମ୍ନରେ ଥିବା ସାରଣୀ ସହିତ ଦର୍ଶାଯାଇଛି:

6

ମୋଟ ଉପରେ, 6 ପ୍ରକାରର ନିୟନ୍ତ୍ରଣ ବାଇଟ୍ ଅଛି। ପ୍ରଥମ ତିନୋଟି EZSP ଡାଟା ସହିତ ସାଧାରଣ ଫ୍ରେମ୍ ପାଇଁ ବ୍ୟବହୃତ ହୁଏ, ଯେଉଁଥିରେ DATA, ACK ଏବଂ NAK ଅନ୍ତର୍ଭୁକ୍ତ। ଶେଷ ତିନୋଟି ସାଧାରଣ EZSP ଡାଟା ବିନା ବ୍ୟବହୃତ ହୁଏ, ଯେଉଁଥିରେ RST, RSTACK ଏବଂ ERROR ଅନ୍ତର୍ଭୁକ୍ତ।

RST, RSTACK ଏବଂ ERROR ର ଫର୍ମାଟ ବିଭାଗ 3.1 ରୁ 3.3 ରେ ବର୍ଣ୍ଣିତ ହୋଇଛି।

୨.୪. CRC ଗଣନା କରନ୍ତୁ

ଏକ 16-ବିଟ୍ CRC ନିୟନ୍ତ୍ରଣ ବାଇଟ୍ ଠାରୁ ଡାଟାର ଶେଷ ପର୍ଯ୍ୟନ୍ତ ବାଇଟ୍ ଉପରେ ଗଣନା କରାଯାଏ। ମାନକ CRCCCITT (g(x) = x16 + x12 + x5 + 1) 0xFFFF ରେ ଆରମ୍ଭ କରାଯାଇଛି। ସବୁଠାରୁ ଗୁରୁତ୍ୱପୂର୍ଣ୍ଣ ବାଇଟ୍ ସର୍ବନିମ୍ନ ଗୁରୁତ୍ୱପୂର୍ଣ୍ଣ ବାଇଟ୍ (ବଡ଼-ଏଣ୍ଡିଆନ୍ ମୋଡ୍) ପୂର୍ବରୁ ଥାଏ।

୨.୫. ବାଇଟ୍ ଷ୍ଟଫିଂ

UG101 ର ଧାରା 4.2 ରେ ବର୍ଣ୍ଣିତ ଅନୁସାରେ, ବିଶେଷ ଉଦ୍ଦେଶ୍ୟ ପାଇଁ ବ୍ୟବହୃତ କିଛି ସଂରକ୍ଷିତ ବାଇଟ୍ ମୂଲ୍ୟ ଅଛି। ଏହି ମୂଲ୍ୟଗୁଡ଼ିକ ନିମ୍ନଲିଖିତ ସାରଣୀରେ ମିଳିପାରିବ:

୭

ଯେତେବେଳେ ଏହି ମୂଲ୍ୟଗୁଡ଼ିକ ଫ୍ରେମରେ ଦେଖାଯିବ, ସେତେବେଳେ ଡାଟା ପ୍ରତି ଏକ ସ୍ୱତନ୍ତ୍ର ବ୍ୟବହାର କରାଯିବ। – ସଂରକ୍ଷିତ ବାଇଟର ସାମ୍ନାରେ ଏସ୍କେପ୍ ବାଇଟ୍ 0x7D ପ୍ରବେଶ କରନ୍ତୁ – ସେହି ସଂରକ୍ଷିତ ବାଇଟର ବିଟ୍ 5 କୁ ଓଲଟା କରନ୍ତୁ।

ଏହି ଆଲଗୋରିଦମର କିଛି ଉଦାହରଣ ତଳେ ଦିଆଯାଇଛି:

8

୨.୬. ଶେଷ ପତାକା ଯୋଡନ୍ତୁ

ଶେଷ ପଦକ୍ଷେପ ହେଉଛି ଫ୍ରେମର ଶେଷରେ ଶେଷ ଫ୍ଲାଗ୍ 0x7E ଯୋଡିବା। ଏହା ପରେ, ତଥ୍ୟକୁ UART ପୋର୍ଟକୁ ପଠାଯାଇପାରିବ।

3. ଡି-ଫ୍ରେମିଂ ପ୍ରକ୍ରିୟା

ଯେତେବେଳେ UART ରୁ ତଥ୍ୟ ପ୍ରାପ୍ତ ହୁଏ, ଆମକୁ ଏହାକୁ ଡିକୋଡ୍ କରିବା ପାଇଁ କେବଳ ଓଲଟା ପଦକ୍ଷେପ ନେବାକୁ ପଡିବ।

୪. ସନ୍ଦର୍ଭ


ପୋଷ୍ଟ ସମୟ: ଫେବୃଆରୀ-୦୮-୨୦୨୨
WhatsApp ଅନଲାଇନ୍ ଚାଟ୍!