Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Linux: настройка скорости COM порта выше 115200
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы
ovp
Народ! Плиз хто может подскажите.
Нужно настроить СОМ порт в 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
rezident
А ваш COM-порт вообще-то аппаратно поддерживает скорости выше, чем 115200?
vshemm
И еще нужно установить в линуксе (с помощью setserial, например) нужный тип порта, который поддерживает такие скорости (и хардварно совместим с Вашим портом). Ибо по умолчанию драйвер будет думать, что это 14550, который такие скорости не держит.
ovp
Делаю следующее:

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


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


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

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

Спасибо за совет - посмотрю обяз.....Вопрос в следующем есть какая-то функция или системный запрос под линуксом что бы четко определить максимальный баудрейт для СОМ порта, поддерживаемый материнкой.
Harbour
1. Писать программы без проверки на ошибки конечно можно, если не интересует результат (man tcsetattr -> return value -> errno)
2. максимальный baudrate определяется возможностью rs232 чипа и его драйвера, может и есть какие либы (у мохи например) но они обычно заточены под определенного производителя
DMax
Максимальная битрейт COM-порта определяется типом LPC-контроллера, который стоит на твоей материнке. Только никакого способа его определить, кроме как открыть корпус и посмотреть или (не всегда) найти это упоминание в доке на мать, нету.

Определив тип LPC-контроллера, можно скачать доку на контроллер с сайта производителя и глянуть его описание на предмет скоростей rs232. Тогда можно понять, стоит ли вообще пытаться.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.