Jump to content

    
Sign in to follow this  
Gvozdidir

Можно ли поменять в драйвере Com порта значения пинов?

Recommended Posts

В большинстве своем выпускают железки с урезанным Com-портом, мне нужна ножка DCD, с помощью нее, я завожу метку времени от GPS приемника и получаю достаточно сносную нестабильность NTP сервера, без нее все хуже на порядок, смотри рисунки.

Думаю как переиначить драйвер com-порта, чтобы я подавал сигнал на CTS, а драйвер был уверен, что это DCD. Хотел попробовать сначала на винде, но в целом мне это на юбунту надо положить.

Пробовал usb-rs микруху с полным Uart, но за счет уже драйвера USB, хорошую стабильность получить не удалось.

DCD.jpg

без DCD.jpg

Share this post


Link to post
Share on other sites
1 час назад, Gvozdidir сказал:

В большинстве своем выпускают железки с урезанным Com-портом, мне нужна ножка DCD, с помощью нее, я завожу метку времени от GPS приемника и получаю достаточно сносную нестабильность NTP сервера,

Просто какой-то поток сознания или фраза выдранная разговора с самим собой из середины... 

Что за железки? Кто выпускает? Чем это плохо? О чём вообще речь? И при чём тут NTP???  :wacko2:

1 час назад, Gvozdidir сказал:

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

Что за драйвер? Зачем его "переиначивать"? И почему невозможно подать что-то на CTS и как этому мешает "драйвер"??

1 час назад, Gvozdidir сказал:

Пробовал usb-rs микруху с полным Uart, но за счет уже драйвера USB, хорошую стабильность получить не удалось.

К концу сообщения выясняется что видимо об USB-UART чипе.... или нет?

 

PS: Может изложите вопрос вразумительно?

Share this post


Link to post
Share on other sites
2 hours ago, jcxz said:

Просто какой-то поток сознания или фраза выдранная разговора с самим собой из середины... 

Что за железки? Кто выпускает? Чем это плохо? О чём вообще речь? И при чём тут NTP???  :wacko2:

Что за драйвер? Зачем его "переиначивать"? И почему невозможно подать что-то на CTS и как этому мешает "драйвер"??

К концу сообщения выясняется что видимо об USB-UART чипе.... или нет?

 

PS: Может изложите вопрос вразумительно?

