|
как проверить работоспособность ttyS* на lpc2478 под uClinux |
|
|
|
Jun 21 2010, 21:23
|
Частый гость
 
Группа: Участник
Сообщений: 133
Регистрация: 30-11-06
Пользователь №: 22 954

|
залил на сабж стандартный олимексовский vmlinux.bin, так как тот который сам компилил почему то весил 2.5 Гб, в этом ещё не разобрался, так вот, а romfs_5.img беру своего производства + в нём есть моя откомпилированная погама работы с компортом по модбасу с шелезякой(шелезяка исправная, проверялось с ББ), открываю порт стандартно fd = open("/dev/ttyS2",O_RDWR); записываю, читаю стандартно write(fd,query,8); read(fd,&rxchar,1); только при счиывании получаю FF во всех байтах  как бы проверить порт, на педмет его живости?
Сообщение отредактировал andybeg - Jun 21 2010, 21:29
|
|
|
|
|
Jun 22 2010, 02:21
|
Участник

Группа: Участник
Сообщений: 45
Регистрация: 19-03-10
Из: Екатеринбург
Пользователь №: 56 075

|
На педмет его живости? А Rx - Tx между собой замкнуть религия не позволяет? Или что?
|
|
|
|
|
Jun 22 2010, 06:56
|
Участник

Группа: Участник
Сообщений: 45
Регистрация: 19-03-10
Из: Екатеринбург
Пользователь №: 56 075

|
А 485 интерфейса далее нет физического разъема? Кошмар как же другой девай подключать будете
|
|
|
|
|
Jun 22 2010, 11:34
|
Участник

Группа: Участник
Сообщений: 45
Регистрация: 19-03-10
Из: Екатеринбург
Пользователь №: 56 075

|
А что или кто мешает убрать лишнее железа. На крайний случай аккуратно резануть дороги и кинуть перемычку. Зачем идти путем армянского комсомола?
|
|
|
|
|
Jun 23 2010, 04:19
|
Частый гость
 
Группа: Участник
Сообщений: 133
Регистрация: 30-11-06
Пользователь №: 22 954

|
нашёл небольшой HOW-TOв нём вокончании есть слова Цитата Compile and update the new kernel image. To test it, fisrt let's check if the interface is there: #ls /dev/ttyS* /dev/ttyS2 /dev/ttyS1 /dev/ttyS0 Now, send some data to it: #echo UUUUUUUU >/dev/ttyS2 это типа критерий работоспособности порта, у мя это присутствует речь естественно идёт о том что я через миником сижу в терпинале и в консоли платы(ttyS0 как понимаю) ввожу эти команды
Сообщение отредактировал andybeg - Jun 23 2010, 04:21
|
|
|
|
|
Jun 23 2010, 05:21
|
Участник

Группа: Участник
Сообщений: 45
Регистрация: 19-03-10
Из: Екатеринбург
Пользователь №: 56 075

|
Команды вводяться в консоле. Читайте литературу меньше вопросов будет
|
|
|
|
|
Jun 28 2010, 15:23
|
Частый гость
 
Группа: Участник
Сообщений: 133
Регистрация: 30-11-06
Пользователь №: 22 954

|
виноват, зарапортовался - действительно не 5, а 3, а 2.5 и есть 2.5 пересмотрел сейчас убут и кернел уцлинукса, в убуте вроди бы все порты проинициализированы как надо по ману, а вот с настройками в кернеле непонятно - прерывания установлены по моему не верно (если это имеет значение) Цитата #include <asm/hardware.h>
#define BASE_BAUD (LPC22xx_Fpclk / 16) #define UART0_BASE 0xE000C000 #define UART1_BASE 0xE0010000 #define UART2_BASE 0xE0078000 #define UART3_BASE 0xE007C000 /* Standard COM flags */ #define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST) #define RS_TABLE_SIZE 4 /* * Rather empty table... * Hardwired serial ports should be defined here. * PCMCIA will fill it dynamically. */ #define STD_SERIAL_PORT_DEFNS \ /* UART CLK PORT IRQ FLAGS */ \ { 0, BASE_BAUD, UART0_BASE, 6, STD_COM_FLAGS, \ .iomem_reg_shift = 2, \ .iomem_base = UART0_BASE, \ .io_type = UPIO_MEM}, \ { 1, BASE_BAUD, UART1_BASE, 7, STD_COM_FLAGS, \ .iomem_reg_shift = 2, \ .iomem_base = UART1_BASE, \ .io_type = UPIO_MEM},\ { 2, BASE_BAUD, UART2_BASE, 5, STD_COM_FLAGS, \ .iomem_reg_shift = 2, \ .iomem_base = UART2_BASE, \ .io_type = UPIO_MEM}.\ { 3, BASE_BAUD, UART3_BASE, 5, STD_COM_FLAGS, \ .iomem_reg_shift = 2, \ .iomem_base = UART3_BASE, \ .io_type = UPIO_MEM} из мана пока что не очевидны значения прерываний
Сообщение отредактировал andybeg - Jun 28 2010, 15:30
|
|
|
|
|
Jun 29 2010, 08:30
|
Частый гость
 
