Ник:
Пароль:

Контакты

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 » Процессорные модули » SK-iMX6S/D-SODIMM
Настройка RTS/CTS на UART нужна помощь
VladimirS
Добавлено 13.09.2017 21:10
0
Сообщение: 1
VladimirS
0

Пункты: 1016
Регистрация: 20.06.2017
Пробую настроить 4-ый UART для работы с RTS/CTS
Нашёл нужные пины:
Код
#define MX6QDL_PAD_CSI0_DAT16__UART4_RTS_B 0x064 0x378 0x910 0x3 0x0
#define MX6QDL_PAD_CSI0_DAT16__GPIO6_IO02 0x064 0x378 0x000 0x5 0x0

Код
#define MX6QDL_PAD_CSI0_DAT17__UART4_CTS_B 0x068 0x37c 0x000 0x3 0x0
#define MX6QDL_PAD_CSI0_DAT17__GPIO6_IO03 0x068 0x37c 0x000 0x5 0x0

RTS замкнут на CTS.
Если настраиваю их как GPIO, то замечательно вижу изменение выхода RTS на входе CTS.
Настраиваю драйвер:
Код
uart4 {
pinctrl_uart4_sodimm: uart4-sodimm {
fsl,pins = <
MX6QDL_PAD_KEY_ROW0__UART4_RX_DATA 0x1b0b1
MX6QDL_PAD_KEY_COL0__UART4_TX_DATA 0x1b0b1
MX6QDL_PAD_CSI0_DAT17__UART4_CTS_B 0x1b0b1
MX6QDL_PAD_CSI0_DAT16__UART4_RTS_B 0x1b0b1
>;
};
};

Код
uart4: serial@021f0000 {
compatible = "fsl,imx6q-uart", "fsl,imx21-uart";
reg = <0x021f0000 0x4000>;
interrupts = <0 29 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&clks IMX6QDL_CLK_UART_IPG>,
<&clks IMX6QDL_CLK_UART_SERIAL>;
clock-names = "ipg", "per";
dmas = <&sdma 31 4 0>, <&sdma 32 4 0>;
dma-names = "rx", "tx";
fsl,uart-has-rtscts;
status = "disabled";
};

Естественно, вычистил при этом все упоминания
MX6QDL_PAD_CSI0_DAT17 и MX6QDL_PAD_CSI0_DAT16 из конфигурации.
Пробую - на RTS, при этом, вроде бы стоит 1, но вот такое ощущение, что CTS при этом настроен как выход и при этом на него выдаётся 0. Никакого обмена по RX/TX, при этом не происходит (хотя, если собрать конфу без fsl,uart-has-rtscts, обмен идёт).
Подскажите, пожалуйста, где я ошибся.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 13.09.2017 22:52 Редактировалось 13.09.2017 22:56 Сообщение: 2
sasamy
4.70

Пункты: 78121
Регистрация: 14.08.2009
Посмотрите для примера imx6qdl-hola-rseb.dtsi

вот так не нужно делать - это всё наследуется из вложенного описания

Цитата

uart4: serial@021f0000 {
compatible = "fsl,imx6q-uart", "fsl,imx21-uart";
reg = <0x021f0000 0x4000>;
interrupts = <0 29 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&clks IMX6QDL_CLK_UART_IPG>,
<&clks IMX6QDL_CLK_UART_SERIAL>;
clock-names = "ipg", "per";
dmas = <&sdma 31 4 0>, <&sdma 32 4 0>;
dma-names = "rx", "tx";
fsl,uart-has-rtscts;
status = "disabled";
};


например на холе uart5, особенно выделенный текст

Цитата

&uart5 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_uart5_hola>;
fsl,uart-has-rtscts;
status = "okay";
};


изменяете только то что нужно
Спуститься к концу Подняться к началу
Персональная информация
VladimirS
Добавлено 14.09.2017 20:04 Сообщение: 3
VladimirS
0

Пункты: 1016
Регистрация: 20.06.2017
Цитата
Посмотрите для примера imx6qdl-hola-rseb.dtsi

вот так не нужно делать - это всё наследуется из вложенного описания

например на холе uart5, особенно выделенный текст

Цитата

&uart5 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_uart5_hola>;
fsl,uart-has-rtscts;
status = "okay";
};


изменяете только то что нужно

Понятно, но сути дела это не меняет. Я ничего не менял в том большом блоке, описывающем uart, только добавил строку fsl,uart-has-rtscts.
А вот то, место которое Вы упомянули.
&uart4 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_uart4_sodimm>;
status = "okay";
};
Статус изменён на okay.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 15.09.2017 10:59 Редактировалось 15.09.2017 11:02 Сообщение: 4
sasamy
4.70

Пункты: 78121
Регистрация: 14.08.2009
Не заню что вы в DTS накрутили, вот мой тестовый imx6qdl-sodimm.dtsi

https://yadi.sk/d/PoJ87FX13MuMCY

кроме него ничего не менял, ядро 4.1.15. На тех пинах что у вас не могу проверить - у меня там аудиокодек, отключил CSI и вывел всё вместо него

uart4 {
pinctrl_uart4_sodimm: uart4-sodimm {
fsl,pins = <
MX6QDL_PAD_CSI0_DAT12__UART4_TX_DATA 0x1b0b1
MX6QDL_PAD_CSI0_DAT13__UART4_RX_DATA 0x1b0b1
MX6QDL_PAD_CSI0_DAT17__UART4_CTS_B 0x1b0b1
MX6QDL_PAD_CSI0_DAT16__UART4_RTS_B 0x1b0b1
>;
};
};


