реклама на сайте
подробности

 
 
> Драйвер для 6 UART на PCI шине, как быстрее поднять?
Hoodwin
сообщение Nov 21 2013, 21:43
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 881
Регистрация: 21-03-10
Из: _// \\_
Пользователь №: 56 107



Имеется плата PCI, где на ПЛИС сделаны 6 UART с драйверами RS-232. Написана PCI функция, которая управляет шестью UART 16550A, тоже самописными. Все это более менее проверялось раньше по отдельности, но теперь вот есть желание запустить порты из-под линукс. Особенность платы в том, что она позволяет делать резервирование RS-232, то есть кроме самого UART 16550 каждый порт имеет логику, которая управляет выключением микросхемы соответствующего драйвера RS-232. Эта логика имеет определенные настройки, которые определяют правила отключения драйвера в зависимости от состояния внешних сигналов.

Все UART представляют собой стандартные 8 регистров, которые расширены нулями до 32-битных слов и размещены в одном BAR по смежным адресам.

Собственно интересует наиболее простой путь подружить линукс со всеми 6 портами. Пока представляются следующие способы:
1) Писать с нуля PCI драйвер ос своими PID, VID.
2) Подсмотреть готовые конфигурации UART в исходниках драйверов линукс, и изменить PID, VID своего устройства в соответствии с подходящим профилем из поддержаных.
3) Написать свой минидрайвер, который будет находить устройство на шине PCI и регистрировать его UART'ы как serial8250 platfrom_device. После чего его и линукс сам подхватит.

Если делать свой драйвер (модуль), то можно в нем зарегистрировать атрибуты портов, чтобы можно было настраивать правила его резервирования. Не уверен, можно ли это сделать, если пытаться подстроиться под существующий драйвер для шины PCI.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Hoodwin
сообщение Nov 26 2013, 15:56
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 881
Регистрация: 21-03-10
Из: _// \\_
Пользователь №: 56 107



sasamy

Ну, вот раньше в CheckIT были тесты ком-портов, которые проверяли правильность работы UART-а. Например:
1) Правильность логики установки статусов внешних сигналов
2) Правильность работы механизмов RTS-CTS
3) правильность работы флагов прерываний на передачу, прием данных и таймаут приема,
4) Правильную работу регистров MSR, LSR.
5) Правильную работу контроля четности.
6) Отсутствие пропадания прерываний при скоростном обмене.
7) Точность бодового генератора.

Короче говоря, интересен некий формальный тест, выдающий на выходе да или нет. И если нет, то какая именно проверка не прошла. Причем не нужно много кнопок давить, запустил программу с именем терминала и все, тест пошел.

К сожалению, я не смог найти внятного описания как правильно работать с FIFO в через драйвер 8250. Точнее, как управлять его настройками. Судя по коду, драйвер сам принимает решение об использовании FIFO, исходя из типа UART. Ну например, для стандртного UART 16550A выбирается FIFO threasholds 8 и все. Ни разу не видел, как через stty это скорректировать. И даже просто как посмотреть, то что есть по факту, не особо описано. В QNX и то куда более внятно было расписано.
Go to the top of the page
 
+Quote Post
sasamy
сообщение Nov 26 2013, 20:02
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(Hoodwin @ Nov 26 2013, 19:56) *
Ну, вот раньше в CheckIT были тесты ком-портов, которые проверяли правильность работы UART-а. Например:


Таких тестов скорей всего не найдете - если только у производителей многопортовых плат на сайтах рыть

Цитата
7) Точность бодового генератора.


и типа можно верить этим измерениям ? лучше измерить осцилом - посылать в порт число 0x55 и смотреть частоту.

Цитата
драйвер сам принимает решение об использовании FIFO, исходя из типа UART.


зачем пользовательским программам управлять размерами аппаратного FIFO - чтобы отключить, указываете тип уарта без FIFO (16450) в setserial.

Сообщение отредактировал sasamy - Nov 26 2013, 20:07
Go to the top of the page
 
+Quote Post
Hoodwin
сообщение Nov 27 2013, 20:27
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 881
Регистрация: 21-03-10
Из: _// \\_
Пользователь №: 56 107



Цитата(sasamy @ Nov 27 2013, 00:02) *
Таких тестов скорей всего не найдете - если только у производителей многопортовых плат на сайтах рыть

Жаль, я думал, в линуксе подобные вещи есть.

Цитата(sasamy)
и типа можно верить этим измерениям ? лучше измерить осцилом - посылать в порт число 0x55 и смотреть частоту.

