Förmodligen har du löst det nu, men om inte..
En variant är att escapa de värden som används aktivt i lågnivå protokollet, tex ditt 'SYNC' tecken, så att det aldrig kan komma i data eller header/CRC. Nu skickar du ju över BT, och kanske har odentligt knökigt med bandbredden, men annars är 9-bit protokollet guld om man har koll på hårdvaran mellan burkarna.
Vad gäller CRC, så är det ju beroende på hur mycket processor du har i bägge ändorna, personligen har jag slutat använda CRC16 i de flesta sammanhang, eftersom det ofta inte kostar speciellt mycket mer processor med CRC32, som är många gånger bättre. Man kan tycka att CRC16 borde räcka, men jag har på ett tidigare jobb, insett att då och då så faller det igenom och missar fel.
Har du mer processor, eller/och kryptosupport i processorn, kan MD5 vara ett ännu bättre alternativ. Fast det kostar betydligt mer processor än CRC, dessutom är det 16 bytes att skicka istället för 2 alt. 4, vilket kanske är droppen för din bandbredd.
Att sända med DMA är absolut bäst, och *oftast*

inte speciellt knepigt. Om man har längden först i headern, så kan man även få till rx med DMA med lite trixande. Interrupts tar som bekant snabbt död på den bäste av processorer, fast DMA är ju jobbigare att avlusa, så kanske mer intressant att hoppa på när man behöver cyklerna senare i projektet..
