Рейтинг:
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/...). Мне нужно время, чтобы изучить его. Я не уверен, что он работает на моем целевом изображении. Это область, с которой я не знаком. Обновите его позже.