Thông báo

Collapse
No announcement yet.

Xung đột trên đường truyền USB-HID ???

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Xung đột trên đường truyền USB-HID ???

    Chào mọi người !

    Hiện tại mình đang làm một thiết bị (sử dụng PIC và Mikro C) giao tiếp với máy tính qua USB (HID).
    PIC gửi dữ liệu lên PC vô điều kiện lặp lại theo chu kì tầm 20ms. Dữ liệu từ PC truyền xuống phát sinh bất thường không cố định thời gian.
    Mọi việc gần như hoàn hảo tuy nhiên đôi lúc xuất hiện lỗi máy tính treo Device Mangager ( không nhận chuột + bàn phím - cũng HID).
    Mình chưa tìm được nguyên nhân có phải do vấn đề ở thiết bị của mình hay không nhưng vẫn có nghi ngờ dữ liệu truyền lên và truyền xuống trùng thời gian gây xung đột đường truyền ????.
    Tuy nhiên đó chỉ là suy luận. Không biết hiện tượng xung đột đó có xảy ra ? Và hậu quả của nó như thế nào ?
    Các cao nhân trên này chỉ giáo giúp nhé !
    Cảm ơn !

  • #2
    Nguyên văn bởi duong_act Xem bài viết
    Chào mọi người !

    Hiện tại mình đang làm một thiết bị (sử dụng PIC và Mikro C) giao tiếp với máy tính qua USB (HID).
    PIC gửi dữ liệu lên PC vô điều kiện lặp lại theo chu kì tầm 20ms. Dữ liệu từ PC truyền xuống phát sinh bất thường không cố định thời gian.
    Mọi việc gần như hoàn hảo tuy nhiên đôi lúc xuất hiện lỗi máy tính treo Device Mangager ( không nhận chuột + bàn phím - cũng HID).
    Mình chưa tìm được nguyên nhân có phải do vấn đề ở thiết bị của mình hay không nhưng vẫn có nghi ngờ dữ liệu truyền lên và truyền xuống trùng thời gian gây xung đột đường truyền ????.
    Tuy nhiên đó chỉ là suy luận. Không biết hiện tượng xung đột đó có xảy ra ? Và hậu quả của nó như thế nào ?
    Các cao nhân trên này chỉ giáo giúp nhé !
    Cảm ơn !
    Xung đột là hiện tượng khi cả 2 cùng gửi tín hiệu " chọi đầu ", việc để cả phần mềm, phần cứng gửi theo kiểu ngẫu nhiên ( không bắt tay ) sẽ xảy ra xung đột ( kết quả của hiện tượng này phần mềm bị treo (tùy từng phần mềm ( PC software được tạo bởi cái gì ), C++, delphi ..v.v hay trên nền tảng . NET ), với các phần mềm được viết can thiệp trực tiếp như C++ builder, delphi thì máy chỉ treo phần mềm ( không hoạt động ) , chuột và thiết bị vẫn hoạt động, vẫn có thể tắt chương trình, thế là ổn .
    Với các phần mềm không can thiệp trực tiếp, trên nền tảng .NET ( như VB.Net , C#, C++. NET v.v. ) vấn đề khá nghiêm trọng như treo cứng chuột, máy ( không thể làm gì được ), thậm chí máy có thể bị DUMP ( hiện màn hình xanh ) và tự khởi động lại ( Có vẻ như làm việc phần mềm + phần cứng mà chạy trên NET framework khá là cùi bắp, chậm chạp ( nên thấy cái bọn khoai Tây nó không sài để phát triển software cho phần cứng ) Mình có thời gian dùng .NET và đã chuyển đổi tự nghiên cứu sang làm việc với RAD STUDIO cách đây rất nhiều năm ( do nhận thấy sự hạn chế của . NET trong công việc ).

    Dù .NET hay C++ builder (RAD studio ) thì cũng sẽ gặp hiện tượng xung đột mà thôi ( hậu quả thì tùy người code phần mềm, nền tảng mà bị nặng hay nhẹ ). Để tránh xung đột thì nên cần thiết phải bắt tay ( gửi lên và phải có hồi đáp ... để được gửi lên tiếp ) hoặc phần mềm phải xử lý được kết thúc bản tin, firmware phải quản lý được quá trình gửi . PC chỉ gửi khi phần cứng đã đẩy tín hiệu kết thúc, khi thấy tín hiệu từ PC truyền xuống phải ngắt quá trình gửi.
    Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

    Comment


    • #3
      Nguyên văn bởi duong_act Xem bài viết
      Chào mọi người !

      Hiện tại mình đang làm một thiết bị (sử dụng PIC và Mikro C) giao tiếp với máy tính qua USB (HID).
      PIC gửi dữ liệu lên PC vô điều kiện lặp lại theo chu kì tầm 20ms. Dữ liệu từ PC truyền xuống phát sinh bất thường không cố định thời gian.
      Mọi việc gần như hoàn hảo tuy nhiên đôi lúc xuất hiện lỗi máy tính treo Device Mangager ( không nhận chuột + bàn phím - cũng HID).
      Mình chưa tìm được nguyên nhân có phải do vấn đề ở thiết bị của mình hay không nhưng vẫn có nghi ngờ dữ liệu truyền lên và truyền xuống trùng thời gian gây xung đột đường truyền ????.
      Tuy nhiên đó chỉ là suy luận. Không biết hiện tượng xung đột đó có xảy ra ? Và hậu quả của nó như thế nào ?
      Các cao nhân trên này chỉ giáo giúp nhé !
      Cảm ơn !
      Em nghĩ trường hợp xung đột do truyền lên/truyền xuống cùng lúc rất khó xảy ra (về mặt firmware chạy trên chip, app trên pc host em ko rõ). Vì trên usb chỉ có host chủ động. device muốn truyền được thì trước đó host phải gọi receive, nếu không transfer request sẽ được đẩy vào queue. nếu trong một thời gian mà host vẫn không gọi receive thì device có thể tràn queue, lỗi có thể xảy ra khi xử lý tràn queue không đúng.

      Em không rõ anh [MENTION=60991]duong_act[/MENTION] dùng transfer type nào? vì HID có ít nhất 2 transfer types là control transfer và Interrupt transfer. em nghĩ nên dùng Interrupt transfer để truyền data sẽ an toàn hơn, vì control transfer dành riêng cho các message điều khiển (refer Control transfers are intended to support
      configuration/command/status type communication flows between client software and its function
      )

      Thông thường các HID device như chuột, bàn phím, game pad cũng dùng Interrupt transfer để truyền data. hay các class khác cũng không dùng control transfer để truyền user data

      Cũng có thể phần device descriptor khai báo chưa đúng hoặc xung đột với device khác trên cùng 1 máy tính

      có gì thiếu xót các bác bổ xung thêm ạ

      Thanks & regard

      Comment


      • #4
        Nguyên văn bởi hoasua_2005 Xem bài viết
        Em nghĩ trường hợp xung đột do truyền lên/truyền xuống cùng lúc rất khó xảy ra (về mặt firmware chạy trên chip, app trên pc host em ko rõ). Vì trên usb chỉ có host chủ động. device muốn truyền được thì trước đó host phải gọi receive, nếu không transfer request sẽ được đẩy vào queue. nếu trong một thời gian mà host vẫn không gọi receive thì device có thể tràn queue, lỗi có thể xảy ra khi xử lý tràn queue không đúng.

        Em không rõ anh @duong_act dùng transfer type nào? vì HID có ít nhất 2 transfer types là control transfer và Interrupt transfer. em nghĩ nên dùng Interrupt transfer để truyền data sẽ an toàn hơn, vì control transfer dành riêng cho các message điều khiển (refer Control transfers are intended to support
        configuration/command/status type communication flows between client software and its function
        )

        Thông thường các HID device như chuột, bàn phím, game pad cũng dùng Interrupt transfer để truyền data. hay các class khác cũng không dùng control transfer để truyền user data

        Cũng có thể phần device descriptor khai báo chưa đúng hoặc xung đột với device khác trên cùng 1 máy tính

        có gì thiếu xót các bác bổ xung thêm ạ

        Thanks & regard
        Xung đột HID là việc bình thường và xảy ra như cơm bữa ( chứ không phải là khó xảy ra ) nếu ta không kiểm soát mà cứ truyền kiểu ngẫu nhiên ( khi 2 thằng cùng truyền thì bị hiện tượng mà thôi ). Vấn để này nhiều người đã gặp phải chứ không chỉ cậu duong_act (có lẽ bây giờ cậu ấy mới va chạm đến sự kiện này )
        Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

        Comment


        • #5
          Nguyên văn bởi queduong Xem bài viết
          Xung đột HID là việc bình thường và xảy ra như cơm bữa ( chứ không phải là khó xảy ra ) nếu ta không kiểm soát mà cứ truyền kiểu ngẫu nhiên ( khi 2 thằng cùng truyền thì bị hiện tượng mà thôi ). Vấn để này nhiều người đã gặp phải chứ không chỉ cậu duong_act (có lẽ bây giờ cậu ấy mới va chạm đến sự kiện này )
          Cảm ơn mọi người.
          Mình gặp sự cố này từ lâu rồi nhưng chưa chú trọng khắc phục bởi vì đơn giản khi đó reset phần cứng hoặc phần mềm là được. Khi đó thường treo Device Manager của máy tính và không nhận chuột và bàn phím. Phần mềm thì không treo do sử dụng multi thead. Cũng một phần do phần cứng và phần mềm do 2 người phát triển riêng nên không muốn lấn sân sang phần mềm ( phần mềm viết trên nền .NET). Cho tới khi sự cố sảy ra tổn thất gần 10000$. Hic mất uy tín quá
          Last edited by duong_act; 07-07-2014, 13:03.

          Comment


          • #6
            Xin chào các bác!
            Mình lại gặp cái vụ này :
            Vụ bắt tay ok rồi nhưng giờ là vụ các HID device choảng nhau. Thiết bị của mình truyền nhận với máy tính tuần tự 30ms. Khi hoạt động thì các HID khác như chuột, bàn phím kết nối vào sau đều không hoạt động. Tắt truyền nhận và cắm thiết bị khác vào lại ok.
            Các bác dính vụ này chưa nhỉ ?

            Comment

            Về tác giả

            Collapse

            duong_act Tìm hiểu thêm về duong_act

            Bài viết mới nhất

            Collapse

            Đang tải...
            X