Группа: Участник
Сообщений: 133
Регистрация: 30-11-06
Пользователь №: 22 954

|
Цитата(etoja @ Jun 29 2010, 11:33)  Прилагаю инструкцию и рекомендую зарегистрироваться в конференции http://tech.groups.yahoo.com/group/lpc2400_uClinux/messagesага, в одном посте выше делал ссылку на эту инструкцию, вот что у меня сейчас lowlevel_init.c Цитата void
UART0init(void)//uart debug
{ PINSEL0 = 0x00000050; PINSEL1 = 0x00000000; U0LCR = 0; U0IER = 0; U0LCR = 0x80; /* DLAB=1 */ U0DLL = (Fpclk/16)/CONFIG_BAUDRATE; U0DLM = 0; U0LCR = 0x03; /* 8N1, DLAB=0 */ U0FCR = 0x07; /* Enable RX and TX FIFOs */ }
//ARM p0.10 p0.11 void UART1init(void) { PINSEL0 |= 0x00500000;//0x30003fff PCONP |= (1<<24); U1LCR = 0; U1IER = 0; U1LCR = 0x80; U1DLL = ((Fpclk/16)/9600) & 0xff; U1DLM = ((Fpclk/16)/9600) >> 8; U1LCR = 0x03; U1FCR = 0x07; U1THR = '\n'; } //p0.25 p.026 void UART2init(void) { PINSEL1 |= 0x003C0000; PCONP |= (1<<25); U2LCR = 0; U2IER = 0; U2LCR = 0x80; U2DLL = ((Fpclk/16)/9600) & 0xff U2DLM = ((Fpclk/16)/9600) >> 8; U2LCR = 0x03; U2FCR = 0x07; U2THR = '\n'; } void//p2.0 p2.1 UART3init(void) { PINSEL4 |= 0x0000000A; PCONP |= (1<<4); U3LCR = 0; U3IER = 0; U3LCR = 0x80; U3DLL = ((Fpclk/16)/9600) & 0xff; U3DLM = ((Fpclk/16)/9600) >> 8; U3LCR = 0x03; U3FCR = 0x07; U3THR = '\n'; } Цитата lowlevel_init(void)
{ ... UART0init(); UART1init(); UART2init(); UART3init(); uClinux serial.h Цитата #define BASE_BAUD (LPC22xx_Fpclk / 16) #define UART0_BASE 0xE000C000 #define UART1_BASE 0xE0010000 #define UART2_BASE 0xE0078000 #define UART3_BASE 0xE007C000
/* Standard COM flags */ #define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST)
#define RS_TABLE_SIZE 4 #define STD_SERIAL_PORT_DEFNS \ /* UART CLK PORT IRQ FLAGS */ \ { 0, BASE_BAUD, UART0_BASE, 6, STD_COM_FLAGS, \ .iomem_reg_shift = 2, \ .iomem_base = UART0_BASE, \ .io_type = UPIO_MEM}, \ { 1, BASE_BAUD, UART1_BASE, 7, STD_COM_FLAGS, \ .iomem_reg_shift = 2, \ .iomem_base = UART1_BASE, \ .io_type = UPIO_MEM},\ { 2, BASE_BAUD, UART2_BASE, 8, STD_COM_FLAGS, \ .iomem_reg_shift = 2, \ .iomem_base = UART2_BASE, \ .io_type = UPIO_MEM},\ { 3, BASE_BAUD, UART3_BASE, 9, STD_COM_FLAGS, \ .iomem_reg_shift = 2, \ .iomem_base = UART3_BASE, \ .io_type = UPIO_MEM} Makefile Цитата ttyS0,c,4,64 ttyS1,c,4,65 ttyS2,c,4,66 ttyS3,c,4,67 \ собственная прога Цитата int set_port( )
{ ttyfd = open("/dev/ttyS1",O_RDWR | O_NOCTTY | O_NONBLOCK | O_NDELAY); ioctl(ttyfd,TCGETA,&tsaved); tnew.c_line = 0; tnew.c_oflag &=~ OPOST; tnew.c_lflag &=~ ICANON; tnew.c_cflag &=~ CBAUD; tnew.c_cflag |= B9600; /* baud rate 9600 setserial -g -abGv */ tnew.c_cflag &=~ CSIZE; tnew.c_cflag |= CS8; /* 8 bits RTU */ tnew.c_cflag |= (PARENB | PARODD); /* odd parity */ tnew.c_cflag |= CREAD; /* enable read */ tnew.c_cflag |= CLOCAL; /* ignore modem lines */ tnew.c_cc[VMIN] = 0; tnew.c_cc[VTIME] = 0; ioctl(ttyfd,TCSETA,&tnew); } ...... unsigned char msg[8]; write(ttyfd,msg,8); ...... read(ttyfd,&rxchar,1); пишу в порт и осцилограф показывает тишину  , причём после вчерашнего копания на всех портах на выходе стоит 3 вольта
Сообщение отредактировал andybeg - Jun 29 2010, 08:45
|
|
|
|
|
Jun 29 2010, 12:51
|
Частый гость
 
Группа: Участник
Сообщений: 133
Регистрация: 30-11-06
Пользователь №: 22 954

|
отыскал ссылко и нога на уарте задёргалась без Uart_Init_Delay, гранд мерси, должен ...
|
|
|
|
|
Sep 9 2010, 10:18
|
Частый гость
 
Группа: Участник
Сообщений: 133
Регистрация: 30-11-06
Пользователь №: 22 954

|
что то совсем запутался, настроил в финале беседы порт ttyS3 , понадобилось подключить ttyS2, сделал всё по аналогии и согласно мануалу постом выше указанному lowlevel_init.cЦитата void UART2init( void )
{ char cuart; unsigned int divisor = Fpclk / (16 * 9600); PINSEL0 |= 0x00500000; //configure uart2 on pins P0.10 and P0.11 PCONP |= 1<<24; // включаю питание на UARTe U2LCR = 0x83; // 8N1, enable Divisor latch bit U2IER = 0X00; // 0: запретить прерывания U2DLL = divisor & 0xFF; U2DLM = (divisor >> 8) & 0xFF; U2LCR &= ~0x80; U2FCR = 1; //1: Enable FIFO's Uart_Init_Delay(); U2FCR = 7; //6: Reset TX and RX FIFO Uart_Init_Delay(); while(U2LSR & 1) // чистим входное FIFO cuart = U2RBR; } void UART3init(void)//p2.0 p2.1 { char cuart; unsigned int divisor = Fpclk / (16 * 9600); PINSEL1 |= 0x003C0000; //configure uart2 on pins P0.25 and P0.26 PCONP |= 1<<25; // включаю питание на UARTe U3LCR = 0x83; // 8N1, enable Divisor latch bit U3IER = 0X00; // 0: запретить прерывания U3DLL = divisor & 0xFF; U3DLM = (divisor >> 8) & 0xFF; U3LCR &= ~0x80; U3FCR = 1; //1: Enable FIFO's Uart_Init_Delay(); U3FCR = 7; //6: Reset TX and RX FIFO Uart_Init_Delay(); while(U3LSR & 1) // чистим входное FIFO cuart = U3RBR; } uClinux-dist-\include\asm\arch-lpc22xx\serial.hЦитата #define BASE_BAUD (57600000 / 16) #define UART0_BASE 0xE000C000 #define UART1_BASE 0xE0010000 #define UART2_BASE 0xE0078000 #define UART3_BASE 0xE007C000 /* Standard COM flags */ #define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST)
#define RS_TABLE_SIZE 4
#define STD_SERIAL_PORT_DEFNS \ /* UART CLK PORT IRQ FLAGS */ \ { 0, BASE_BAUD, UART0_BASE, 6, STD_COM_FLAGS, \ .iomem_reg_shift = 2, \ .iomem_base = UART0_BASE, \ .io_type = UPIO_MEM}, \ { 0, BASE_BAUD, UART1_BASE, 7, STD_COM_FLAGS, \ .iomem_reg_shift = 2, \ .iomem_base = UART1_BASE, \ .io_type = UPIO_MEM},\ { 0, BASE_BAUD, UART2_BASE, 28, STD_COM_FLAGS, \ .iomem_reg_shift = 2, \ .iomem_base = UART2_BASE, \ .io_type = UPIO_MEM},\ { 0, BASE_BAUD, UART3_BASE, 29, STD_COM_FLAGS, \ .iomem_reg_shift = 2, \ .iomem_base = UART3_BASE, \ .io_type = UPIO_MEM} \uClinux-dist\include\asm\serial.hЦитата #ifndef __ASM_SERIAL_H #define __ASM_SERIAL_H
//#define BASE_BAUD (1843200 / 16) #include <asm/arch-lpc22xx/serial.h>
#endif в коде прогруммы Цитата int setupComm( ) {
ttyfd = open("/dev/ttyS3",O_RDWR | O_NOCTTY);// | O_SYNC | O_NDELAY | O_DIRECT ioctl(ttyfd,TCGETA,&tsaved); tnew.c_line = 0; tnew.c_oflag &=~ OPOST; tnew.c_lflag &= ~(ICANON | ECHO | ISIG); tnew.c_cflag &=~ CBAUD; tnew.c_cflag |= B9600; //* baud rate 9600 setserial -g -abGv tnew.c_cflag &=~ CSIZE; tnew.c_cflag |= CS8; //* 8 bits RTU tnew.c_cflag &= ~CSTOPB; tnew.c_cflag &=~ (PARENB | PARODD); //* odd parity tnew.c_cflag |= CREAD; //* enable read tnew.c_cflag |= CLOCAL; //* ignore modem lines tnew.c_cc[VMIN] = 0; tnew.c_cc[VTIME] = 0; ioctl(ttyfd,TCSETA,&tnew);
} в таком виде данные на 3й порт приходят, меняю на /dev/ttyS2 и тишина ... голову уже поломал
Сообщение отредактировал andybeg - Sep 9 2010, 10:20
|
|
|
|
|
Jan 11 2011, 09:35
|
Частый гость
 
Группа: Участник
Сообщений: 133
Регистрация: 30-11-06
Пользователь №: 22 954

|
проблемы с ком портом не закончились  раньше, когда работа с компортом наладилась я работал в режиме дебага, тоесть линукс грузился оставляя мне командную строку из которой я вручную запускал свою программу и она работала корректно с ttyS3 ..2 ... сейчас в uClinux задействовал init и программа стартует автоматически при старте платы, но ... с портов ничего не идёт, код соответствует тому , что выложил в предыдушем сообщени. ещё по старту заметил ошибки по отработки стартового файла rc Цитата #!/bin/sh hostname MTK /bin/expand /etc/ramfs.img /dev/ram1 mount -t proc proc /proc mount -t ext2 /dev/ram1 /var mkdir /var/tmp mkdir /var/log mkdir /var/run mkdir /var/lock mkdir /var/empty /bin/mknod /dev/ttyS0 c 4 64 /bin/mknod /dev/ttyS1 c 4 65 /bin/mknod /dev/ttyS2 c 4 66 /bin/mknod /dev/ttyS3 c 4 67 /bin/mknod /dev/rtc0 c 254 0 ifconfig lo 127.0.0.1 #ifconfig eth0 192.168.0.220 broadcast 192.168.0.255 netmask 255.255.255.0 G2420HDBL #httpd & cat /etc/motd #/bin/fbtest /bin/uart # that's it... success exit 0 а ошибки следующие Цитата Command: /bin/mknod /dev/ttyS0 c 4 64 mknod: cannot make device /dev/ttyS0 Command: /bin/mknod /dev/ttyS1 c 4 65 mknod: cannot make device /dev/ttyS1 Command: /bin/mknod /dev/ttyS2 c 4 66 mknod: cannot make device /dev/ttyS2 Command: /bin/mknod /dev/ttyS3 c 4 67 mknod: cannot make device /dev/ttyS3 Command: /bin/mknod /dev/rtc0 c 254 0 mknod: cannot make device /dev/rtc0 где тут собака порылась?  причём при открытии портов ошибок не возникает
Сообщение отредактировал andybeg - Jan 11 2011, 09:36
|
|
|
|
|
Jan 11 2011, 12:05
|
Частый гость
 
Группа: Участник
Сообщений: 133
Регистрация: 30-11-06
Пользователь №: 22 954

|
ещё по старту uClinux показываются следующие ошибки Цитата Serial: 8250/16550 driver $Revision: 1.90 $ 4 ports, IRQ sharing disabled serial8250: ttyS0 at MMIO 0x0 (irq = 6) is a 16550A serial8250: ttyS1 at MMIO 0x0 (irq = 7) is a 16550A serial8250: ttyS2 at MMIO 0x0 (irq = 28) is a 16550A serial8250: ttyS3 at MMIO 0x0 (irq = 29) is a 16550A serial8250 serial8250.0: unable to register port at index 0 (IO0 MEMe000c000 IRQ6): -28 serial8250 serial8250.0: unable to register port at index 1 (IO0 MEMe0010000 IRQ7): -28 serial8250 serial8250.0: unable to register port at index 2 (IO0 MEMe0078000 IRQ28): -28 serial8250 serial8250.0: unable to register port at index 3 (IO0 MEMe007c000 IRQ29): -28
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|