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

 
 
> Linux: настройка скорости COM порта выше 115200
ovp
сообщение Apr 4 2008, 13:26
Сообщение #1





Группа: Новичок
Сообщений: 5
Регистрация: 18-10-07
Пользователь №: 31 459



Народ! Плиз хто может подскажите.
Нужно настроить СОМ порт в Linux на скорость 921600, при этом я пишу следуещее:
//=========================================================
//соответсвующие инклуды......

struct termios new_modem,old_modem;
int fdes;
char* port_name="/dev/ttyS0";
//=========================================================
int open_port(char* p_name)
{
fdes = open(p_name, O_RDWR);
if (fdes == -1)
{
printf("open_port: Unable to open %s ", p_name);
}
else
{
fcntl(fdes, F_SETFL, 0);
printf("port %s open \n",p_name);
}
return (fdes);
}
//=========================================================
void set_port_parametres(void)
{
tcgetattr(fdes,&old_modem);//Get current options for the port

new_modem.c_cflag=(B921600|CS8|CLOCAL|CREAD);
new_modem.c_lflag = 0;
new_modem.c_iflag = IGNPAR;
new_modem.c_oflag = 0;
new_modem.c_cc[VMIN] = 0;
new_modem.c_cc[VTIME]= 1;

tcflush(fdes, TCIFLUSH);
tcsetattr(fdes, TCSANOW, &new_modem); //set new options for the port
}
//==========================================================
int main ()
{
int status1;

open_port(port_name);
set_port_parametres();
ioctl(fdes,TIOCMGET,&status1);
status1&=~TIOCM_RTS;
ioctl(fdes,TIOCMSET,&status1); //RESET RTS after transmitt
fcntl(fdes, F_SETFL, FNDELAY);
}
//=======================================================

Все прекрасно компилится, работает со скоростями до 115200 включительно, а вот при попытке поставить скорость выше чем 115200 компиляция проходит без ошибок, но реальная скорость в СОМ порте не изменяется и остается 115200. Подскажите что нужно делать в таком случае. заранее спасибо.

help.gif help.gif help.gif help.gif help.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 12)
rezident
сообщение Apr 4 2008, 14:19
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



А ваш COM-порт вообще-то аппаратно поддерживает скорости выше, чем 115200?
Go to the top of the page
 
+Quote Post
vshemm
сообщение Apr 4 2008, 16:06
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 167
Регистрация: 15-08-07
Пользователь №: 29 803



И еще нужно установить в линуксе (с помощью setserial, например) нужный тип порта, который поддерживает такие скорости (и хардварно совместим с Вашим портом). Ибо по умолчанию драйвер будет думать, что это 14550, который такие скорости не держит.
Go to the top of the page
 
+Quote Post
ovp
сообщение Apr 7 2008, 11:11
Сообщение #4





Группа: Новичок
Сообщений: 5
Регистрация: 18-10-07
Пользователь №: 31 459



Делаю следующее:

sudo setserial -a /dev/ttyS0 uart 16550A
sudo setserial -a /dev/ttyS0 baud_base 921600

sudo setserial -a /dev/ttyS0
/dev/ttyS0, Line 0, UART: 16550A, Port: 0x03f8, IRQ: 4
Baud_base: 921600, close_delay: 50, divisor: 0
closing_wait: 3000
Flags: spd_normal skip_test

мля... и всеравно выше чем 115200 не хочет работать и фсе тут. Что еще можно сделать???
Go to the top of the page
 
+Quote Post
Itch
сообщение Apr 7 2008, 12:35
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 358
Регистрация: 27-06-06
Из: Новосибирск
Пользователь №: 18 410



А порт то какой? У меня в винде COM1 (т.е. тот что на материнке) поддерживает скорость до 115200, больше не ставится. А USB-COM на PL2303 нормально уже работает с большими битрейтами. Так что может не там ищете.
Go to the top of the page
 
+Quote Post
ovp
сообщение Apr 7 2008, 12:52
Сообщение #6





Группа: Новичок
Сообщений: 5
Регистрация: 18-10-07
Пользователь №: 31 459



Цитата(Itch @ Apr 7 2008, 15:35) *
А порт то какой? У меня в винде COM1 (т.е. тот что на материнке) поддерживает скорость до 115200, больше не ставится. А USB-COM на PL2303 нормально уже работает с большими битрейтами. Так что может не там ищете.


Порт чисто аппартный (в винде он как СОМ1, а в линуксе как /dev/ttyS0), тип 16550А. При принудительной установке с помощью setserial пишет,что вроде как может работать на таких скоростях, но реально неудается открыть его на скорости, большей 115200....
Так что вот пока думаю как бы это обойти и может еще кто поможет советом...
Go to the top of the page
 
