Поддержание целостности пакетов данных через последовательный порт RS-232?

Это может показаться немного простым, но когда я читаю данные, отправленные через RS-232 для чтения моим компьютером, разумно ли ожидать, что если данные были отправлены в виде одного пакета, пакет останется целым, когда пойду читать?

Например, если я отправляю 32-байтовый пакет данных через последовательный порт, и он поступает в последовательный буфер моего компьютера, могу ли я с уверенностью предположить, что данные прибывают одновременно? Я чувствую, что даже если данные были отправлены в виде пакета, есть вероятность, что только половина данных может быть в буфере на моем компьютере, прежде чем я перейду к их чтению. Поскольку пакеты имеют определенную «ширину» данных, я предполагаю, что это может создать своего рода состояние гонки, когда остальная часть пакета должна прибыть до того, как я закончу чтение буфера. Особенно, если идея «пакета» интерпретируется более свободно и означает несколько отдельных фрагментов данных, которые отправляются вскоре друг за другом (вскоре это что-то вроде цикла for для данных для отправки и вызова для них метода последовательной записи). последовательно),

Заранее благодарим за любую помощь, которую вы можете предоставить.

Это полностью зависит от стека приема вашей ОС (если есть). Вы, вероятно, не должны полагаться на это, если это возможно
Почитайте про контрольную сумму. Это может относиться к тому, о чем вы спрашиваете. И все зависит от того, насколько быстр и велик ваш буфер.

Ответы (1)

Данные не передаются по сети (если только вы не используете USB-последовательный порт), поэтому нет абсолютно никакой гарантии, что данные останутся вместе каким-то определенным образом.

Если вы «сливаете» ввод и ждете, пока входящие байты остановятся, то вы можете быть достаточно уверены, что получили все, что было отправлено, и вы можете работать в обратном направлении с конца. Если только один из байтов в середине не был потерян или поврежден.

Большинство разумных протоколов используют «маркеры» для обозначения начала или конца данных. Вот почему большинство последовательных протоколов выглядят как текст ASCII, строки которого заканчиваются символами CR/LF.