We're working on the CC430F5137 and we came across a problem with the single byte reading.
Here's a detailed descriptions one of our developers wrote:
Abstract
Single byte read of a radio register does not work.
Description
When trying to perform a single byte read from a radio register using RF1A library ReadSingleReg() implementation, the radio interface data out interrupt flag (RFDOUTIFG) in RF1AIFCTL1 register sometimes fail to set. When the RFDOUTIFG flag fail to set it will cause the internal while statement to loop forever hence stalling the application.
Scenario
The radio is configured to MCSM1 = 0x0F. The firmware application transmits and receives messages to/from clients over the air. When trying to read current RSSI value from the radio RSSI status register, while clients transmit to the application, then there is a good chance that after a finite number of iteration the read operation won't work. If no client traffic exists (no message to be received by the application radio) then the operation would work.
Conclusion
We suspect that pooling the radio interface (reading RF1AIFCTL1 register in a loop) while in RX mode and simultaneously receiving an incoming message accounts for this failure. It may be related specifically to RSSI register or to its internal update mechanism.
Work around
We are looking for a work around and also considering the following:
- Limiting the number of iterations that ReadSingleReg() while statement would perform.
- Checking error flags.