Почему я вижу ненадежное поведение при использовании USBSer.dll в Embedded Compact 7, что означают мои ошибки?

Надеюсь, кто-нибудь может мне помочь или хотя бы пролить свет на ошибки, которые я вижу :-).

Наша платформа WEC7 необходима для связи с рядом устройств через последовательный порт USB.

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

Связь с устройствами ненадежна:

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

Когда WEC7 загружается и не может нормально общаться, я ничего не могу сделать, кроме полная перезагрузка WEC7 надеясь, что он будет успешно общаться в следующий раз.

Отладка указала на некоторые ошибки, возникающие при первом открытии COM-порта:

Вот рабочий выход показывая открытие \ настройку последовательного порта:

PID:057600AA TID:04DC00D2 Creating Serial Port
PID:00400002 TID:04DC00D2 !USBD:CloseTransfer, invalid handle
PID:00400002 TID:04DC00D2 !USBD:CloseTransfer, invalid handle
PID:00400002 TID:04DC00D2 !USBD:CloseTransfer, invalid handle
PID:00400002 TID:04DC00D2 !USBD:CloseTransfer, invalid handle
PID:00400002 TID:04DC00D2 UsbAsyncClassPipe::ResetPipe(fForce=1PID:00400002 TID:04DC00D2 EHCD:          CQueuedPipe(Bulk)::ClearHaltedFlag - warning! Called on non-stalled pipe
PID:00400002 TID:04DC00D2 EHCD:  CQueuedPipe(Bulk)::ClearHaltedFlag on QHead c9f779c0, token 00000040
PID:00400002 TID:04DC00D2 !USBD:CloseTransfer, invalid handle
PID:00400002 TID:04DC00D2 +UsbAsyncClassPipe::BulkOrIntrTransfer:0x300,1024,0xce4a0000, dwClientInfo=fedd0000PID:00400002 TID:04DC00D2 - UsbAsyncClassPipe::BulkOrIntrTransfer:0xce4a0000,0x7c3b000, return=1PID:00400002 TID:04DC00D2 +UsbAsyncClassPipe::BulkOrIntrTransfer:0x300,1024,0xce4a0400, dwClientInfo=fedd0001PID:00400002 TID:04DC00D2 -UsbAsyncClassPipe::BulkOrIntrTransfer:0xce4a0400,0x7c3b400, return=1PID:00400002 TID:04DC00D2 +UsbAsyncClassPipe::BulkOrIntrTransfer:0x300,1024,0xce4a0800, dwClientInfo=fedd0002PID:00400002 TID:04DC00D2 -UsbAsyncClassPipe::BulkOrIntrTransfer:0xce4a0800,0x7c3b800, return=1PID:00400002 TID:04DC00D2 +UsbAsyncClassPipe::BulkOrIntrTransfer:0x300,1024,0xce4a0c00, dwClientInfo=fedd0003PID:00400002 TID:04DC00D2 -UsbAsyncClassPipe::BulkOrIntrTransfer:0xce4a0c00,0x7c3bc00, return=1PID:00400002 TID:04DC00D2 UsbAsyncClassPipe::ResetPipe(fForce=1PID:00400002 TID:04DC00D2 EHCD:  CQueuedPipe(Bulk)::ClearHaltedFlag - warning! Called on non-stalled pipe
PID:00400002 TID:04DC00D2 EHCD:  CQueuedPipe(Bulk)::ClearHaltedFlag on QHead c9f77540, token 00000040
PID:00400002 TID:04A201AA +UsbAsyncClassPipe::WaitForTransferComplete:-1,dwClientInfo=fedd0000PID:00400002 TID:04DC00D2 !USBD:CloseTransfer, invalid handle

когда не работает эта последовательность почти идентична, кроме последней строки, за которой следуют некоторые ошибки и переводы, не видимые в рабочем выводе:

PID:021200E2 TID:028F0082 Creating Serial Port
PID:00400002 TID:028F0082 !USBD:CloseTransfer, invalid handle
PID:00400002 TID:028F0082 !USBD:CloseTransfer, invalid handle
PID:00400002 TID:028F0082 !USBD:CloseTransfer, invalid handle
PID:00400002 TID:028F0082 !USBD:CloseTransfer, invalid handle
PID:00400002 TID:028F0082 UsbAsyncClassPipe::ResetPipe(fForce=1PID:00400002 TID:028F0082 EHCD:  CQueuedPipe(Bulk)::ClearHaltedFlag - warning! Called on non-stalled pipe
PID:00400002 TID:028F0082 EHCD:  CQueuedPipe(Bulk)::ClearHaltedFlag on QHead c9f770c0, token 00000040
PID:00400002 TID:028F0082 !USBD:CloseTransfer, invalid handle
PID:00400002 TID:028F0082 +UsbAsyncClassPipe::BulkOrIntrTransfer:0x300,1024,0xc9fa0000, dwClientInfo=fedd0000PID:00400002 TID:028F0082 -UsbAsyncClassPipe::BulkOrIntrTransfer:0xc9fa0000,0x7670000, return=1PID:00400002 TID:028F0082 +UsbAsyncClassPipe::BulkOrIntrTransfer:0x300,1024,0xc9fa0400, dwClientInfo=fedd0001PID:00400002 TID:028F0082 -UsbAsyncClassPipe::BulkOrIntrTransfer:0xc9fa0400,0x7670400, return=1PID:00400002 TID:028F0082 +UsbAsyncClassPipe::BulkOrIntrTransfer:0x300,1024,0xc9fa0800, dwClientInfo=fedd0002PID:00400002 TID:028F0082 -UsbAsyncClassPipe::BulkOrIntrTransfer:0xc9fa0800,0x7670800, return=1PID:00400002 TID:028F0082 +UsbAsyncClassPipe::BulkOrIntrTransfer:0x300,1024,0xc9fa0c00, dwClientInfo=fedd0003PID:00400002 TID:028F0082 -UsbAsyncClassPipe::BulkOrIntrTransfer:0xc9fa0c00,0x7670c00, return=1PID:00400002 TID:028F0082 UsbAsyncClassPipe::ResetPipe(fForce=1PID:00400002 TID:028F0082 EHCD:  CQueuedPipe(Bulk)::ClearHaltedFlag - warning! Called on non-stalled pipe
PID:00400002 TID:028F0082 EHCD:  CQueuedPipe(Bulk)::ClearHaltedFlag on QHead c9f78740, token 00000040
PID:00400002 TID:048A050E +UsbAsyncClassPipe::WaitForTransferComplete:-1,dwClientInfo=fedd0000PID:00400002 TID:01360022 EHCD:  CQueuedPipe(Bulk)::CheckForDoneTransfers found halted QHead c9f770c0, token 04008140
PID:00400002 TID:01360022 EHCD:  CQTransfer{Bulk}::DoneTransfer() ERROR: seq #6268, chain #0, qTD #0, token=04008140
PID:00400002 TID:01360022 EHCD:  CQTransfer{Bulk}::DoneTransfer() ERROR: seq #6269, chain #1, qTD #0, token=040081c0
PID:00400002 TID:01360022 EHCD:  CQTransfer{Bulk}::DoneTransfer() ERROR: seq #6271, chain #2, qTD #0, token=040081c0
PID:00400002 TID:01360022 EHCD:  CQTransfer{Bulk}::DoneTransfer() ERROR: seq #6273, chain #3, qTD #0, token=040081c0
PID:00400002 TID:048A050E
UsbAsyncClassPipe::GetClientInfo return 0xfedd0000PID:00400002 TID:028F0082 !USBD:CloseTransfer, invalid handlePID:00400002 TID:048804D6
+UsbAsyncClassPipe::WaitForTransferComplete:-1,dwClientInfo=ee21b294PID:00400002 TID:048A050E
LBUSB: ReceiveInterruptHandler:Transfer Error 4 ,dwLength=0PID:00400002 TID:048A050E UsbAsyncClassPipe::CloseFrontArmedTransfer:dwClientInfo=fedd0000PID:00400002 TID:048A050E
+UsbAsyncClassPipe::BulkOrIntrTransfer:0x300,1024,0xc9fa0000, dwClientInfo=fedd0000PID:00400002 TID:048A050E -UsbAsyncClassPipe::BulkOrIntrTransfer:0xc9fa0000,0x7670000, return=1PID:00400002 TID:028F0082
UsbAsyncClassPipe::CloseFrontArmedTransfer:dwClientInfo=fedd0001PID:00400002 TID:028F0082
+UsbAsyncClassPipe::BulkOrIntrTransfer:0x300,1024,0xc9fa0400, dwClientInfo=fedd0001PID:00400002 TID:028F0082
-UsbAsyncClassPipe::BulkOrIntrTransfer:0xc9fa0400,0x7670400, return=1PID:00400002 TID:028F0082
UsbAsyncClassPipe::CloseFrontArmedTransfer:dwClientInfo=fedd0002PID:00400002 TID:028F0082
+UsbAsyncClassPipe::BulkOrIntrTransfer:0x300,1024,0xc9fa0800, dwClientInfo=fedd0002PID:00400002 TID:028F0082
-UsbAsyncClassPipe::BulkOrIntrTransfer:0xc9fa0800,0x7670800, return=1PID:00400002 TID:028F0082
UsbAsyncClassPipe::CloseFrontArmedTransfer:dwClientInfo=fedd0003PID:00400002 TID:028F0082
+UsbAsyncClassPipe::BulkOrIntrTransfer:0x300,1024,0xc9fa0c00, dwClientInfo=fedd0003PID:00400002 TID:028F0082
-UsbAsyncClassPipe::BulkOrIntrTransfer:0xc9fa0c00,0x7670c00, return=1PID:00400002 TID:048A050E
+UsbAsyncClassPipe::WaitForTransferComplete:-1,dwClientInfo=fedd0000PID:01A2000A TID:012C001E

Если открытие \ настройка порта Comm является последней последовательностью, связь не будет успешной (мы пытались много раз и могли предсказать, будет ли связь работать на 100% правильно, основываясь на этом).

Чтобы быть более точным в отношении того, что я имею в виду, говоря об отсутствии успешной связи, мы все еще можем передать Tx Serial на устройство, но не Rx вообще (событие EV_RXCHAR никогда не запускается), мы доказали, что устройство получает и отвечает соответствующим образом.

Был бы очень признателен за любую информацию об ошибках или причинах поведения, которое мы испытываем. Мы нашли ошибку, кто-нибудь еще использовал UsbSer в WEC7 без проблем?

Заранее спасибо,

ФУНТ

1

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]