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

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


person thetux4    schedule 19.03.2011    source источник


Ответы (2)


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

person Judge Maygarden    schedule 19.03.2011
comment
Спасибо, я это уже видел. Вроде придётся написать драйвер для pxa255. - person thetux4; 19.03.2011

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

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

Таким образом, вы можете написать столько строк кода и драйверов, сколько захотите, но это не поможет вашему TTL UART взаимодействовать с RS485. Даже если у вас есть устройство, которое поддерживает RS485 на своем драйвере, само оборудование должно иметь IC преобразователя уровня (например, MAX485), чтобы вы могли его использовать. К счастью, наши любимые разработчики ядра Linux много знают об оборудовании, и вам не нужно об этом беспокоиться (во всяком случае, для большинства устройств). Затем, отвечая на ваш вопрос: если вы не можете найти настройки 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.

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

person Marcos G.    schedule 10.05.2019