Имеется сеть между микроконтроллерами (ADuC70х) на базе UART. Для передачи адреса абонента выставляется 9-й бит (бит четности), а при передаче данных — снимается.
В эту сеть нужно через СОМ-порт подсоединить РС с Windows для мониторинга и отладки. Но насколько я понял из описания в структуре DCB (настройки СОМ-порта) предусмотрены только 8-битные данные, а бит четности проверяется на аппаратном уровне. Можно ли задавать 9-й бит программно? Как?
Здравствуйте, TYuD, Вы писали:
TYD>Имеется сеть между микроконтроллерами (ADuC70х) на базе UART. Для передачи адреса абонента выставляется 9-й бит (бит четности), а при передаче данных — снимается.
TYD>В эту сеть нужно через СОМ-порт подсоединить РС с Windows для мониторинга и отладки. Но насколько я понял из описания в структуре DCB (настройки СОМ-порта) предусмотрены только 8-битные данные, а бит четности проверяется на аппаратном уровне. Можно ли задавать 9-й бит программно? Как?
Для передачи можно поиграть с even/odd parity: имея 9-битный адрес, выбираете четность так, чтобы, вычисленная по 8 битам, она равнялась бы нужному девятому. На приеме... надо знать подробности протокола сети.
Здравствуйте, TYuD, Вы писали:
TYD>Можно ли задавать 9-й бит программно?
Задавать-то можно, указывая, какой вид четности требуется (mark/space), но принять
этот бит отдельно не получится — только признак того, что четность нарушена. Использовать этот признак в качестве информации о значении 9-го разряда можно только в случае, когда отсутствуют ошибки передачи.
Здравствуйте, emusic, Вы писали:
E>Задавать-то можно, указывая, какой вид четности требуется (mark/space), но принять E>этот бит отдельно не получится — только признак того, что четность нарушена. Использовать этот признак в качестве информации о значении 9-го разряда можно только в случае, когда отсутствуют ошибки передачи.
Если по биту проверки четности обнаружена аппаратная ошибка, то сам байт остается ли доступен для чтения? И можно ли программно узнать была ли для данного конкретного байта ошибка четности?
Может имеются готовые аппаратные решения этой проблемы? Например, я слышал о переходниках USB->COM. Какие из устройств могут обеспечить передачу/прием по СОМ-порту 9-битных данных?
Задавать-то 9-й бит программно можно, меняя режим четности. Но это сильно замедлит передачу, поскольку придётся передавать по одному байту, без буферизации. принимать, наверное тоже возможно и тоже без буферизации, поскольку в буфер попадают только 8-битные данные, а ошибку (parity) можно узнать только о последнем принятом.
Могу порекомендовать не применять 9-й бит, а использовать байт-стафиинг.
Или же разработать устройство, которое будет с одной стороны использовать 9-битный протокол, а с другой — удобный для Вас и адаптированный для ПК 8-битный, например со стаффингом.
Здравствуйте, TYuD, Вы писали:
TYD>Если по биту проверки четности обнаружена аппаратная ошибка, то сам байт остается ли доступен для чтения?
В приемном регистре UART он доступен, но вот насколько честно его возвращает драйвер — надо смотреть.
TYD> И можно ли программно узнать была ли для данного конкретного байта ошибка четности?
Только принимая байты поштучно.
TYD>Может имеются готовые аппаратные решения этой проблемы? Например, я слышал о переходниках USB->COM.
Так там тоже максимум 8-битовые посылки.
TYD> Какие из устройств могут обеспечить передачу/прием по СОМ-порту 9-битных данных?
Только специальные, заточенные под 9 бит, либо программируемые. Писишный тоже программируется, но только от 5 до 8 бит на посылку.
Здравствуйте, emusic, Вы писали:
E>Только специальные, заточенные под 9 бит, либо программируемые. Писишный тоже программируется, но только от 5 до 8 бит на посылку.
"Специальные" — это те, которые нужно разрабатывать, или их можно купить уже готовые?