Warning: touch() [function.touch]: Unable to create file /home/starterkit/starterkit.ru/html/error.log because Permission denied in /home/starterkit/starterkit.ru/html/errorhandler.php on line 51
UART на NUC950 - Embedded Linux - Форум - starterkit.ru
Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru
Партнеры:
otladka.com.ua - г.Киев

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:2
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:6
Форум » starterkit.ru » Embedded Linux
UART на NUC950
Pegase
Добавлено 12.06.2012 15:18
0
Сообщение: 1
Pegase
0

Пункты: 2484
Регистрация: 10.11.2010
Добрый день.
Есть плата SK-MNUC950 необходимо запустить обмен данными с другим устройством через RS232. Для этого использую порт GPS_TX и GPS_TX (UART2). При запуске minicom на плате тишина в порту. Драйвер стоит стандарный:

Код

struct plat_serial8250_port nuc900_uart_data[] = {
[0] = NUC900_8250PORT(UART0),
[1] = NUC900_8250PORT(UART1),
[2] = NUC900_8250PORT(UART2),
{},
};

#define NUC900_8250PORT(name) \
{ \
.membase = name##_BA, \
.mapbase = name##_PA, \
.irq = IRQ_##name, \
.uartclk = 15000000, \
.regshift = 2, \
.iotype = UPIO_MEM, \
.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, \
}


Через меморимапинг установил тактирования UART (CLKEN [13] = 1) и Multiple Function Pin Select Register (GPSELE [10] = 1). Так и нет никаких данных в порту. В чем может быть еще проблема?
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 13.06.2012 01:09 Сообщение: 2
Jury093
4.5

Пункты: 54233
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
Цитата
Через меморимапинг установил тактирования UART (CLKEN [13] = 1) и Multiple Function Pin Select Register (GPSELE [10] = 1). Так и нет никаких данных в порту. В чем может быть еще проблема?

сделайте контрольный вывод блоков для uart0 и uart2 может там, что не так..
как вариант - попробовать вместо uart2 -> uart1
у китайцев есть вот такая картинка в мане:

title

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
Pegase
Добавлено 13.06.2012 15:38 Сообщение: 3
Pegase
0

Пункты: 2484
Регистрация: 10.11.2010
Вместо UART2 использовать UART1 пробовал. Ничего не изменилось.

Такое впечатление, что драйвер не находит всех портов:
Лог загрузки Linux2.6.35.4

Код

Linux version 2.6.35.4 (root@vitaly-F5N) (gcc version 4.2.0 20070413 (prerelease) (CodeSourcery Sourcery G++ Lite 2007q1-10)) #26 PREEMPT Wed Jun 13 14:20:06 EEST 2012

CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00053177

CPU: VIVT data cache, VIVT instruction cache

Machine: W90P950EVB

Warning: bad configuration page, trying to continue

Memory policy: ECC disabled, Data cache writeback

CPU type 0x02900910 is NUC910

Built 1 zonelists in Zone order, mobility grouping on. Total pages: 8128

Kernel command line: mem=32M console=ttyS0,115200n8 cpufreq=200 root=/dev/nfs ip=192.168.11.200 nfsroot=192.168.11.186:/home/vitaly/NUC950/rootfs rw

PID hash table entries: 128 (order: -3, 512 bytes)

Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)

Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)

Memory: 32MB = 32MB total

Memory: 28492k/28492k available, 4276k reserved, 0K highmem

Virtual kernel memory layout:

vector : 0xffff0000 - 0xffff1000 ( 4 kB)

fixmap : 0xfff00000 - 0xfffe0000 ( 896 kB)

DMA : 0xffc00000 - 0xffe00000 ( 2 MB)

vmalloc : 0xc2800000 - 0xe0000000 ( 472 MB)

lowmem : 0xc0000000 - 0xc2000000 ( 32 MB)

modules : 0xbf000000 - 0xc0000000 ( 16 MB)

.init : 0xc0008000 - 0xc0020000 ( 96 kB)

.text : 0xc0020000 - 0xc0391000 (3524 kB)

.data : 0xc0392000 - 0xc03b4620 ( 138 kB)

Hierarchical RCU implementation.

RCU-based detection of stalled CPUs is disabled.

Verbose stalled-CPUs detection is disabled.

NR_IRQS:32

Console: colour dummy device 80x30

Calibrating delay loop... 99.53 BogoMIPS (lpj=497664)

pid_max: default: 32768 minimum: 301

Mount-cache hash table entries: 512

CPU: Testing write buffer coherency: ok

devtmpfs: initialized

NET: Registered protocol family 16

bio: create slab <bio-0> at 0

SCSI subsystem initialized

usbcore: registered new interface driver usbfs

usbcore: registered new interface driver hub

usbcore: registered new device driver usb

cfg80211: Calling CRDA to update world regulatory domain

Switching to clocksource nuc900-timer1

NET: Registered protocol family 2

