Проблема с ком-портом в ADAM-5510E с "золотой" полосой |
Ответить |
Автор | |
Новичок Присоединился: 09 Сентябрь 2005 Категория: Russian Federation Online Status: Offline Публикации: 8 |
Опубликовано: 08 Апрель 2008 04:52 |
Контроллеры серии ADAM-5510 время от времени (к счастью пока это происходит редко) подвергаются фирмой Advantech весьма кардинальной модернизации.
Примечание: здесь и далее речь идет о программируемых контроллерах ADAM-5510E. В свое время нам уже пришлось столкнуться с проблемой при переходе от ADAM-5510 к ADAM-5510M в связи с тем, что Advantech сменил микроконтроллер Amd188Em, стоящий на материнской плате в ADAM-5510, на микроконтроллер RDC R8800. Подробнее о возникших тогда проблемах и их причинах вы можете прочитать здесь: http://forum.cta.ru/forum_posts.asp?TID=1294&KW=ADAM%2D5510E. Сейчас возникла новая проблема, о которой речь пойдет ниже. На первой фотографии приведен контроллер ADAM-5510E, который до сих пор успешно использовался нами во многих проектах (речь идет о контроллере, а не о конкретной конфигурации модулей). На второй же фотографии вы тоже можете увидеть контроллер ADAM-5510E, но уже новый - купленный недавно в фирме Прософт. Как видите контроллер ADAM-5510E, поставляемый в данный момент, отличается от тех, что были раньше, наличием металлической полосы "золотого" цвета, идущей от левого края до правого. Данная полоса связана электрически с корпусами ком-портов плюс на заднюю поверхность контроллера выведен винт, который также связан с этой полосой. С GND данная полоса развязана. А теперь о том, какие проблемы возникли у нас на новом контроллере. Итак, есть программа, которая принимает от компьютера по ком. каналу RS-232 данные, анализирует корректность пакета, формирует ответ и передает этот ответ компьютеру. Никакие доп. модули при этом не используются (!). То есть модули, которые вы видете на фотографии, в программе не задействованы (!) - к ним нет обращения. Все работает. Скорость приемо-передачи 57600. Данные принимаются и передаются. За полчаса времени никаких сбоев замечено не было. Для посылки данных на стороне компьютера используется терминал из стандартной утилиты Advantech для серии ADAM-4000-5000. А теперь просто добавляем 2 модуля - ADAM-5080 и ADAM-5018. При этом программу оставляем без изменений. Еще раз напомню, что обращения к каким-либо модулям в программе нет (!), поэтому наличие или отсутствие любых модулей на шине с программной точки зрения никакой роли не играет. И программа перестает работать практически через несколько секунд (от 5 до 15). А если точнее - перестают отправляться данные по ком-порту, т.к. установка флага прерывания TX в регистре микросхемы UART не приводит к срабатыванию обработчика прерывания. Если же эту же программу запускать на "старом" варианте контроллера ADAM-5510E (см. первую фотографию) с теми же самыми модулями, то все работает прекрасно в любой конфигурации. То есть что мы имеем? Но новых вариантах контроллера ADAM-5510E изменение аппаратной конфигурации при абсолютно примитивной программе, которая занимается только приемом/передачей по ком. каналу данных, и которая при этом никак не завязана на саму конфигурацию модулей, приводит к изменению взаимодействия микроконтроллера (RDC R8800) и микросхемы UART в ADAMе-5510E. На старой версии контроллера ADAM-5510E подобное не наблюдается. Программа написана на ассемблере. Библиотеки фирмы Advantech не используются. Модули коммуникации, разработанные нами еще несколько лет назад, прошли проверку временем и успешно работали на десятке контроллеров ADAM-5510E до тех пор, пока не появилась новая версия реализации ADAM-5510E с "золотой" полосой (см. вторую фотографию). Кто-нибудь сталкивался с какими-либо проблемами в своих программах при использовании их на новых версиях контроллеров ADAM-5510E (с "золотой" полосой), которые при этом отсутствовали (отсутствуют) на старых версиях? Особенно было бы интересно услышать отзыв технических специалистов фирмы Прософт. Буду благодарен за любые идеи. P.S. Кстати, если оставить только модули ADAM-5080 и ADAM-5018, а остальные извлечь, то все работает. Кроме этого, в процессе экспериментирования в конфигурации со всеми модулями (фото 3), удавалось иногда увеличить время, через которое происходил сбой, например, после перемещения модуля ADAM-5080 на последний слот. Однако, сбой все равно железно происходил. |
|
Новичок Присоединился: 21 Март 2008 Категория: Ukraine Online Status: Offline Публикации: 8 |
|
Попробуйте передавать сообщения не по прерыванию, а по наличию готовности. Возможно у Вас модули сидят на том же прерывании, что и com-порт. Можете опубликовать скелет своего драйвера - т.е. работу с регистрами com-порта. Я использовал всегда пропатченый мною драйвер от advantech gen-drv.exe. Могу выслать - драйвер, библиотеку и программу настройки. |
|
Новичок Присоединился: 09 Сентябрь 2005 Категория: Russian Federation Online Status: Offline Публикации: 8 |
|
> Могу выслать - драйвер, библиотеку и программу настройки.
Можете выслать по адресу: r4f (собака) mail ru Буду признателен. > Возможно у Вас модули сидят на том же прерывании, что и com-порт. Программно аппаратные модули (5017, 5024, 5018 и т.д.) вообще ни на чем не сидят, потому что нет (!) кода в программе, который бы их обслуживал. Их можно ставить в любой слот, или вообще не ставить, а программа должна работать. И работает (!) на старой версии контроллера независимо от конфигурации. На новой же версии начинаются вот такие приколы. > Можете опубликовать скелет своего драйвера - т.е. работу с регистрами com-порта. Непосредственно в данный момент меня удивляет зависимость работы с UART от наличия или отсутствия модулей на шине, причем еще и зависимость от их конкретного расположения (слота). При том, что в программе (в коде) нет ни одной функции обращения к этим модулям, или их инициализации. Программа полностью написана на ассемблере и не содержит ни одной посторонней библиотеки. Также заблокированы все остальные прерывания, поэтому каких-либо обработчиков, оставшихся после запуска встроенного DOS, нет. Сейчас меня интересует не только поиск обходного пути при работе с ком-портом, но и причина такого поведения аппаратуры (не программы). P.S. Скелет драйвера: PROC com_tx cli mov [ _self.tx_buf.cur_index ], 0 mov [ _self.tx_buf.empty ], FALSE ; разрешаем возникновение прерывания ; по окончанию передачи данных COM_REG IER in al, dx or al, com_TX_INT_ENABLE out dx, al ; разрешаем обработку прерываний sti ret ENDP com_tx PROC com_tx_handler mov di, [ _self.tx_buf.addr ] mov bx, [ _self.tx_buf.cur_index ] jmp @@check_tx_buf @@tx_next_char: COM_REG LSR in al, dx test al, com_THRE jz @@exit ; передаем очередной байт данных ; из буфера передатчика mov al, [ di + bx ] COM_REG THR out dx, al inc bx ; уходим из обработчика до окончания ; передачи текущего байта данных jmp @@exit @@check_tx_buf: ; все байты данных переданы ? cmp bx, [ _self.tx_buf.length ] jb @@tx_next_char ; да ( переданы все данные ) ; устанавливаем флаг, что ; все данные переданы mov [ _self.tx_buf.empty ], TRUE ; запрещаем возникновение прерывания ; по окончанию передачи данных COM_REG IER in al, dx and al, NOT com_TX_INT_ENABLE out dx, al xor bx, bx @@exit: mov [ _self.tx_buf.cur_index ], bx ret ENDP com_tx_handler ;---------------------------------------------------------------- ; регистры УАПП ;---------------------------------------------------------------- com_RBR = 0 ; receive buffer register com_THR = 0 ; transmitter holding register com_DL0 = 0 ; divisor latch (LSB) com_DL1 = 1 ; divisor latch (MSB) com_IER = 1 ; interrupt enable register com_IIR = 2 ; interrupt identification register com_FCR = 2 ; FIFO control register com_LCR = 3 ; line control register com_MCR = 4 ; modem control register com_LSR = 5 ; line status register com_MSR = 6 ; modem status register com_SCR = 7 ; scratch register ;---------------------------------------------------------------- ;---------------------------------------------------------------- ; биты регистров УАПП ;---------------------------------------------------------------- ; IER ( interrupt enable register ) com_RX_INT_ENABLE = 01h com_TX_INT_ENABLE = 02h ; LCR ( line control register ) com_DLAB = 80h ; MCR ( modem control register ) com_DTR = 01h com_RTS = 02h com_OUT1 = 04h com_OUT2 = 08h ; FCR ( FIFO control register ) com_FIFO_ENABLE = 01h com_RX_FIFO_RESET = 02h com_TX_FIFO_RESET = 04h com_FIFO_TRIGGER_LEVEL = 0C0h ; LSR ( line status register ) com_FIFO_ERROR = 80h com_TEMT = 40h ; transmitter empty com_THRE = 20h ; transmitter holding register empty com_BREAK = 10h ; broken line detected com_FRAMING_ERROR = 08h com_PARITY_ERROR = 04h com_OVERRUN_ERROR = 02h com_RX_BUF_FULL = 01h ;---------------------------------------------------------------- |
|
Новичок Присоединился: 21 Март 2008 Категория: Ukraine Online Status: Offline Публикации: 8 |
|
На первый взгляд - 1_й байт лучше передавать не по прерыванию. Второе - как Вы обрабатываете прерывания? Я столкнулся с тем, что на новых компьютерах (начиная примерно с Celeron600), у меня не работал Turbo Debugger TD3.1 через com-port, потому что были ложные прерывания по вводу. Причина в том, как обработать прерывание: правильный путь - это считывать причину из соответствующего регистра, тогда кстати не нужно будет дергать маску прерываний на вывод. Сейчас вышлю то, что обещал. |
|
Prosoft.ru Присоединился: 21 Июнь 2003 Online Status: Offline Публикации: 432 |
|
Проблема решается доработкой обединительной панели в новых модулях. Думаю, что модули в новых поставках уже доработаны. |
|
Новичок Присоединился: 09 Сентябрь 2005 Категория: Russian Federation Online Status: Offline Публикации: 8 |
|
> Проблема решается доработкой объединительной панели в новых модулях. Думаю, что модули в новых поставках уже доработаны.
Спасибо за ответ. На будущее, мы были бы очень признательны, если бы фирма "Прософт" предупреждала о подобных вещах сразу же, как только ей становится об этом известно. |
|
Действительный член Присоединился: 15 Октябрь 2003 Категория: Belarus Online Status: Offline Публикации: 141 |
|
Может я чего-то не понял, но ГДЕ ответ ??? Про какую доработку Вы тут говорите? Если можно - напишите поподробнее об этой доработке.
P.S. у меня тоже были проблемы с опросом ком-портов как раз при добавлении модулей в АДАМ - моя проблема решилась заменой блока питания на более мощный, т.к. в сумме АДАМ+все модули потребляют довольно много. |
|
Новичок Присоединился: 09 Сентябрь 2005 Категория: Russian Federation Online Status: Offline Публикации: 8 |
|
Semelenov
В нашем случае процедура доработки выглядела следующим образом: 1) контроллеры были отданы в отдел технической поддержки фирмы "Прософт"; 2) "Прософт" заказал резисторы с 0-м номиналом (по сути перемычки) у производителя; 3) резисторы шли больше месяца; 4) далее, полученные резисторы и контроллеры, нуждающиеся в доработке (суть которой заключается в замене 34 резисторов на резисторы с 0-м номиналом) были отданы в фирму "Fastwel", которая на своем оборудовании произвела замену резисторов; 5) далее, контроллеры вернулись на фирму "Прософт", откуда уже и были переданы нам назад. О новых контроллерах
При получении новых контроллеров - один из контроллеров снова оказался с вышеуказанной "багой", другой - исправным, но в нем уже золотой полосы нет, а есть золотые полоски: |
|
Новичок Присоединился: 09 Сентябрь 2005 Категория: Russian Federation Online Status: Offline Публикации: 8 |
|
Вот фотографии тех мест в контроллере, которые требуют доработки.
Это скриншоты документа, присланного фирмой "Прософт" в ответ на данную тему. |
|
Действительный член Присоединился: 15 Октябрь 2003 Категория: Belarus Online Status: Offline Публикации: 141 |
|
Rashid
Большое спасибо за информацию |
|
Ответить |
Переход на форум | Права доступа на форуме Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме |