TXADDRESS, RXADDRESSES registers: what are these and how we can use them?

Based on the NRF Radio manual, the over the air address of the packets, is configured using "BASEn" and "PREFIXn" registers.

However, there are 
also two other registers called "TXADDRESS" and "RXADDRESSES".

ThinkingThinking What is the application of these registers and how we can use them?

My current reading of the specification tells me that these are used to facilitate the filtering of the unwanted packets in the hardware level but I am not sure.

The BLE standard does not seem to have any instructions for this type of addresses (which is called logical addresses sometimes in the NRF Radio specification). Is this something that NRF has designed for extra flexibility and fast filtering and connection?


As far as APIs are concerned, I have found the following:

NRF_RADIO->RXADDRESSES = (uint32_t)(rxaddresses);
NRF_RADIO->TXADDRESS = ((uint32_t)txaddress) << RADIO_TXADDRESS_TXADDRESS_Pos;
 
Could you tell me what does the left shift operation in the second code do? (why we do that)

Thanks
  • Hi,

    Omid said:

    What I have realized, by trial and error, is that no matter what is used for base and prefix addresses, the radio always gives back the Address, Payload and End signals and populates the packet pointer, is this something expected? Because based on our discussion here, I am not suppose to get any populated packets if the addresses are not matching.

    Well, at first I thought that might be just a coincidental match, but I tried several random and weird addresses, but it seems that the radio populates the packet pointer regardless. I believe it is very unlikely that I would always get such coincidental matches.

    Also, I should mention that I have tried a very ridiculously large prefix and in that case the radio did not populate the pointer and the address, payload, and end signals are not received. However, I am not very sure about the fact that having such a long prefix is right thing to do.

    Can you share what you are setting in the registers?

    If you set an address that you're not listening to, it should not give you an address match unless a payload with that specific address is registered.

     

    Kind regards,

    Håkon

  • Hi Hokan, thanks for the reply. The issue was essentially the fact that I thought BIT(1) gives the bit-map of "0b00000001". Then I realized the thing I am looking for is BIT(0) to be used by RXADDRESSES. When I was passing a wrong bit-map, it populated the pointer even-though there was not any match and the address and payload and end also were given back. Once I switched to the write bit map, everything started working flawlessly. 

Related