IP route cache hash table entries: 1024 (order: 0, 4096 bytes)

TCP established hash table entries: 1024 (order: 1, 8192 bytes)

TCP bind hash table entries: 1024 (order: 0, 4096 bytes)

TCP: Hash tables configured (established 1024 bind 1024)

TCP reno registered

UDP hash table entries: 256 (order: 0, 4096 bytes)

UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)

NET: Registered protocol family 1

RPC: Registered udp transport module.

RPC: Registered tcp transport module.

RPC: Registered tcp NFSv4.1 backchannel transport module.

JFFS2 version 2.2. (NAND) © 2001-2006 Red Hat, Inc.

ROMFS MTD (C) 2007 Red Hat, Inc.

msgmni has been set to 55

alg: No test for stdrng (krng)

io scheduler noop registered (default)

Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled

serial8250.0: ttyS0 at MMIO 0xb8000000 (irq = 7) is a 16550

console [ttyS0] enabled

brd: module loaded

physmap platform flash device: 00400000 at a0000000

physmap-flash physmap-flash.0: map_probe failed

NAND device: Manufacturer ID: 0xec, Chip ID: 0xda (Samsung NAND 256MiB 3,3V 8-bit)

Scanning device for bad blocks

Bad eraseblock 1374 at 0x00000abc0000

Creating 2 MTD partitions on "NAND 256MiB 3,3V 8-bit":

0x000000000000-0x000000800000 : "NAND-boot and kernel"

0x000000800000-0x000010000000 : "NAND FS"

usbcore: registered new interface driver rt73usb

ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver

nuc900-ehci nuc900-ehci: Nuvoton nuc900 EHCI Host Controller

nuc900-ehci nuc900-ehci: new USB bus registered, assigned bus number 1

nuc900-ehci nuc900-ehci: irq 15, io mem 0xb0005000

nuc900-ehci nuc900-ehci: USB 2.0 started, EHCI 0.95

usb usb1: New USB device found, idVendor=1d6b, idProduct=0002

usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1

usb usb1: Product: Nuvoton nuc900 EHCI Host Controller

usb usb1: Manufacturer: Linux 2.6.35.4 ehci_hcd

usb usb1: SerialNumber: nuc900-ehci

hub 1-0:1.0: USB hub found

hub 1-0:1.0: 2 ports detected

ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver

nuc900-ohci nuc900-ohci: Nuvoton nuc900 ohci Host Controller

nuc900-ohci nuc900-ohci: new USB bus registered, assigned bus number 2

nuc900-ohci nuc900-ohci: irq 15, io mem 0xb0007000

usb usb2: New USB device found, idVendor=1d6b, idProduct=0001

usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1

usb usb2: Product: Nuvoton nuc900 ohci Host Controller

usb usb2: Manufacturer: Linux 2.6.35.4 ohci_hcd

usb usb2: SerialNumber: nuc900-ohci

hub 2-0:1.0: USB hub found

hub 2-0:1.0: 2 ports detected

usbcore: registered new interface driver cdc_wdm

Initializing USB Mass Storage driver...

usbcore: registered new interface driver usb-storage

USB Mass Storage support registered.

ep 0

ep 1

ep 2

ep 3

ep 4

ep 5

ep 6

mice: PS/2 mouse device common for all mice

MMC: Setting controller bus width to 1

Added NUC900 SD driver

usbcore: registered new interface driver usbhid

usbhid: USB HID core driver

TCP cubic registered

NET: Registered protocol family 17

lib80211: common routines for IEEE802.11 drivers

drivers/rtc/hctosys.c: unable to open rtc device (rtc0)

nuc900-emc nuc900-emc: eth0 is OPENED

Судя по всему должно быть:
Код

Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
serial8250.0: ttyS0 at MMIO 0xb8000000 (irq = 7) is a 16550A
console [ttyS0] enabled
serial8250.0: ttyS1 at MMIO 0xb8000100 (irq = 8) is a 16550A
serial8250.0: ttyS2 at MMIO 0xb8000200 (irq = 0) is a 16550A
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 13.06.2012 17:21 Сообщение: 4
Jury093
4.5

Пункты: 54233
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
ну в общем, да, судя по логу
Код
Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
serial8250.0: ttyS0 at MMIO 0xb8000000 (irq = 7) is a 16550

в системе зарегился один порт
смотрите в менюконфиге ядра - не поставлено ли там ограничение на их число
и копайте в файле борды - что там прописано на этот счет..

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
Pegase
Добавлено 13.06.2012 17:28 Сообщение: 5
Pegase
0

Пункты: 2484
Регистрация: 10.11.2010
Цитата

смотрите в менюконфиге ядра - не поставлено ли там ограничение на их число

В менюконфиге уже искал. По дефолту было 2. Увеличил максимальное количество до 4.
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 14.06.2012 00:34 Сообщение: 6
Jury093
4.5

