## 2 The Basic Principle of BA  
In this section, the principle of the blocking anti-collision protocol (BA) is presented. BA protocol was proposed as an improvement to the adaptive binary splitting protocol (ABS). Before delving into the principle of BA, some other definitions should be introduced first. The cycle is the time duration from the transmission of the reader signal till the reception of the tags' responses, while the collision cycle is the simultaneous response of multiple tags or the response of one tag with an interference signal and no distinction between collision and interference response. The frame is the duration from the moment of reading the first tag to the last tag in the reader interrogation zone. The ABS protocol surpasses the binary tree (BT) protocol through less collision cycles and through memorizing the cycles in which each tag has responded during the past identification frame in the _ASC_ tags counter. However, ABS protocol cannot separate between the arriving and staying tags, as well as the tags that were not executed in the past frame but executed in the current frame, and the tags that were executed in the past and current frame, respectively. Thus, the arriving tags may take the same of _ASC_ values stored by the staying tags. Therefore, BA protocol was proposed to separate the arriving and staying tags through assigning different _ASC_ values for the arriving tags to avoid colliding responses between the arriving and staying tags. Moreover, BA protocol uses two counters for the tags, _pc_ and _ASC_, in which _pc_ is initialized to zero at the beginning of each frame and represents the number of the recognized (identified) tags through the frame, i.e., it is increased by one for all tags that have still not been recognized after each successful response, whilst _ASC_ represents the cycle through which each tag responds. In addition, the reader owns three counters: _pcr_, \(T\), and _nc_. _pcr_ has the same operation as _pc_, in which it is increased by one after each success cycle (success cycle: one tag response with successful reader decoding). \(T\) represents the number of the initial allocated cycles in each frame and is utilized to end the ongoing frame when _pcr_ \(>\)_T_. Lastly, _nc_ is used to calculate the number of arriving tags for the purpose of tags estimation. The operation of BA protocol is shown in Figure 1 and is summarized in the following steps:  
**Step 1:** The reader transmits a starting command (_Sc_) to start a new frame by transmitting \(T\) and _Tx_; then, they reset its counters _pcr_ and _nc_ to zero and set \(T=Tx\). **Step 2:** When receiving the _Sc_, the tags reset their counter _pc_ to zero and set the other counter _ASC_ (denoted by _Ac_) as follows:  
If \(Tx=0\) (the starting frame)  
\(Ac=\ 0\)  
If \(Tx\
eq 0\) & \(Ac=null\) (arriving tag)  
\(Ac=random\ integer\ (T+1,\ Tx)\)  
If \(Tx\
eq 0\) & \(Ac\ \
eq\ null\) (staying tag)  
\(Ac=Ac\), i.e., retain _Ac_ of the old frame  
**Step 3:** After the transmission of the reader signal (starting frame or feedback signal), its counters \(T\), _pcr_, and _nc_ are adjusted according to the detected received signal as follows:  
If the received signal is a non-blocking signal, i.e., there is no collision or interference:  
\(\ pcr=\ pcr+\ 1\), state (reader feedback signal) = \(s\) (success cycle) & {\(nc=nc+1\) if _pcr_ \(>\)_pcold_}  
If the received signal is a blocking signal:  
state = \(c\) (collision cycle) & \(T=\ T+1\)  
If no signal **is** detected (after a certain time delay):  
\(\ \\(pc\ =\ pc\ +\ 1\)  
If state = \(c\)  
If \(Ac\ =\ pc\) yields \(Ac\ =\ Ac\ +\ random\ integer\ (0,\ 1)\)  
If \(Ac\ >\ pc\) yields \(Ac\ =\ Ac\ +1\)  
If state = \(d\)  
\(Ac\ =\ Ac\ 1\)  
Then, each tag transmits its response to the reader only if \(Ac=pc\), or once the condition is met during the next cycle (if not identified yet) or next frame (if it is already identified).