реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Проблема с RS232 - сбиваются CTS/RTS
Symkin
сообщение Nov 28 2012, 13:16
Сообщение #1





Группа: Новичок
Сообщений: 2
Регистрация: 4-03-12
Пользователь №: 70 600



Здравствуйте.

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

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

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

Может быть кто-нибудь уже сталкивался с подобным?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 22 2013, 18:37
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата(Symkin @ Nov 28 2012, 17:16) *
Здравствуйте.

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

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

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

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


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

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

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

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

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

Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 7th July 2025 - 10:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.01372 секунд с 7
ELECTRONIX ©2004-2016