Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с RS232 - сбиваются CTS/RTS
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
Symkin
Здравствуйте.

Возникла такая проблема: есть микроконтроллер PIC33, который связан с GSM-модемом с по RS232 с использованием CTS/RTS. Всё работает нормально, но время от времени одно из устройств (бывает как модем, так и PIC) выводит на линию квитирования запрещающий сигнал, и соответственно, другое устройство прекращает передачу. Система зависает в таком состояний и лечится только перезапуском.

Сама по себе передача небольшая - периодически по нескольку байт (как в одну сторону, так и в другую). UART и CTS/RTS на микроконтроллере управляются аппаратно. Скорость 9600.

У меня возникло предположение, что в модуле UART на МК (а может быть и на модеме) иногда возникают ошибки принятия (сбивки скорости, или ещё чего-нибудь), и приёмный буфер заполняется не полностью и зависает в таком подвешенном состоянии, и поэтому устройство запрещает дальнейший приём, высылая соовтетствующий сигнал на линию квитирования.

Может быть кто-нибудь уже сталкивался с подобным?
Golikov A.
Цитата(Symkin @ Nov 28 2012, 17:16) *
Здравствуйте.

Возникла такая проблема: есть микроконтроллер PIC33, который связан с GSM-модемом с по RS232 с использованием CTS/RTS. Всё работает нормально, но время от времени одно из устройств (бывает как модем, так и PIC) выводит на линию квитирования запрещающий сигнал, и соответственно, другое устройство прекращает передачу. Система зависает в таком состояний и лечится только перезапуском.

Сама по себе передача небольшая - периодически по нескольку байт (как в одну сторону, так и в другую). UART и CTS/RTS на микроконтроллере управляются аппаратно. Скорость 9600.

У меня возникло предположение, что в модуле UART на МК (а может быть и на модеме) иногда возникают ошибки принятия (сбивки скорости, или ещё чего-нибудь), и приёмный буфер заполняется не полностью и зависает в таком подвешенном состоянии, и поэтому устройство запрещает дальнейший приём, высылая соовтетствующий сигнал на линию квитирования.

Может быть кто-нибудь уже сталкивался с подобным?


рс232 - асинхронный, у него нет тактов, все тактируется внутри устройств, потому если контроллер не повис, то любой сбой на шине просто будет воспринят как неправильные биты, он не может повиснуть в середине приема, байт все равно примется до конца.

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

Вот так оно может быть, также может быть со стороны модема.

проверьте земли между приборами 232 очень чувствителен к землям. И проверьте все конденсаторы у преобразователя уровня уарт-232 если такой есть, оно тоже может вызывать сбои передачи.

Ну и последние уточните протокол в документации, возможно модем имеет режимы с реакцией ни на уровень, а на фронт ножки RTS, CTS и ими надо просто подергать.

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.