User Info
Добро пожаловать, Guest Пользователей: 1 Поисковых ботов: 3 Гостей: 1
Pegase
Пункты: 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
Пункты: 54271
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
Цитата Через меморимапинг установил тактирования UART (CLKEN [13] = 1) и Multiple Function Pin Select Register (GPSELE [10] = 1). Так и нет никаких данных в порту. В чем может быть еще проблема?
сделайте контрольный вывод блоков для uart0 и uart2 может там, что не так..
как вариант - попробовать вместо uart2 -> uart1
у китайцев есть вот такая картинка в мане:
На любой вопрос есть любой ответ.
Pegase
Пункты: 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
Пункты: 54271
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
ну в общем, да, судя по логу
Код Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
serial8250.0: ttyS0 at MMIO 0xb8000000 (irq = 7) is a 16550
в системе зарегился один порт
смотрите в менюконфиге ядра - не поставлено ли там ограничение на их число
и копайте в файле борды - что там прописано на этот счет..
На любой вопрос есть любой ответ.
Pegase
Пункты: 2484
Регистрация: 10.11.2010
Цитата
смотрите в менюконфиге ядра - не поставлено ли там ограничение на их число
В менюконфиге уже искал. По дефолту было 2. Увеличил максимальное количество до 4.
Jury093
Пункты: 54271
Регистрация: 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
Пункты: 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
Пункты: 54271
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
Цитата И миником их открывает. Однако порт ничего не выдает.
угу, и не выдаст ничего - надо чтобы проинтились сами порты и пины для них..
железо заведомо исправно, ибо Павел на ядре 2.6.17.14 делал обмен с gsm-модемом и gps-приемником - все работало..
значит дело в ядре - надо смотреть, кто отвечает за цикл инита заказанного число UARTов и что ему не хватает..
Цитата Сейчас разбираюсь бордом от dm355. Там такой же драйвер. Потому что такое впечатление что китайцы что-то накрутили у себя.
Вот описание подобной проблемы для dm355:
повеселило - "незначительный баг"
по опыту ковыряния с ситарой (TI) порекомендую проверять все, что написано в файлах конфигурирования пинов (мне пришлось дописывать). до 6 функций на один пин..
На любой вопрос есть любой ответ.
Pegase
Пункты: 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