+Quote Post
Itch
сообщение Apr 7 2008, 13:04
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 358
Регистрация: 27-06-06
Из: Новосибирск
Пользователь №: 18 410



никак не обойти если материнка старая, либо попробовать поискать доку на SuperIO чипсет, который стоит на этой материнке и его запрогать, возможно просто модифицировав стандартные драйвера, либо в своей программе после открытия COM порта, с помощью inb\outb задавать битрейт вручную.
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение Apr 7 2008, 13:20
Сообщение #8


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Цитата(ovp @ Apr 7 2008, 08:52) *
Порт чисто аппартный (в винде он как СОМ1, а в линуксе как /dev/ttyS0), тип 16550А. При принудительной установке с помощью setserial пишет,что вроде как может работать на таких скоростях, но реально неудается открыть его на скорости, большей 115200....
Так что вот пока думаю как бы это обойти и может еще кто поможет советом...


ето где он пишет, что может?
что валуе кушает - не показатель.
я бы попробовал установить чегото вроде 92160000
- наверняка слопает и не подавится, а работать не будет.


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
ovp
сообщение Apr 7 2008, 13:33
Сообщение #9





Группа: Новичок
Сообщений: 5
Регистрация: 18-10-07
Пользователь №: 31 459



Цитата(Itch @ Apr 7 2008, 16:04) *
никак не обойти если материнка старая, либо попробовать поискать доку на SuperIO чипсет, который стоит на этой материнке и его запрогать, возможно просто модифицировав стандартные драйвера, либо в своей программе после открытия COM порта, с помощью inb\outb задавать битрейт вручную.

А может вы и правы насчет USB/COM переходника, скорее всего материнка не поддерживает или поддерживает но зашито в ней не выше 115200 и фсе......smile.gif а в драйверах копаться не особо есть желание.......Спасибо
Go to the top of the page
 
+Quote Post
rezident
сообщение Apr 7 2008, 13:38
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Посмотрите описание вашей материнки, там иногда указываются поддерживаемые COM-портом baud rate. Если сами не можете найти, то укажите здесь тип/модель/производителя вашей материнской платы. Например, на предыдущей моей MB Gigabyte GA-8PE800 COM-порты поддерживали только одну скорость передачи выше, чем 115200 - 128000.
Go to the top of the page
 
+Quote Post
ovp
сообщение Apr 7 2008, 13:47
Сообщение #11





Группа: Новичок
Сообщений: 5
Регистрация: 18-10-07
Пользователь №: 31 459



Цитата(rezident @ Apr 7 2008, 16:38) *
Посмотрите описание вашей материнки, там иногда указываются поддерживаемые COM-портом baud rate. Если сами не можете найти, то укажите здесь тип/модель/производителя вашей материнской платы. Например, на предыдущей моей MB Gigabyte GA-8PE800 COM-порты поддерживали только одну скорость передачи выше, чем 115200 - 128000.

Спасибо за совет - посмотрю обяз.....Вопрос в следующем есть какая-то функция или системный запрос под линуксом что бы четко определить максимальный баудрейт для СОМ порта, поддерживаемый материнкой.
Go to the top of the page
 
+Quote Post
Harbour
сообщение Apr 8 2008, 07:12
Сообщение #12


Местами Гуру
*****

Группа: Validating
Сообщений: 1 103
Регистрация: 5-12-04
Пользователь №: 1 323



1. Писать программы без проверки на ошибки конечно можно, если не интересует результат (man tcsetattr -> return value -> errno)
2. максимальный baudrate определяется возможностью rs232 чипа и его драйвера, может и есть какие либы (у мохи например) но они обычно заточены под определенного производителя
Go to the top of the page
 
+Quote Post
DMax
сообщение Apr 21 2008, 06:29
Сообщение #13


Частый гость
**

Группа: Свой
Сообщений: 161
Регистрация: 19-01-08
Из: Питер
Пользователь №: 34 234



Максимальная битрейт COM-порта определяется типом LPC-контроллера, который стоит на твоей материнке. Только никакого способа его определить, кроме как открыть корпус и посмотреть или (не всегда) найти это упоминание в доке на мать, нету.

Определив тип LPC-контроллера, можно скачать доку на контроллер с сайта производителя и глянуть его описание на предмет скоростей rs232. Тогда можно понять, стоит ли вообще пытаться.
Go to the top of the page
 
+Quote Post

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

 


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


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