Не понял логики нумерации выводов USART на схеме SK-9G45-MB V1.A. Выводы порта ttyS1 на схеме обозначены как UART0_TX и UART0_RX (обнаружил это в процессе попыток поработать с портом).
И еще вопрос - разведены ли у какого-либо из USART RTS и CTS?
В Linux нумерация не обязана совпадать с нумерацией процессора, ttyS0 - это DBGU, а дальше остальные уарты по порядку но это при желании можно изменить в arch/arm/mach-at91/board-sam9m10g45ek.c
То что я описал: слева от стрелки - обозначение на разъеме по схеме, справа - функциональное назначение.
Вам нужно убрать описание соответствующих пинов SPI1 в инициализации иначе они там на SPI и переключатся. Или SPI1 исключить из инициализации вообще. См. board-sam9m10g45ek.c и at91sam9g45_devices.c и
void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices)
В файле /buildroot-2012.02/output/build/linux-3.2.16-oem/arch/arm/mach-at91/at91sam9g45_devices.c в функцию __init at91_add_device_spi( внес следующие изменения:
Пересобрал ядро, записал uImage и распаковал rootfs на SD-карту (с нее грузится) - RTS из Qt-приложения так и не управляется.
Насколько я понял, инициализация выводов USART делается в функции
Когда она должна вызываться: при загрузке системы или из приложения?
if (devices[i].bus_num == 0)
enable_spi0 = 1;
else if (devices[i].bus_num == 1)
enable_spi1 = 1;
иначе независимо - есть ли устройства на spi1 они всегда переключают для него пины (что и происходит в нашем случае - у нас есть только устройство на програмном spi на gpio bus_num = 3 - а пины для spi1 все равно конфигурируются).
Вам осталось только указать драйверу UART использовать аппаратное управление потоком - поменять
в файле board-sam9m10g45ek.c
в ф-ии static void __init ek_init_early(void)
at91_register_uart(AT91SAM9G45_ID_US0, 1, 0);
на
at91_register_uart(AT91SAM9G45_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS);
позволю себе поднять тему.
я тоже хочу управлять дополнительными линиями.
но у меня нет реакции даже на rx,tx на ttyS1, ttyS2, т.е. проверяю банально echo 1 > /dev/ttyS1(2) и не вижу ничего( при этом аналогичная команда для ttyS0 проходит нормально.
все, что рекомендовано в этой теме сделал.
Устройства ttyS1(2) в /dev имеются.
в ф-ии static void __init ek_init_early(void)
at91_register_uart(AT91SAM9G45_ID_US0, 1, 0);
на
at91_register_uart(AT91SAM9G45_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS);
у меня эта функция называется ek_map_io почему-то.
второй день пытаюсь побороть - не получается, поэтому прошу вас о помощи
спасибо