Изменит ли преобразователь RS 485 в RS 232 полудуплексный режим на полнодуплексный?

Я использую последовательное соединение RS 485, через которое мне нужно отправлять файлы S19 для моего проекта загрузчика. Поскольку это полудуплексный режим соединения, мне нужно переключать выделенный контакт перед отправкой и получением. Я использую это терминальное приложение. Я получил желаемый результат, когда отправил строку.введите описание изображения здесь

Но я не мог получить никакого вывода, когда пытался загрузить файл (точнее, файл s19). Это из-за полудуплексного соединения, которое я использую? Изменит ли преобразователь RS 485 в RS 232 режим с полудуплексного на полнодуплексный?

ОБНОВЛЯТЬ

Я работаю над микроконтроллером Freescale MKE02Z64VLD2. Я только сейчас обнаружил, что в моем контроллере нет вывода RTS CTS. (Проверьте ссылку комментария 1)

Это последовательное соединение, которое я использую,введите описание изображения здесь

И приложение «Терминал» не является графическим интерфейсом загрузчика, я нашел его на этом сайте. (Проверьте комментарий, ссылка 2) Спасибо за помощь. Я публикую ссылки в разделе комментариев, потому что у меня недостаточно репутации, чтобы публиковать более двух ссылок.

У вас подключен CTS? Если нет, то вам следует изменить рукопожатие на «none» или «xon/xoff». В противном случае ПК не будет отправлять данные, потому что он не думает, что другой конец готов к приему данных.
Звучит как протокол, а также проблема с аппаратным несоответствием. Чтобы это работало, вам потребуется глубокое понимание ваших данных s19 с точки зрения сигнальных протоколов, а затем, возможно, вы сможете написать фрагмент кода для надлежащего интерфейса. Что именно происходит, когда вы отправляете строку? Всматривайтесь в мелкие детали. Возможно, вам придется немного поработать, чтобы это сработало.
@БрюсЭбботт. Спасибо, я попробую изменить рукопожатие на любое из двух и поищу результат.
@ Sparky256 Это мой код, который отправляет строку для (;;) { GPIO_PDD_TogglePortDataOutputMask (GPIOA_BASE_PTR, GPIO_PDD_PIN_21); CLS1_SendStr("Привет, мир!\r\n", CLS1_GetStdio()->stdOut); WAIT1_Waitms(1000); CLS1_SendStr("Добро пожаловать, Ганеш!\r\n", CLS1_GetStdio()->stdOut); Это дает мне желаемый результат.
«Я получил желаемый вывод, когда отправил строку... Но я не смог получить никакого вывода, когда пытался загрузить файл (точнее, файл s19)». Файлы S19 являются строками. Так что ваша проблема не в том, что ваш загрузчик не может получить файл s19, а в том, как он обрабатывает данные. Если у вас нет управления потоком (xon/xoff или RTS/CTS, если доступно), загрузчик может не справиться со скоростью входящих данных при одновременной записи во флэш-память.
Сотрите это - в ссылке1 вы признаете, что не можете получить ответ и при отправке строки. Возможно, MCU получает строку, а может быть, и нет. Но вы не знаете, потому что у вас есть 'в то время как (1);' перед отправкой ответа.

Ответы (2)

Нет. Преобразователь просто изменяет электрическую сигнализацию и дает вам явное (как правило, повторное использование линии управления модемом) или автоматическое (по времени) управление разрешением передачи.

Адаптация к полудуплексной схеме должна выполняться программным обеспечением на каждом конце.

Что касается того, почему именно ваша установка не удалась, на это невозможно ответить с ограниченной предоставленной информацией, однако программное обеспечение, написанное не с учетом этого режима связи, может быть ключевой частью проблемы.

На этом этапе вы должны расширить свой вопрос более подробно: какую плату MCU вы используете, какой приемопередатчик rs485 вы используете (проводка), на стороне ПК, какой преобразователь RS232/485? Если ваш загрузчик (ПК и MCU) работает в полудуплексном режиме, ПК отправляет данные и ждет ACK от MCU, MCU ожидает данных и после получения отправляет ACK, связь в обоих направлениях никогда не существует. Только после этого вы можете настроить терминал на использование RTS на TX - это означает, что преобразователь rs232/485 использует RTS от rs232 для включения/отключения передачи по rs485 (это конкретный преобразователь). То же самое нужно сделать на MCU, вместо этого используйте команду переключения set/reset. Успех в любое время под вопросом, если у вас нет полного доступа, чтобы исправить загрузчик, добавив дополнительные тайм-ауты, hw handsake и т. д. Является ли окно терминала на вашем изображении графическим интерфейсом загрузчика?

Я расширил вопрос, сэр. Я не делал никаких изменений в коде загрузчика по отношению к полудуплексу. Я написал код, думая, что это полнодуплексное соединение. Но позже, когда я тестировал только код, я обнаружил, что упустил здесь основную проблему (полудуплекс). Поэтому я подумал о тестировании простых кодов для отправки и получения строк, а затем попытался отправить файл .s19. Если мне это удастся, я могу включить ту же логику в свой код загрузчика. ССЫЛКА 1: community.freescale.com/message/643594#comment-643594 ССЫЛКА 2: site.google.com/site/terminalbpp
Не знаком с этими устройствами, но, возможно, простым решением является установка RTS, затем передача данных для отправки в fifo, связанный с DMA->UART_TX, и поиск, способен ли DMA выдавать прерывание, когда fifo становится пустым ( то есть отправил все символы), в этот момент вы сбрасываете RTS
Вот в чем заключается следующая проблема. Режимы RTS, DMA доступны в моей IDE (Kinetis Design Studio), но контроллер (MKE02Z64VLD2), для которого я разрабатываю загрузчик, не поддерживает CTS, RTS.
Да, я понял. Давайте вместо этого назовем его TX_EN (GPIO), теперь измените мой предыдущий комментарий, RTS на TX_EN. Настройте передачу через DMA и установите прерывание в DMA Tx fifo пустым.
Вам не нужен DMA, чтобы не отставать от средней скорости передачи, такой как показанная 38400 (или даже 115200), и попытка использовать ее, вероятно, только усложнит управление направлением канала, особенно для кого-то с очевидной неопытностью запрашивающего.
@ChrisStratton Что нужно OP, так это прерывание, которое после отправки всех символов срабатывает, в это время контакт GPIO (TX_EN) должен стать низким. Перед отправкой символов в UART необходимо установить высокий уровень GPIO. Вот и все. Сейчас я не нахожу правильных слов, чтобы объяснить.
Да, хотя одна из вещей, на которую следует обратить внимание, — это разница между состоянием или условием прерывания, которое указывает, что передатчик может принять новое слово данных (что обычно интересно), и тем, которое указывает, что оно фактически завершено смещение на провод - для этой схемы последнее то, что нужно для отключения передающего драйвера.