ଲେଖକ : TorchIoTBootCamp |
ଲିଙ୍କ୍ : https: //zhuanlan.zhihu.com/p/339700391
: କୋରା ଠାରୁ
1 ପରିଚୟ
ସିଲିକନ୍ ଲ୍ୟାବ୍ସ ଜିଗବି ଗେଟୱେ ଡିଜାଇନ୍ ପାଇଁ ଏକ ହୋଷ୍ଟ + ଏନସିପି ସମାଧାନ ପ୍ରଦାନ କରିଛି | ଏହି ସ୍ଥାପତ୍ୟରେ, ହୋଷ୍ଟ UART କିମ୍ବା SPI ଇଣ୍ଟରଫେସ୍ ମାଧ୍ୟମରେ NCP ସହିତ ଯୋଗାଯୋଗ କରିପାରିବ | ସାଧାରଣତ ,, UART ବ୍ୟବହୃତ ହୁଏ କାରଣ ଏହା SPI ଠାରୁ ବହୁତ ସରଳ |
ସିଲିକନ୍ ଲ୍ୟାବଗୁଡିକ ହୋଷ୍ଟ ପ୍ରୋଗ୍ରାମ୍ ପାଇଁ ଏକ ନମୁନା ପ୍ରୋଜେକ୍ଟ ମଧ୍ୟ ପ୍ରଦାନ କରିଛି, ଯାହା ହେଉଛି ନମୁନା |Z3 ଗେଟୱେ ହୋଷ୍ଟ |
। ନମୁନା ଏକ ୟୁନିକ୍ସ ପରି ସିଷ୍ଟମରେ ଚାଲିଥାଏ | କିଛି ଗ୍ରାହକ ହୁଏତ ଏକ ହୋଷ୍ଟ ନମୁନା ଚାହାଁନ୍ତି ଯାହା ଏକ RTOS ରେ ଚାଲିପାରେ, କିନ୍ତୁ ଦୁର୍ଭାଗ୍ୟବଶତ ,, ବର୍ତ୍ତମାନ ପର୍ଯ୍ୟନ୍ତ କ RT ଣସି RTOS ଆଧାରିତ ହୋଷ୍ଟ ନମୁନା ନାହିଁ | ଉପଭୋକ୍ତାମାନେ RTOS ଉପରେ ଆଧାର କରି ସେମାନଙ୍କର ନିଜସ୍ୱ ହୋଷ୍ଟ ପ୍ରୋଗ୍ରାମ୍ ବିକାଶ କରିବା ଆବଶ୍ୟକ କରନ୍ତି |
ଏକ କଷ୍ଟୋମାଇଜଡ୍ ହୋଷ୍ଟ ପ୍ରୋଗ୍ରାମ୍ ବିକାଶ କରିବା ପୂର୍ବରୁ UART ଗେଟୱେ ପ୍ରୋଟୋକଲ୍ ବୁ to ିବା ଜରୁରୀ | ଉଭୟ UART ଆଧାରିତ NCP ଏବଂ SPI ଆଧାରିତ NCP ପାଇଁ, ହୋଷ୍ଟ NCP ସହିତ ଯୋଗାଯୋଗ କରିବାକୁ EZSP ପ୍ରୋଟୋକଲ୍ ବ୍ୟବହାର କରେ |EZSPପାଇଁ କ୍ଷୁଦ୍ର ଅଟେ |EmberZnet କ୍ରମିକ ପ୍ରୋଟୋକଲ୍ |, ଏବଂ ଏହା ବ୍ୟାଖ୍ୟା କରାଯାଇଛି |UG100। UART ଆଧାରିତ NCP ପାଇଁ, ଏକ ନିମ୍ନ ସ୍ତର ପ୍ରୋଟୋକଲ୍ UART ଉପରେ EZSP ତଥ୍ୟକୁ ନିର୍ଭରଯୋଗ୍ୟ ଭାବରେ ବହନ କରିବା ପାଇଁ କାର୍ଯ୍ୟକାରୀ ହୋଇଥାଏ, ତାହା ହେଉଛିASHପ୍ରୋଟୋକଲ୍, ପାଇଁ ଛୋଟ |ଅସନ୍ତୁଳିତ କ୍ରମିକ ହୋଷ୍ଟ |। ASH ବିଷୟରେ ଅଧିକ ବିବରଣୀ ପାଇଁ, ଦୟାକରି ଅନୁସରଣ କରନ୍ତୁ |UG101ଏବଂUG115.
EZSP ଏବଂ ASH ମଧ୍ୟରେ ଥିବା ସମ୍ପର୍କକୁ ନିମ୍ନଲିଖିତ ଚିତ୍ର ଦ୍ୱାରା ଦର୍ଶାଯାଇପାରିବ:
EZSP ଏବଂ ASH ପ୍ରୋଟୋକଲର ଡାଟା ଫର୍ମାଟ୍ ନିମ୍ନ ଚିତ୍ର ଦ୍ୱାରା ବର୍ଣ୍ଣନା କରାଯାଇପାରେ:
ଏହି ପୃଷ୍ଠାରେ, ଆମେ UART ଡାଟା ଏବଂ କିଛି କି ଫ୍ରେମ୍ ଫ୍ରେମ୍ କରିବାର ପ୍ରକ୍ରିୟା ଉପସ୍ଥାପନ କରିବୁ ଯାହା ଜିଗବି ଗେଟୱେରେ ବାରମ୍ବାର ବ୍ୟବହୃତ ହୁଏ |
ଫ୍ରେମ୍ କରିବା
ସାଧାରଣ ଫ୍ରେମିଙ୍ଗ ପ୍ରକ୍ରିୟାକୁ ନିମ୍ନ ଚାର୍ଟ ଦ୍ୱାରା ବର୍ଣ୍ଣନା କରାଯାଇପାରେ:
ଏହି ଚାର୍ଟରେ, ତଥ୍ୟର ଅର୍ଥ ହେଉଛି EZSP ଫ୍ରେମ୍ | ସାଧାରଣତ ,, ଫ୍ରେମ୍ କରିବା ପ୍ରକ୍ରିୟାଗୁଡ଼ିକ ହେଉଛି: | ନା | ଷ୍ଟେପ୍ | ସନ୍ଦର୍ଭ | |
|: - |: - |: - | |
| 1 | EZSP ଫ୍ରେମ୍ ପୁରଣ | UG100 | |
| 2 | ଡାଟା ରାଣ୍ଡୋମାଇଜେସନ୍ | UG101 ର ବିଭାଗ 4.3 | |
| 3 | କଣ୍ଟ୍ରୋଲ୍ ବାଇଟ୍ ଯୋଡନ୍ତୁ | UG101 ର Chap2 ଏବଂ Chap3 | |
| 4 | CRC ଗଣନା | UG101 ର ବିଭାଗ 2.3 | |
| 5 | ବାଇଟ୍ ଷ୍ଟଫିଂ | UG101 ର ବିଭାଗ 4.2 | |
| 6 | ଶେଷ ପତାକା ଯୋଡନ୍ତୁ | UG101 ର ବିଭାଗ 2.4 |
2.1। EZSP ଫ୍ରେମ୍ ପୁରଣ କରନ୍ତୁ |
EGSP ଫ୍ରେମ୍ ଫର୍ମାଟ୍ UG100 ର ଅଧ୍ୟାୟ 3 ରେ ବର୍ଣ୍ଣିତ |
ଧ୍ୟାନ ଦିଅନ୍ତୁ ଯେ SDK ଅପଗ୍ରେଡ୍ ହେଲେ ଏହି ଫର୍ମାଟ୍ ବଦଳିପାରେ | ଯେତେବେଳେ ଫର୍ମାଟ୍ ବଦଳିବ, ଆମେ ଏହାକୁ ଏକ ନୂଆ ସଂସ୍କରଣ ନମ୍ବର ଦେବୁ | ସର୍ବଶେଷ EZSP ସଂସ୍କରଣ ସଂଖ୍ୟା ହେଉଛି ଯେତେବେଳେ ଏହି ଲେଖା ଲେଖାଯାଏ (EmberZnet 6.8) |
ଯେହେତୁ EZSP ଫ୍ରେମ୍ ଫର୍ମାଟ୍ ବିଭିନ୍ନ ସଂସ୍କରଣ ମଧ୍ୟରେ ଭିନ୍ନ ହୋଇପାରେ, ସେଠାରେ ଏକ ବାଧ୍ୟତାମୂଳକ ଆବଶ୍ୟକତା ଅଛି ଯେ ହୋଷ୍ଟ ଏବଂ NCP |ନିଶ୍ଚୟ |ସମାନ EZSP ସଂସ୍କରଣ ସହିତ କାମ କରନ୍ତୁ | ଅନ୍ୟଥା, ସେମାନେ ଆଶା କରିଥିବା ପରି ଯୋଗାଯୋଗ କରିପାରିବେ ନାହିଁ |
ତାହା ହାସଲ କରିବା ପାଇଁ, ହୋଷ୍ଟ ଏବଂ NCP ମଧ୍ୟରେ ପ୍ରଥମ ନିର୍ଦ୍ଦେଶ ନିଶ୍ଚିତ ଭାବରେ ସଂସ୍କରଣ ନିର୍ଦ୍ଦେଶ ଅଟେ | ଅନ୍ୟ ଅର୍ଥରେ, ହୋଷ୍ଟ ଅନ୍ୟ କ communication ଣସି ଯୋଗାଯୋଗ ପୂର୍ବରୁ NCP ର EZSP ସଂସ୍କରଣକୁ ପୁନ r ଉଦ୍ଧାର କରିବା ଆବଶ୍ୟକ | ଯଦି ହୋଷ୍ଟ ପାର୍ଶ୍ E ର EZSP ସଂସ୍କରଣ ସହିତ EZSP ସଂସ୍କରଣ ଭିନ୍ନ, ତେବେ ଯୋଗାଯୋଗକୁ ପରିତ୍ୟାଗ କରିବାକୁ ହେବ |
ଏହା ପଛରେ ଥିବା ଅନ୍ତର୍ନିହିତ ଆବଶ୍ୟକତା ହେଉଛି ସଂସ୍କରଣ କମାଣ୍ଡର ଫର୍ମାଟ୍ କରିପାରିବ |କଦାପି ପରିବର୍ତ୍ତନ କରନ୍ତୁ ନାହିଁ |। EZSP ସଂସ୍କରଣ ନିର୍ଦ୍ଦେଶ ଫର୍ମାଟ୍ ନିମ୍ନରେ ଅଛି:
链接: https: //zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
2.2। ଡାଟା ରାଣ୍ଡୋମାଇଜେସନ୍ |
UG101 ର ବିଭାଗ 4.3 ରେ ବିସ୍ତୃତ ରାଣ୍ଡୋମାଇଜେସନ୍ ପ୍ରକ୍ରିୟା ବର୍ଣ୍ଣନା କରାଯାଇଛି | ସମଗ୍ର EZSP ଫ୍ରେମ୍ ରାଣ୍ଡମାଇଜ୍ ହେବ | ରାଣ୍ଡୋମାଇଜେସନ୍ ହେଉଛି ଏକ୍ସକ୍ଲୁସିଭ୍- କିମ୍ବା EZSP ଫ୍ରେମ୍ ଏବଂ ଏକ ଛଦ୍ମ-ରାଣ୍ଡମ୍ କ୍ରମ |
ନିମ୍ନରେ ଛଉ-ରାଣ୍ଡମ କ୍ରମ ସୃଷ୍ଟି କରିବାର ଆଲଗୋରିଦମ ଅଛି |
- rand0 = 0 × 42
- ଯଦି ରାଣ୍ଡିର ବିଟ୍ 0 ହେଉଛି 0, ରାଣ୍ଡି + 1 = ରାଣ୍ଡି >> 1 |
- ଯଦି ରାଣ୍ଡିର ବିଟ୍ 0 ହେଉଛି, ରାଣ୍ଡି + 1 = (ରାଣ୍ଡି >> 1) ^ 0xB8 |
2.3। କଣ୍ଟ୍ରୋଲ୍ ବାଇଟ୍ ଯୋଡନ୍ତୁ |
କଣ୍ଟ୍ରୋଲ୍ ବାଇଟ୍ ହେଉଛି ଗୋଟିଏ ବାଇଟ୍ ଡାଟା, ଏବଂ ଫ୍ରେମ୍ ର ମୁଣ୍ଡରେ ଯୋଡାଯିବା ଉଚିତ | ଫର୍ମାଟ୍ ନିମ୍ନ ସାରଣୀ ସହିତ ବର୍ଣ୍ଣିତ ହୋଇଛି:
ମୋଟାମୋଟି ଭାବେ, ସେଠାରେ types ପ୍ରକାରର ନିୟନ୍ତ୍ରଣ ବାଇଟ ଅଛି | ପ୍ରଥମ ତିନୋଟି EZSP ତଥ୍ୟ ସହିତ ସାଧାରଣ ଫ୍ରେମ୍ ପାଇଁ ବ୍ୟବହୃତ ହୁଏ, DATA, ACK ଏବଂ NAK | ଶେଷ ତିନୋଟି ସାଧାରଣ EZSP ତଥ୍ୟ ବିନା RST, RSTACK ଏବଂ ERROR ସହିତ ବ୍ୟବହୃତ ହୁଏ |
RST, RSTACK ଏବଂ ERROR ର ଫର୍ମାଟ୍ ବିଭାଗ 3.1 ରୁ 3.3 ରେ ବର୍ଣ୍ଣନା କରାଯାଇଛି |
2.4। CRC ଗଣନା କରନ୍ତୁ |
16-ବିଟ୍ CRC କଣ୍ଟ୍ରୋଲ୍ ବାଇଟ୍ ଠାରୁ ଡାଟା ଶେଷ ପର୍ଯ୍ୟନ୍ତ ବାଇଟ୍ ଉପରେ ଗଣନା କରାଯାଏ | ମାନକ CRCCCITT (g (x) = x16 + x12 + x5 + 1) 0xFFFF କୁ ଆରମ୍ଭ କରାଯାଇଛି | ସବୁଠାରୁ ମହତ୍ତ୍ by ପୂର୍ଣ୍ଣ ବାଇଟ୍ ସର୍ବନିମ୍ନ ଗୁରୁତ୍ୱପୂର୍ଣ୍ଣ ବାଇଟ୍ (ବଡ-ଏଣ୍ଡିଆନ୍ ମୋଡ୍) ପୂର୍ବରୁ ଥାଏ |
2.5। 2.5। ବାଇଟ୍ ଷ୍ଟଫିଙ୍ଗ୍ |
UG101 ର ବିଭାଗ 4.2 ରେ ବର୍ଣ୍ଣନା କରାଯାଇଥିବା ପରି, ସେଠାରେ କିଛି ସଂରକ୍ଷିତ ବାଇଟ୍ ମୂଲ୍ୟ ବିଶେଷ ଉଦ୍ଦେଶ୍ୟରେ ବ୍ୟବହୃତ ହୋଇଛି | ଏହି ମୂଲ୍ୟଗୁଡ଼ିକ ନିମ୍ନ ସାରଣୀରେ ମିଳିପାରିବ:
ଯେତେବେଳେ ଏହି ମୂଲ୍ୟଗୁଡ଼ିକ ଫ୍ରେମରେ ଦେଖାଯାଏ, ତଥ୍ୟକୁ ଏକ ସ୍ୱତନ୍ତ୍ର ଚିକିତ୍ସା କରାଯିବ | - ସଂରକ୍ଷିତ ବାଇଟ୍ ସାମ୍ନାରେ ଏସ୍କେପ୍ ବାଇଟ୍ 0x7D ସନ୍ନିବେଶ କରନ୍ତୁ - ସେହି ସଂରକ୍ଷିତ ବାଇଟ୍ ର ବିଟ୍ 5 କୁ ଓଲଟା କରନ୍ତୁ |
ନିମ୍ନରେ ଏହି ଆଲଗୋରିଦମର କିଛି ଉଦାହରଣ ଦିଆଯାଇଛି:
2.6। ଶେଷ ପତାକା ଯୋଡନ୍ତୁ |
ଅନ୍ତିମ ପଦକ୍ଷେପ ହେଉଛି ଫ୍ରେମର ଶେଷରେ ଶେଷ ପତାକା 0x7E ଯୋଡିବା | ଏହା ପରେ, ତଥ୍ୟ UART ପୋର୍ଟକୁ ପଠାଯାଇପାରିବ |
ଡି-ଫ୍ରେମ୍ ପ୍ରକ୍ରିୟା |
ଯେତେବେଳେ UART ରୁ ଡାଟା ଗ୍ରହଣ କରାଯାଏ, ଆମେ ଏହାକୁ ଡିକୋଡ୍ କରିବା ପାଇଁ କେବଳ ଓଲଟା ପଦକ୍ଷେପ କରିବା ଆବଶ୍ୟକ |
4। ସନ୍ଦର୍ଭ
ପୋଷ୍ଟ ସମୟ: ଫେବୃଆରୀ-08-2022 |