Поддержка RS485 в pxa255 - PullRequest
       31

Поддержка RS485 в pxa255

1 голос
/ 19 марта 2011

Я хочу использовать rs485, размещенный на моей карте. Я работаю над arm-linux и с процессором pxa255. Я уже проверил "serial.h", расположенный в цепочке инструментов arm-linux, но, к сожалению, я не смог найти подходящую структуру настроек rs485, хотя она поддерживается в некоторых других средах, таких как cris. Итак, теперь мне нужно написать низкоуровневый драйвер для включения RS485 или есть ли другой способ сделать это проще?

Ответы [ 2 ]

1 голос
/ 19 марта 2011

Я бы рекомендовал просмотреть эту страницу о Linux RS-485 поддержке .

0 голосов
/ 10 мая 2019

Похоже, что с последовательными портами возникает путаница в отношении поддержки режима RS485 в драйверах Linux. Я думаю, что смогу пролить свет на ответ на этот вопрос.

Прежде всего, вы должны спросить себя: почему я хочу активировать поддержку RS485 на моем последовательном порту? Я не знаю, какую плату разработки или аппаратное обеспечение вы используете, но учтите, что большинство UART работают только с односторонними уровнями TTL (уровни 5 В или 3,3 В). Это означает, что вы не сможете напрямую общаться с устройствами RS485, поскольку они обрабатывают только дифференциальные сигналы. Если вы хотите получить более подробную информацию, вы можете посмотреть эту ссылку: https://www2.htw -dresden.de / ~ huhle / ArtScienceRS485.pdf для хорошего ознакомления.

Таким образом, вы можете написать столько строк кода и драйверов, сколько захотите, но это не поможет вашему TTL UART общаться с RS485. Даже если у вас есть устройство, которое поддерживает RS485 в своем драйвере, само оборудование должно иметь ИС преобразователя уровня (например, MAX485), чтобы вы могли его использовать. К счастью, наши любимые разработчики Linux Kernel много знают об оборудовании, и вам не нужно беспокоиться об этом (в любом случае, для большинства устройств). Затем, отвечая на ваш вопрос: если вы не можете найти настройки RS485 в вашем драйвере, это, скорее всего, будет означать, что ваше оборудование не предлагает поддержку напрямую .

К счастью для вас, решение довольно простое: просто получите дешевый ключ USB-RS485. Вы можете найти их от 5 до 10 $, и они должны нормально работать из коробки для большинства сценариев. По моему опыту, FTDI-чипы работают хорошо.

Если вам действительно необходимо по какой-либо причине использовать один конкретный UART, например, представьте, что вы хотите использовать UART на Raspberry Pi или любом другом , где доступны только сигналы TX и RX, Тогда перед вами стоит несколько более сложная задача, и вам нужно немного больше изучить, как работают устройства RS485. Ключевым аспектом здесь является понимание того, что RS485 на полудуплексном двухпроводном соединении (см. Примечание ниже для более подробной информации по этому вопросу). Чтобы иметь возможность совместно использовать двухпроводную шину, где одно или несколько устройств прослушивают и только одно разговаривает одновременно, вам нужен дополнительный управляющий сигнал (Drive Enable / ~ Read Enable) поверх ваших TX и RX (обратите внимание, что когда вы используете односторонний TTL, у вас есть два сигнала, относящиеся к GND с использованием трех проводов по сравнению с одной дифференциальной шиной с двумя проводами для стороны RS485). Ваш приемопередатчик RS485 (скажем, MAX485) будет нуждаться в этом сигнале RE / ~ DE, чтобы определить, кто говорит и кто слушает на шине, а именно: на всех устройствах, слушающих на шине, этот сигнал будет иметь низкий уровень сигнала (установлен режим чтения), в то время как говорящий будет быть высоким (привод включен).

Здесь мы переходим к сути вашего вопроса: где вы можете получить этот дополнительный сигнал? Ну, ответ: это зависит от вашего чипа UART. Некоторые микросхемы не предлагают ничего, с чем можно работать, и вам остается возможность вручную ввести в своем программном приложении линию GPIO или сигналы управления потоком (RTS или DTR) для UARTS, где они у вас есть. Вы можете прочитать более подробную информацию по этой теме для конкретного случая микросхем FTDI здесь: RS485: неподходящий ioctl для устройства . Существует также ссылка на хорошее аппаратное решение этой проблемы с использованием мифического таймера 555 IC.

Примечание : более запутанные области: во-первых, RS485 является полудуплексным и иногда смешивается с RS422, который является полнодуплексным и требует четырех проводов; и два: где я говорю о двухпроводном и четырехпроводном соединениях, я бы лучше сказал о трехпроводном и пятипроводном, потому что сигналы дифференциального напряжения должны иметь заземление, чтобы служить обратным путем; к сожалению, большинство практических реализаций RS485 являются двухпроводными, и, похоже, они работают надежно для большинства людей, но это огромная тема, и мы можем поговорить об этом где-то еще.

...