Не вижу принципиальной разницы, чем мерить. Точность и стабильность бодового генератора не зависят от делителя, поэтому для измерений можно взять скорость ну хоть 9600. Но зато на такой скорости можно обеспечить выдачу подряд большого количества байт без зазоров, и измерив время передачи можно вполне точно измерить время одного бода. Осциллограф сам по себе довольно неточно меряет частоту, даже для периодического сигнала типа тактовой частоты он может выдавать значения с разбросом около 1%, если не больше.

Цитата(sasamy)
зачем пользовательским программам управлять размерами аппаратного FIFO - чтобы отключить, указываете тип уарта без FIFO (16450) в setserial.

Ну вот, например, у нас был один проект, где протокол был так устроен, что передавались посылки по два байта, с периодом в 20-30 байтовых интервалов. В протоколе не было никаких признаков первого байта, за исключением того, что он первый после паузы. И вот когда сели делать через /dev/ser* (дело было под QNX), то выяснилось, что никак нельзя гарантировать синхронизацию по первым байтам. Тогда включили FIFO с порогом 4, и стали ловить прерывания по таймауту данных. С помощью этого прерывания синхронизацию удалось восстановить. Таким образом, аппаратные особенности UART вполне могут играть ключевую роль при программировании решения. Конечно, можно сказать, что берите и пишите для такого случая специальный драйвер. Можно было бы согласиться, однако в случае многопортового устройства появляется нюанс. Как поределить какой порт к какому драйверу приписывать. Обычно все порты автотматически цепляются каким-то одним драйвером.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Nov 28 2013, 02:05
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(Hoodwin @ Nov 28 2013, 00:27) *
Как поределить какой порт к какому драйверу приписывать. Обычно все порты автотматически цепляются каким-то одним драйвером.


Драйвер будет один, но устройства разные. Драйвер всегда знает с каким устройством он работает в данный момент.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Hoodwin   Драйвер для 6 UART на PCI шине   Nov 21 2013, 21:43
- - Tarbal   Вот посмотрите: http://www.sealevel.com/support/ar...   Nov 22 2013, 01:09
- - Hoodwin   Посмотрел. Пока ничего путного не вынес из докумен...   Nov 22 2013, 06:55
- - Tarbal   Но первый-то вариант без сборки кернела. там вооб...   Nov 22 2013, 12:33
- - federal   жаль мне заказчика   Nov 22 2013, 15:09
- - xor.kruger   Естественно Вам придется писать свой драйвер, т.к....   Nov 22 2013, 15:59
- - Hoodwin   Да драйвер-то написать можно, есть и свои драйверы...   Nov 22 2013, 17:06
- - xor.kruger   ЦитатаЯ надеялся, что линукс сам может определить ...   Nov 22 2013, 18:57
- - Hoodwin   Дык на ПЛИС я как раз могу довольно просто передел...   Nov 22 2013, 19:07
|- - gerber   Цитата(Hoodwin @ Nov 22 2013, 22:07) Дык ...   Nov 24 2013, 07:36
- - Methane   Цитата(Hoodwin @ Nov 21 2013, 23:43) 1) П...   Nov 23 2013, 16:56
- - Tarbal   lspci показывает ваше устройство? Если да lspci -...   Nov 23 2013, 23:53
- - Hoodwin   Да, в итоге действительно потратил полтора часа вр...   Nov 24 2013, 19:47
|- - Dron_Gus   Цитата(Hoodwin @ Nov 24 2013, 23:47) 1) м...   Nov 25 2013, 12:08
|- - Methane   Цитата(Dron_Gus @ Nov 25 2013, 14:08) cat...   Nov 25 2013, 12:20
|- - Tarbal   Цитата(Methane @ Nov 25 2013, 15:20) Долг...   Nov 25 2013, 12:47
|- - Dron_Gus   Цитата(Methane @ Nov 25 2013, 16:20) Долг...   Nov 25 2013, 12:51
- - Hoodwin   В общем вот что имеем: Цитата# cat /boot/config-2....   Nov 26 2013, 07:18
- - Hoodwin   --- Да, вот попробовал написать в комстроку ядра 8...   Nov 26 2013, 08:35
|- - sasamy   Цитата(Hoodwin @ Nov 26 2013, 12:35) Видн...   Nov 26 2013, 13:09
|- - Tarbal   deleted by Tarbal   Nov 26 2013, 13:18


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 2nd August 2025 - 23:56
Рейтинг@Mail.ru


Страница сгенерированна за 0.01454 секунд с 7
ELECTRONIX ©2004-2016