User manual
Bluetooth Low Energy
www.ti.com
After a SCAN_REQ message is transmitted, the radio CPU configures the receiver and looks for a
SCAN_RSP from the advertiser to which the SCAN_REQ was sent. If sync is obtained on the
demodulator, the header is checked once it is received, and if it is not a SCAN_RSP message, the
demodulator is stopped immediately. If it is a SCAN_RSP message, then it is received into the RX queue.
Depending on the received SCAN_RSP, the values of bCrcErr and bIgnore are as given in Table 23-122.
If pParams->scanConfig.bStrictLenFilter is 1, only length fields that are compliant with the BLE
specification are considered valid. For a SCAN_RSP, valid means a length field in the range 6–37. If
pParams->scanConfig.bStrictLenFilter is 0, all received packets with a length field less than or equal to the
maximum length of an advertiser packet (37, but can be overridden) are considered valid. If the length is
not valid, the receiver is stopped.
Table 23-122. Actions on Packets Received by Scanner after Transmission of SCAN_REQ
AdvA Same as in
PDU Type CRC Result bCrcErr bIgnore SCAN_RSP Result
Request
SCAN_RSP OK No 0 1 Failure
SCAN_RSP OK Yes 0 0 Success
SCAN_RSP NOK X 1 0 Failure
SCAN_RSP with
X X – – Failure
invalid length
Other X N/A – – Failure
No packet received N/A N/A – – Failure
After receiving or attempting to receive a SCAN_RSP, the backoff parameters are updated by the radio
CPU. The update depends on the result as given in the SCAN_RSP Result column of Table 23-122 and
the old values of the backoff parameters. The backoff parameters given in pParams->backoffPar are
updated as shown in Table 23-123. After this update, the radio CPU sets pParams->backoffCount to a
pseudo-random number between 1 and 2
pParams->backoffPar.logUpperLimit
.
Table 23-123. Update of Backoff Parameters
Old pParams->backoffPar New pParams >backoffPar
SCAN_RSP
Result
bLastSucceeded bLastFailed bLastSucceeded bLastFailed logUpperLimit
Failure X 0 0 1 logUpperLimit
Failure 0 1 0 0 min(logUpperLimit+1, 8)
Success 0 X 1 0 logUpperLimit
Success 1 0 0 0 max(logUpperLimit-1, 0)
If pParams->scanConfig.scanFilterPolicy and pParams->scanConfig.bAutoWlIgnore are both 1, the radio
CPU automatically sets the bWlIgn bit of the white-list entry corresponding to the address from which an
ADV*_IND message was received. This setting is done either after Action Number2 has been performed,
or after Action Number3 is performed and a SCAN_RSP is received with the result Success. This prevents
reporting multiple advertising messages from the same device, and scanning the same device repeatedly.
The pseudo-random algorithm is based on a maximum-length 16-bit linear-feedback shift register (LFSR).
The seed is as provided in pParams->randomState. When the operation ends, the radio CPU writes the
current state back to this field. If pParams->randomState is 0, the radio CPU self-seeds by initializing the
LFSR to the 16 least significant bits of the radio timer. This is only done when the LFSR is first needed
(that is, after receiving an ADV*_IND), so there is some randomness to this value. If the 16 least
significant bits of the radio timer are all 0, another fixed value is substituted.
When the device enters the scanning state, the system CPU must initialize pParams->backoffCount to 1,
pParams->backoffPar.logUpperLimit to 0, pParams ->backoffPar.bLastSucceeded and pParams-
>backoffPar.bLastFailed to 0, and pParams ->randomState to a true-random value (or a pseudo-random
number based on a true-random seed). When starting new scanner operations while remaining in the
scanning state, the system CPU must keep pParams->randomState, pParams->backoffCount, and
pParams->backoffPar at the values they had at the end of the last scanner operation.
1538
Radio SWCU117A–February 2015–Revised March 2015
Submit Documentation Feedback
Copyright © 2015, Texas Instruments Incorporated