Stan Huang Ответов: 1

Как получить текущую настройку скорости передачи в бодах в vxworks?


Я обновил свое приложение A VxWorks. RS-232 мишени подключен к сенсорной панели. По какой-то причине я должен знать его скорость передачи. Я заглянул в интернет и нашел только способ установить скорость передачи данных в бодах:
ioctl (fPipe, FIOBAUDRATE, 19200);

В файле (ioLib. h), содержащем FIOBAUDRATE, я не могу найти ни одной команды, которая выглядела бы как получение скорости передачи данных в бодах.

Я нашел два определения в sioLib.h: SIO_BAUD_GET & SIO_BAUD_SET, но SIO_BAUD_GET, похоже, не работает со скоростью get baud.

Как я могу получить скорость передачи данных в бодах моей текущей настройки RS-232?

Что я уже пробовал:

Я попытался запустить способы, как указано выше, и поискал в своих заголовочных файлах, но не нашел ничего, что могло бы ответить на мой вопрос.
Я погуглил эту проблему, но напрасно.

Richard MacCutchan

Что касается отзыва, то нет никакого способа получить скорость передачи данных в бодах по последовательному каналу. Обычный метод работы с неизвестными скоростями состоит в том, чтобы попробовать различные настройки и повторить некоторые данные, чтобы увидеть, является ли возвращаемое значение допустимым.

Stan Huang

Это тоже моя идея. Я очень рад получить здесь одобрение.

1 Ответов

Рейтинг:
6

Jochen Arndt

По-видимому, общего документированного метода не существует. Он может поддерживаться для конкретных последовательных драйверов. Таким образом, вы должны проверить документацию используемого драйвера / интерфейса. В качестве альтернативы попробуйте использовать SIO_BAUD_GET ioctl вызов. Результат должен указывать, поддерживается ли он драйвером.

В крайнем случае вы можете попытаться получить доступ к аппаратному обеспечению последовательного интерфейса непосредственно на уровне порта и прочитать настройки. Но для этого требуется прочитать технический паспорт интерфейса (например, внешний чип или SoC).

Но зачем вам нужна текущая настройка?
Для правильной коммуникации вы должны установить его в любом случае, если он не соответствует. Так что просто установите его на нужную скорость. И как только вы успешно установили скорость, вы знаете текущую настройку.


Stan Huang

1. О ссылочном драйвере / интерфейсе doc.: я искал файл, содержащий FIOBAUDRATE, и никакие команды не выглядят так, как получение скорости передачи в бодах.
2. О SIO_BAUD_GET: я сделал это и обнаружил, что ошибка была возвращена, что означает, что она не поддерживается.
3. О чтении регистра h/w: это может быть решением.
4. о причине, по которой нужно читать настройки: коды от других слишком грязные. Потребуется много времени, чтобы найти исходную точку отсчета. Кроме того, я просто хотел бы дважды подтвердить это. Мне было поручено обновить старые коды для новой сенсорной панели, скорость передачи данных которой хорошо известна, но скорость передачи данных старой панели должна быть исследована, так как данные были потеряны. Чтение скорости передачи данных напрямую может сэкономить время, если это возможно.

Jochen Arndt

Чтобы найти его в старом коде, вы можете поискать исходные файлы для FIOBAUDRATE. Linux имеет команда grep команда для таких поисков. Он также доступен для Windows при установке UnxUtils (unxutils.sourceforge.net).

Чтобы исследовать старую скорость передачи данных, вы можете использовать логический анализатор или осциллограф (например, тот, который может хранить образцы в памяти), подключенный к последовательной линии.

Stan Huang

1. о поиске FIOBAUDRATE: звучит неплохо, но, к сожалению, я не могу найти его появления в исходных кодах. Я тоже не могу найти оригинального дизайнера, чтобы объяснить это. Я нашел его появление только в исходных кодах последовательного драйвера (case FIOBAUDRATE). Очевидно, что это код для настройки скорости передачи в бодах.
2. Измерить с помощью анализатора или осциллографа: я инженер оборудования, чтобы сделать это.

Jochen Arndt

Вы также искали SIO_BAUD_SET или проверяли, есть ли вызов ioctl, который устанавливает несколько параметров с помощью структуры?

Stan Huang

1. О SIO_BAUD_SET: я не могу найти коды в прикладной программе, вызывающей ioctl с помощью команды SIO_BAUD_SET, кроме того, который я добавил, но нашел возврат ошибки, и другого, который предназначен для последовательного порта, отличного от того, который меня интересует. Интересно, в чем разница между SIO_BAUD_SET и FIOBAUDRATE? Я просмотрел множество статей об одном из них, но никаких объяснений их разницы не нашел.
2.я нашел фрагмент кода, вызывающий ioctl с командой SIO_BAUD_SET в папке драйвера (wind/target/src/...). Мне нужно время, чтобы изучить его. Я не уверен, что он работает на моем целевом изображении. Это область, с которой я не знаком. Обновите его позже.