Jump to content

    

как проверить работоспособность ttyS* на lpc2478 под uClinux

залил на сабж стандартный олимексовский vmlinux.bin, так как тот который сам компилил почему то весил 2.5 Гб, в этом ещё не разобрался, так вот, а romfs_5.img беру своего производства + в нём есть моя откомпилированная погама работы с компортом по модбасу с шелезякой(шелезяка исправная, проверялось с ББ), открываю порт стандартно

fd = open("/dev/ttyS2",O_RDWR);

записываю, читаю стандартно

write(fd,query,8);

read(fd,&rxchar,1);

только при счиывании получаю FF во всех байтах :(

как бы проверить порт, на педмет его живости?

Edited by andybeg

Share this post


Link to post
Share on other sites

На педмет его живости?

А Rx - Tx между собой замкнуть религия не позволяет?

Или что?

Share this post


Link to post
Share on other sites

как уже ранее советовали замкнуть rx+tx это пины 2-3 на разъеме ком-порта

потом открыть minicom и что угодно написать - должны это увидеть на экране и эхо при этом должно быть отключено

Share this post


Link to post
Share on other sites

что то мне подскзывает что замыкание организовать будет сложно потому как уарт с процессора идёт на контроллер 485го интерфейса, а далее уже к клиенту, можно конечно на плате поколдовать, но может есть какой то другой метод?

Share this post


Link to post
Share on other sites

А 485 интерфейса далее нет физического разъема?

Кошмар как же другой девай подключать будете

Share this post


Link to post
Share on other sites

после 485 идёт другая железка или конвертер USB на 485, чуть позже появится железка с которой будет более удобная связь и может с ней мжно будет поотлаживать протокол

 

так, просто для небольшой уверенности - если даю ls и она видит в системе порты это значит что в линухе они прописаны и он может с ними работать?

/> ls /dev/ttyS*

/dev/ttyS0

/dev/ttyS1

/dev/ttyS2

/dev/ttyS3

Edited by andybeg

Share this post


Link to post
Share on other sites

А что или кто мешает убрать лишнее железа. На крайний случай аккуратно резануть дороги и кинуть перемычку. Зачем идти путем армянского комсомола?

Share this post


Link to post
Share on other sites

пока что есть надежда на железку с которой будет удобно отлаживать, если не прокатит будем резать ...

Share this post


Link to post
Share on other sites

нашёл небольшой 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 как понимаю) ввожу эти команды

Edited by andybeg

Share this post


Link to post
Share on other sites

Команды вводяться в консоле. Читайте литературу меньше вопросов будет

Share this post


Link to post
Share on other sites

кидаю посылки на ttyS3, ставлю осцилограф на TXD и ничего ни на одном порту не вижу, причём напряжения на них стоят разные, у одного 2.5, у другого 5 в ... вероятно пины не сконфигурированы ...

Share this post


Link to post
Share on other sites
кидаю посылки на ttyS3, ставлю осцилограф на TXD и ничего ни на одном порту не вижу, причём напряжения на них стоят разные, у одного 2.5, у другого 5 в ... вероятно пины не сконфигурированы ...

 

На TXD у трёхвольтового процессора не может быть 5v.

Share this post


Link to post
Share on other sites

виноват, зарапортовался - действительно не 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}

из мана пока что не очевидны значения прерываний
Edited by andybeg

Share this post


Link to post
Share on other sites
Прилагаю инструкцию

и рекомендую зарегистрироваться в конференции

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 вольта

Edited by andybeg

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this