Извиняйте, действительно сумбурно и не связно описал проблему, так как сам долгое время копался, думал, что данных сведений достаточно.
Железка не важна, я поднимаю сервер точного времени от GPS приемника по Com порту на винде 10, но также и на RockChip`e 3399, и на Nvidia nano. В конечном итоге все будет крутиться на RK3399 под Юбунтой, а у него есть только 4 пина(Rx,Tx,CTS,RTS).

На винде проще всего тестить. Так как есть полный Rs232, в котором есть первый пин DCD(Наличие несущей (Carrier Detect)).

Метка времени имеет стабильность в 10 нс. Подавая ее на DCD я здорово повышаю стабильность времени NTP сервера от Meinberg. http://www.satsignal.eu/ntp/NTP-on-Windows-serial-port.html 

про USB-Uart чип я имел ввиду, что пробовал такой путь, подключал юсб свисток, а к нему подключал навигационный приемник, но он не решил моих проблем.

Вопрос заключается в следующем, могу ли я обмануть драйвер Com порта, и заставить систему думать, что ножка CTS, на самом деле DCD. По описанию порта, у нее только 2 и 3 ноги(Rx,TX)железно прописаны и переназначить их нельзя, а вот оставшиеся вроде можно, но не смог найти как.

Share this post


Link to post
Share on other sites

А если переосмыслить задачу?

Не "обмануть драйвер", а сконфигурировать либо пересобрать ту программу, которая потребляет данные от драйвера.

Чтобы она ожидала импульсы pps не по DCD но CTS.

Share this post


Link to post
Share on other sites
1 час назад, Gvozdidir сказал:

про USB-Uart чип я имел ввиду, что пробовал такой путь, подключал юсб свисток, а к нему подключал навигационный приемник, но он не решил моих проблем.

Вопрос заключается в следующем, могу ли я обмануть драйвер Com порта, и заставить систему думать, что ножка CTS, на самом деле DCD. По описанию порта, у нее только 2 и 3 ноги(Rx,TX)железно прописаны и переназначить их нельзя, а вот оставшиеся вроде можно, но не смог найти как.

Ну во-первых: Зачем обманывать? Можно работать с COM-портом без управления потоком (см. SetCommState()), а изменение ножки CTS (да и любой другой) ловить через WaitCommEvent().

А во-вторых: Часто GPS-приёмники (с UART-интерфейсом) синхронизируют начало выдачи данных по TXD с сигналом PPS. Так что может и CTS не нужен (смотря где, под RTOS - не нужен, можно получать PPS по TXD).

А в-третьих: Самая главная проблема под виндой будет то, что винда - не RTOS (не ОС реального времени). А значит на уровне прикладной задачи ни о каком гарантированном времени реакции на аппаратное событие (шевеление ноги CTS или шевеление TXD) нельзя говорить. И если нужно такое время реакции, то тогда нужно спускаться на уровень драйверов и писать свой драйвер. Имха.

 

PS: Про USB я вообще молчу - там кроме времени реакции прикладной задачи на аппаратное событие (внутри ОС), есть ещё и время реакции на сигнал чипа USB-UART и время передачи этим чипом сообщения о событии через всю цепочку USB-хабов к хосту (время это - неопределённое). И о наносекундах и даже о мкс - можно вообще сразу забыть, а о мс думать только если ваше устройство - единственное на USB-хабе.

Share this post


Link to post
Share on other sites
12 minutes ago, Vladivolt said:

А если переосмыслить задачу?

Не "обмануть драйвер", а сконфигурировать либо пересобрать ту программу, которая потребляет данные от драйвера.

Чтобы она ожидала импульсы pps не по DCD но CTS.

пересобрать чужой NTP можно, и наверное, так и придется сделать. Но скорее всего не поможет, так как DCD работает по особому прерыванию, а задержка по прерыванию CTS мне кажется, совсем другая.

Share this post


Link to post
Share on other sites
10 minutes ago, jcxz said:

А во-вторых: Часто GPS-приёмники (с UART-интерфейсом) синхронизируют начало выдачи данных по TXD с сигналом PPS. Так что может и CTS не нужен (смотря где, под RTOS - не нужен, можно получать PPS по TXD).

А в-третьих: Самая главная проблема под виндой будет то, что винда - не RTOS (не ОС реального времени). А значит на уровне прикладной задачи ни о каком гарантированном времени реакции на аппаратное событие (шевеление ноги CTS или шевеление TXD) нельзя говорить. И если нужно такое время реакции, то тогда нужно спускаться на уровень драйверов и писать свой драйвер. Имха.

 

Я для того картинки и приложил, существенная разница с сигналом DCD и без под виндой. Да, ОС не реального времени, но мне хватает.
Сам приемник по TxD не может дать толковый pps так как привязан к обслуживающему ее контроллеру, как правило АРМ с не самым стабильным тактовым генератором, а вот PPS он генерит от коррелятора с высокостабильным генератором. 

Share this post


Link to post
Share on other sites
9 hours ago, gosha-z said:

Я правильно понимаю, что борьба идет за реализацию fudge???

именно. Устройство предполагается метрологическим. Поэтому стремлюсь выжать самый сок.

Share this post


Link to post
Share on other sites
20 часов назад, Gvozdidir сказал:

Да, ОС не реального времени, но мне хватает.

А теперь попробуйте посвёртывать/поразворачивать различные окошки.  :wink:

Share this post


Link to post
Share on other sites
9 minutes ago, gosha-z said:

Так я так и сделал, для точной pps использовал DCD. Но на платах которые в будущем предполагается использовать нет DCD, есть только (Rx,Tx,CTS,RTS), хочу переназначить драйвер Com порта, чтобы CTS воспринимал как DCD.

Share this post


Link to post
Share on other sites
20 hours ago, Gvozdidir said:

Сам приемник по TxD не может дать толковый pps так как привязан к обслуживающему ее контроллеру, как правило АРМ с не самым стабильным тактовым генератором, а вот PPS он генерит от коррелятора с высокостабильным генератором

наверное можно завести PPS прямо на RX (второго порта)? с правильной полярностью и возможно его удлиннить придётся. 

а у Rockchipa таймеры есть для правильного захвата pps.

Share this post


Link to post
Share on other sites
54 minutes ago, jcxz said:

А теперь попробуйте посвёртывать/поразворачивать различные окошки.  :wink:

Хехе, пробовал и открывать и закрывать, и боевую задачу запускал, распознавания, сжатия и распихивание по сети видео. с использованием DCD см. первый рисунок, не было. Статистику собирал месяц, результат просто отличный.

Share this post


Link to post
Share on other sites
6 minutes ago, _pv said:

наверное можно завести PPS прямо на RX (второго порта)? с правильной полярностью и возможно его удлиннить придётся. 

а у Rockchipa таймеры есть для правильного захвата pps.

У меня программисты заняты другими задачами, и пока я не докажу им что это работает на винде, за Рокчип и не возьмутся, чтобы не распыляться, по таймерам на Рокчипе не задумывался, тут тоже может быть и проблема.
Насчет второго порта возможно хорошая идея, но вижу нюанс, он скорее всего не поймет, что я подаю PPS на RX, так как ждет ее именно с DCD. Покурю мануал, может что и получится...

мой конфиг для NTP сервера:

server 127.127.20.4 mode 80 minpoll 3 maxpoll 3 iburst prefer #80-скорость RS-232 ->115200
fudge   127.127.20.4 flag1 1 flag3 1 Flag2 1
server 127.127.22.4 mode 80 minpoll 4 
fudge   127.127.22.4  flag3 1 #flag2 1

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this