Hi Jonas,
an RF transaction is basically a Command sent by the reader followed by a Response sent by the tag. When using standard ISO15693 commands, the same 26 kbps bit rate is used for both the Command and the Response. When using a fast command, the 52 kbps bit rate is only used for the Response sent by the tag whereas the Command still uses a 26kbps bit rate.
When using the Fast Read Message to read the full mailbox, the response is a 259 bytes frame: 1 (response flag) + 256 (payload) + 2 (CRC).
When using the Fast Write Message, the response is only a 3 bytes frame (response flag + CRC). Thus compared to the gain for Fast Read Message vs Read Message, the gain on Fast Write Message vs Write Message is very marginal. Same for Fast Read Dynamic Configuration vs Read Dynamic Configuration (4 bytes).
What I see in your code: after a message is written from RF side, a getMessageOwner is called without any delay and in case of error some retries are attempted every 10 ms. I suspect that in case of Fast Write Message, the getMessageOwner is performed slightly before compared to the Write Message case and thus colliding with mailbox reading from I2C (==> error ==> delay 10ms). I would suggest to instrument your code to store the tick before the Write Message then before the getMessageOwner then before and after the Read Message. Also I would store the number of retries for each getMessageOwner for a given sequence. I would print the values on the serial port just after the end of a given sequence to avoid introducing serial com delays inside the sequence. Then compare Fast and non-Fast. If you see more collision in getMessageOwner in case of Fast commands, I would suggest to add an short initial delay before the getMessageOwner and to reduce the 10ms delay.
By the way, and FTM implementation is available in the ST25 embedded NFC library (FTM demo). I would suggest to have a look on it.
Rgds
BT