I've spoken with guys at Microchip (the company that bought Roving Networks, who were the original makers of the RN42) about this type of problem, and it seems that there is an unfortunate little "feature" that is not documented anywhere in the RN42 manuals.
When the RN42 is used to communicate with an iOS device, it cannot communicate faster than 2.5-3kB/s... If it's used to communicate with an Android or computer or anything else, it can transfer at 35kB/s (over SPP).
The reason for this is an under-powered chip in the RN42, which can't handle both the BT stack AND re-packaging bytes in the format an iOS device needs (iAP protocol).
They recommend the following options:
- Switch to using a WiFi module.
- Implement the iAP protocol on your microcontroller and use a vanilla RN42 to transfer data (which should theoretically be back at 35kB/s).
- Buffer data on your device, and send it back at the slower rate.
- Use a vanilla RN42, and one of their PIC devices which implements the iAP stack.
I have a polite 5th suggestion... Find a new Apple-supported Bluetooth module.
Additionally, using 4-wire UART communication should help with the crashes.