на MB замкнул на x9 30-31, запустил

microcom /dev/ttymxc3

есть текст при нажатиях клавиатуры

вышел из microcom [ctrl] + [x]

включил в настройках порта использовать cts/rts

stty -F /dev/ttymxc3 crtscts

запустил

microcom /dev/ttymxc3

текст не появляется, замкнул перемычкой на x9 25-26 (rts <-> cts) - текст появляется.
Спуститься к концу Подняться к началу
Персональная информация
VladimirS
Добавлено 15.09.2017 11:15 Сообщение: 5
VladimirS
0

Пункты: 1016
Регистрация: 20.06.2017
Возможно, дело в этом: stty -F /dev/ttymxc3 crtscts.
Хотя, я использовал minicom для проверки, в настройкам там стоит Hardware Flow Control: Yes - думаю это то же самое.
А Вы не заметили, какой из пинов был выходом, а какой входом?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 15.09.2017 11:31 Редактировалось 15.09.2017 11:32 Сообщение: 6
sasamy
4.70

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

А Вы не заметили, какой из пинов был выходом, а какой входом?


нет, но знаю что там есть некоторая путаница - порт может работать в 2-х режимах DTE/ DCE и от этого может меняться напрвление CTS/RTS

https://community.nxp.com/docs/DOC-97509

https://community.nxp.com/thread/390320
Спуститься к концу Подняться к началу
Персональная информация
VladimirS
Добавлено 15.09.2017 12:00 Сообщение: 7
VladimirS
0

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

А Вы не заметили, какой из пинов был выходом, а какой входом?


нет, но знаю что там есть некоторая путаница - порт может работать в 2-х режимах DTE/ DCE и от этого может меняться напрвление CTS/RTS

https://community.nxp.com/docs/DOC-97509

https://community.nxp.com/thread/390320

Спасибо! Ценная информация.
Судя по написанному, там и RX/TX меняет направление.
Теперь понять бы ещё как настроить...
Допустим, я настраиваю DTE, но RX/TX мне нужны вход/выход соответственно. Могу я их поменять таким образом:
было: MX6QDL_PAD_KEY_ROW0__UART4_RX_DATA 0x1b0b1
стало: MX6QDL_PAD_KEY_ROW0__UART4_TX_DATA 0x1b0b1
было: MX6QDL_PAD_KEY_COL0__UART4_TX_DATA 0x1b0b1
стало: MX6QDL_PAD_KEY_COL0__UART4_RX_DATA 0x1b0b1
?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 15.09.2017 12:08 Сообщение: 8
sasamy
4.70

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

Допустим, я настраиваю DTE, но RX/TX мне нужны вход/выход соответственно. Могу я их поменять таким образом


информация у меня такая же как и у вас, плата у вас есть - попробуйте.
Спуститься к концу Подняться к началу
Персональная информация
VladimirS
Добавлено 17.09.2017 00:31 Сообщение: 9
VladimirS
0

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

информация у меня такая же как и у вас, плата у вас есть - попробуйте.

Попробовал. Все выводы основаны только на результатах экспериментов. Насколько это соответствует истине большой вопрос.

Итак, настройки пинов
Код

MX6QDL_PAD_CSI0_DAT12__UART4_TX_DATA 0x1b0b1
MX6QDL_PAD_CSI0_DAT13__UART4_RX_DATA 0x1b0b1
MX6QDL_PAD_CSI0_DAT17__UART4_CTS_B 0x1b0b1
MX6QDL_PAD_CSI0_DAT16__UART4_RTS_B 0x1b0b1

работают только для режима DCE (по умолчанию). При этом
DAT12 выход
DAT13 вход
DAT17 выход
DAT16 вход.
Как только переключаем драйвер в режим работы DTE, данные настройки пинов перестают работать. Работает, если настроить так:
Код

MX6QDL_PAD_CSI0_DAT12__UART4_RX_DATA 0x1b0b1
MX6QDL_PAD_CSI0_DAT13__UART4_TX_DATA 0x1b0b1
MX6QDL_PAD_CSI0_DAT17__UART4_RTS_B 0x1b0b1
MX6QDL_PAD_CSI0_DAT16__UART4_CTS_B 0x1b0b1

При этом
DAT12 вход
DAT13 выход
DAT17 вход
DAT16 выход.
В обоих случаях 0, поданный на RTS, разрешает передачу.

Главная засада в том, что названия пинов не соответствуют их функциям с какой стороны ни посмотри:
со стороны DTC: TX разъёма служит для приёма данных, RX для передачи;
со стороны DTE: RTS разъёма - выход, а CTS - вход.
Спуститься к концу Подняться к началу
Персональная информация
danilsl
Добавлено 18.09.2017 18:45 Сообщение: 10
danilsl
1

Пункты: 4201
Регистрация: 08.12.2010
Пол: Мужчина
Вы знаете, я случайно увидел в I.MX Pin Tool. Пин RTS у 6-х imx-ов - это вход, а CTS- выход. И на тот момент очень вовремя увидел. Я как-то привык к ситуации наоборот. И направление их не меняется. Просто примите, что для фрискейла походу rts это cts и наоборот. И кстати, если программно дёргать RTS, то реально дёргается пин, который они называют CTS. А в остальном всё как обычно работает. Просто вот так они схотрили )))
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Процессорные модули » SK-iMX6S/D-SODIMM