- Silicon Labs Community
- Welcome and Announcements
- Silicon Labs Knowledge Base
- 8-bit MCU
- 32-bit MCU
- Bluetooth / Wi-Fi
- Other Products Category
- Optical/RH/Temp Sensor
- Other Products
- Hardware and Software Tools
- Simplicity Studio and Software
- General Discussions and Suggestions
- Chinese Forum
- Software Libraries
- Development Kits
- Reference Designs
- Third Party Tools
- White Papers
- Official Blog of Silicon Labs
- Chinese Blog
10-05-2017 10:11 AM
I have a few questions about RAIL address filtering.
1) The documentation states it only works upto 500kbps for the time being. Is this still valid? If so, when will this limit be lifted? Is it a software issue or does it require newer hardware? Does it depend on the complexity of the configured filter?
2) I don't grasp the truth table. What do 0000, 0001, 0010, 0100, 1000 stand for? On both axes. Is the one a field and the other an index? If so, which is which? Where does it even say how many fields and indices I can use?
From what I understand now you can define several address fields and you can accept several address values at each field. Is that true?
I'm actually looking for a very simple filter of one field accepting upto three address values. But it should work at 2Mbps on an 2.4GHz EFR32FG.
But I'm also wondering what the gain is from this hardware filtering over software filtering. I assume I can let the core sleep a bit more, but the receiver is still on. Or I can let the core do more other work without interruption.
10-16-2017 03:12 AM
As the documentation says, the hardware filtering works only up to 500kbps. Above that, you have to use software filtering regardless of the complexity of the filter configuration.
I agree that the truth table is not the easiest part of the address filtering setup. However, if you need to match only three singe address values, there is a predefined value ADDRCONFIG_MATCH_TABLE_SINGLE_FIELD for this purpose.
You sould use RAIL_ConfigAddressFilter() and use matchTable=ADDRCONFIG_MATCH_TABLE_SINGLE_FIELD in RAIL_AddrConfig_t *addrConfig and fill the address table with your three addresses by RAIL_SetAddressFilterAddress() calls - however, this works ony up to 500kbps.
The gain of hardware filtering is just what you wrote - the filtering happens outside of the MCU, only receiver should be active, thus the MCU can sleep or do other tasks and and will receive an interrupt on packet available when the address matches.
10-16-2017 03:59 AM
Thanks for answering some of my questions.
1) So filtering happens in hardware, its speed does not depend on the complexity and the limit still applies. I assume from this that new hardware is required to lift 'the time being'.
2) I've read about the predefined value, but that does not explain how the truth table works. And your answer doesn't explain it either. If SiLabs does not explain this better, you might just as well replace the filter function with one where we can select only one out of the two predefined tables.