Пункты: 54233
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
Цитата
В менюконфиге уже искал. По дефолту было 2. Увеличил максимальное количество до 4.

не уверен, но вот тут добавил строчки для uart1-uart3..
cpu.h
Код
/* Initial serial platform data */

struct plat_serial8250_port nuc900_uart_data[] = {
NUC900_8250PORT(UART0),
NUC900_8250PORT(UART1),
NUC900_8250PORT(UART2),
NUC900_8250PORT(UART3),
{},
};

у меня на дебьяновской рутовой после этого появляются 4 устройства
Код
root@arm9g45:~# ls /dev/ttyS* -l
crw------- 1 root tty 4, 64 Jan 1 03:09 /dev/ttyS0
crw-rw---- 1 root dialout 4, 65 Jan 1 03:00 /dev/ttyS1
crw-rw---- 1 root dialout 4, 66 Jan 1 03:00 /dev/ttyS2
crw-rw---- 1 root dialout 4, 67 Jan 1 03:00 /dev/ttyS3


терминалка minicom соглашается что это устройства. к сожалению, контакты на плате закрыты другой платой и до реальных TX,RX не добраться..

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
Pegase
Добавлено 14.06.2012 12:06 Сообщение: 7
Pegase
0

Пункты: 2484
Регистрация: 10.11.2010
У меня ситуация такая же. Самые устройства есть:
Код

root@NUC950:~# ls /dev/ttyS* -l
crw------- 1 root tty 4, 64 Feb 8 00:54 /dev/ttyS0
crw--w---- 1 root root 4, 65 Jan 1 1970 /dev/ttyS1
crw--w---- 1 root root 4, 66 Jan 1 1970 /dev/ttyS2
crw--w---- 1 root root 4, 67 Jan 1 1970 /dev/ttyS3


И миником их открывает. Однако порт ничего не выдает.

Сейчас разбираюсь бордом от dm355. Там такой же драйвер. Потому что такое впечатление что китайцы что-то накрутили у себя.
Вот описание подобной проблемы для dm355:
http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/99/t/6067.aspx
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 14.06.2012 16:08 Сообщение: 8
Jury093
4.5

Пункты: 54233
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
Цитата
И миником их открывает. Однако порт ничего не выдает.

угу, и не выдаст ничего - надо чтобы проинтились сами порты и пины для них..
железо заведомо исправно, ибо Павел на ядре 2.6.17.14 делал обмен с gsm-модемом и gps-приемником - все работало..
значит дело в ядре - надо смотреть, кто отвечает за цикл инита заказанного число UARTов и что ему не хватает..

Цитата
Сейчас разбираюсь бордом от dm355. Там такой же драйвер. Потому что такое впечатление что китайцы что-то накрутили у себя.
Вот описание подобной проблемы для dm355:

повеселило - "незначительный баг"
по опыту ковыряния с ситарой (TI) порекомендую проверять все, что написано в файлах конфигурирования пинов (мне пришлось дописывать). до 6 функций на один пин..

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
Pegase
Добавлено 15.06.2012 11:46 Сообщение: 9
Pegase
0

Пункты: 2484
Регистрация: 10.11.2010
Всем спасибо! Разобрался.
Проблема была в следующем
До запуска драйвера нужно было включить тактирование UART1 и UART2
В __init nuc950evb_init(void) додал
writel(readl(REG_CLKEN) | (1<<13) |(1<<12), REG_CLKEN);

В /drivers/serial/8250.c

Код
static unsigned int serial8250_get_divis
...
else
quot = uart_get_divisor(port, baud);

+#if CONFIG_ARCH_W90X900
+ quot = (port->uar/drivers/serial/8250.ctclk / (baud * 16)) - 2;
+ if((port->uartclk % (baud * 16)) > (baud * 16 / 2))
+ quot++;
+#endif
+
...
return quot;


В linux-2.6.35.4_nuc900/arch/arm/mach-nuc900/cpu.h
Вместо .uartclk = 11313600, должно быть .uartclk = 15000000,

После ядро успешно увидело все порты и корректно заработало:
Код
Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
serial8250.0: ttyS0 at MMIO 0xb8000000 (irq = 7) is a 16550
console [ttyS0] enabled
serial8250.0: ttyS1 at MMIO 0xb8000100 (irq = 8) is a 16550
serial8250.0: ttyS2 at MMIO 0xb8000200 (irq = 9) is a 16550
brd: module loaded

Код
root@NUC950:~# cat /proc/tty/driver/serial
serinfo:1.0 driver revision:
0: uart:16550 mmio:0xB8000000 irq:7 tx:2278 rx:37 RTS|DTR
1: uart:16550 mmio:0xB8000100 irq:8 tx:0 rx:0
2: uart:16550 mmio:0xB8000200 irq:9 tx:34 rx:62 brk:14 RTS|DTR
3: uart:unknown port:00000000 irq:0
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Embedded Linux