Ник:
Пароль:

Контакты

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

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

Ник:
Пароль:

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

ОбновитьПодробнееВсегоВсего:12
Форум » starterkit.ru » Embedded Linux
подключение UART2 по каналу RS-485
sasamy
Добавлено 21.08.2016 10:37 Редактировалось 21.08.2016 10:38 Сообщение: 11
sasamy
4.70

Пункты: 76988
Регистрация: 14.08.2009
Вот так у меня работает

Код

#include <stdio.h>
#include <fcntl.h>
#include <termios.h>
#include <unistd.h>

int main(void)
{
int fd, n;
struct termios options;

fd = open("/dev/ttymxc1", O_RDWR | O_NOCTTY | O_NDELAY);
if (fd < 0) {
printf("Unable to open /dev/ttymxc1\n");
return -1;
}

fcntl(fd, F_SETFL, FNDELAY);

cfsetspeed(&options, B9600);

tcgetattr(fd, &options);
options.c_iflag = 0;
options.c_oflag = 0;
options.c_lflag = 0;
options.c_cflag = CS8 | CREAD | CLOCAL;
options.c_cc[VMIN] = 0;
options.c_cc[VTIME] = 5;
tcsetattr(fd, TCSANOW, &options);

n = write(fd, "hello", 5);

close(fd);
return 0;
}


или так через stty

Цитата

# stty -F /dev/ttymxc1 9600
# stty -F /dev/ttymxc1 raw
# stty -F /dev/ttymxc1 -echo -echoe -echok

echo "hello" > /dev/ttymxc1
Спуститься к концу Подняться к началу
Персональная информация
sergzaytsev
Добавлено 23.08.2016 17:22 Сообщение: 12
sergzaytsev
0

Пункты: 3694
Регистрация: 19.07.2016
Не получается передатчик запустить. В программе следует использовать структуру struct rs485_ctrl или нужен только raw режим и более ничего?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 24.08.2016 09:27 Редактировалось 24.08.2016 09:33 Сообщение: 13
sasamy
4.70

Пункты: 76988
Регистрация: 14.08.2009
Я же дал вам пример как должно работать. Отложите пока свою программу и проверьте в консоли - не надо никаких дополнительных настроек кроме того что в примерах написано. Если не работает в консоли - значит в DT у вас что-то неправильно прописано или трансивер неправильно распаян или неисправен. Я проверял на Hola PC с плагом RSEB - соединил два rs-485, открыл две консоли через SSH

консоль 1

stty -F /dev/ttymxc3 115200
stty -F /dev/ttymxc3 raw
stty -F /dev/ttymxc3 -echo -echoe -echok
cat /dev/ttymxc3


консоль 2

stty -F /dev/ttymxc1 115200
stty -F /dev/ttymxc1 raw
stty -F /dev/ttymxc1 -echo -echoe -echok
echo "hello" > /dev/ttymxc1

в консоли 1 должно появиться сообщение hello.
Спуститься к концу Подняться к началу
Персональная информация
sergzaytsev
Добавлено 24.08.2016 15:36 Сообщение: 14
sergzaytsev
0

Пункты: 3694
Регистрация: 19.07.2016
сообщение 'hello" 'появляется, если используется файл imx6qdl-sodimm.dtsi изначальный. Если я изменяю этот файл в 2 местах:
1.
uart2 {
pinctrl_uart2_sodimm: uart2-sodimm {
fsl,pins = <
MX6QDL_PAD_GPIO_7__UART2_TX_DATA 0x1b0b1
MX6QDL_PAD_GPIO_8__UART2_RX_DATA 0x1b0b1
MX6QDL_PAD_SD2_DAT1__GPIO1_IO14 0x80000000
>;
};
};
2.
&uart2 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_uart2_sodimm>;
rs485-gpio = <&gpio1 14 0>;
status = "okay";
};
а затем пересобираю ядро командой kernel_rebuild.sh и заливаю все в контроллер - перестает работать передатчик. Вот где я мог накосячить?! Невезучий я, как Пьер Ришар.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 24.08.2016 21:31 Редактировалось 24.08.2016 21:33 Сообщение: 15
sasamy
4.70

Пункты: 76988
Регистрация: 14.08.2009
Посомотрите как и какие трансиверы распаяны на плаге RSEB - думаю тут дело в этом.

http://www.starterkit.ru/html/doc/Hola-RSEB.pdf

возможно вам нужно инвертировать управление - низкий уровень включает передачу, высокий отключает. Я это не предусматривал но поменять програмно - не проблема. Какой вы трансивер используете ?
Спуститься к концу Подняться к началу
Персональная информация
sergzaytsev
Добавлено 24.08.2016 22:25 Сообщение: 16
sergzaytsev
0

Пункты: 3694
Регистрация: 19.07.2016
Трансивер у меня MAX13442E, сигнал управления на него приходит правильно полярности, у меня висит в логической единице выход передатчика ДО трансивера, я смотрю выход передатчика осциллографом на контакте 7 разъема X4 схемы SK-iMX6-MB-SODIMM_V1C.pdf
А на контакте 6 того же разъема наблюдаю сигнал управления направлением передачи GPIO1_IO14.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 24.08.2016 22:54 Редактировалось 24.08.2016 23:02 Сообщение: 17
sasamy
4.70

Пункты: 76988
Регистрация: 14.08.2009
Попробуйте убрать выделенную строку из вашего описания уарта

uart2 {
pinctrl_uart2_sodimm: uart2-sodimm {
fsl,pins = <
MX6QDL_PAD_GPIO_7__UART2_TX_DATA 0x1b0b1
MX6QDL_PAD_GPIO_8__UART2_RX_DATA 0x1b0b1
MX6QDL_PAD_SD2_DAT1__GPIO1_IO14 0x80000000
>;

в данном случае это не нужно - этот пин уже переключен на GPIO в группе hog (если вы там ничего не меняли) и тут конфликт возникает и уартовские пины не переключаются на уарт из-за этого
Спуститься к концу Подняться к началу
Персональная информация
sergzaytsev
Добавлено 25.08.2016 16:54 Сообщение: 18
sergzaytsev
0

Пункты: 3694
Регистрация: 19.07.2016
Да, именно конфликт по GPIO1_IO14 стал причиной проблемы, в настоящий момент все превосходнейшим образом работает - USB COM порт и каналы RS-232 и RS-485. Я очень Вам благодарен!
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Embedded Linux