Я столкнулся с проблемой синхронизации с последовательным портом в C. Короче говоря, я посылаю команду устройству с одной скоростью передачи данных (скажем, 9600) и ожидаю ответ от него на другом (скажем, 38400).У меня нет контроля над этим протоколом.Прототип ситуации будет выглядеть следующим образом:
open() serial port
set baud rate to 9600 using termios struct
write() command
change baud rate to 38400 using termios struct
read() response
Я столкнулся с проблемой, когда устройство не понимает команду, которую я послал, потому что скорость передачи данных меняется на 38400, прежде чем завершить запись.Я почти уверен, что запись работает нормально, потому что она возвращает количество байтов, которые я намереваюсь записать.Я попытался добавить usleep (100000) после вызова для записи, и хотя это иногда работает, я не могу гарантировать, что все сообщение будет передано на 9600, прежде чем я изменю скорость передачи и прочту ответ.Я также попытался очистить буфер с помощью tcflush (fd, TCOFLUSH), но я не хочу отбрасывать какие-либо данные, так что это также не правильный путь.
Как я могу принудительно записать все последовательные данные и гарантировать ихнаписано перед следующим вызовом, чтобы изменить скорость передачи данных до 38400?Похоже, что это происходит на уровне микросхемы, поэтому моя единственная надежда - включить библиотеки FTDI (это микросхема FTDI) и получить доступ к регистрам, чтобы увидеть, когда данные будут переданы?Спасибо.