Если речь идет о порте UART, то посылку лучше через буфер с рассчитанной КС - далее забота п/п обработки прерывания. Прием тож через прерывания, обычно скорость позволяет считать КС на лету, и ессно кидаем всё в буфер приёма (размер которого можно выбрать по макс. длине сообщения/пакета)
по окончании приема, если КС в норме, выдавать флаг запроса обработки буфера, еще по прерыванию таймера предусмотреть таймаут незавершенного приема, и если работа с адресацией узлов использовать лучше селективный адрес/данные 9-битный режим.