Thông báo

Collapse
No announcement yet.

Truyền dữ liệu qua cổng ethernet giữa xc3s500e và labview

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

  • Truyền dữ liệu qua cổng ethernet giữa xc3s500e và labview

    Xin chào các bạn, mình đang làm 1 chương trình là truyền dữ liệu từ microblaze về máy tính qua cổng ethernet. Mình đang gặp phải vài vấn đề mong mọi người chỉ giúp.

    - Mình tạo ra 1 microblaze có EMAC, chương trình đã phát sinh các hàm hỗ trợ của emaclite.
    - Trên labview có hỗ trợ protocol TCP (các vi như open, listen, queue... đều có đủ). mình thấy muốn open connection thì cần phải có PORT (labview dùng port 6341)
    - Gắn board bằng cáp mạng vào hub (loại có phát wifi ở nhà mình í), chạy labview ----> hoàn toàn ko kết nối

    - Trong XPS, mình không biết PORT của emac lite mình dùng là bao nhiêu và gắn vào phần nào của header frame (vì trong datasheet của emaclite không thấy nói đến thông số Port này)

    - Mình cũng xem vài ví dụ về emaclite nhưng cũng khống máy thấy gắn PORT vào header frame để gửi đi. Các bạn giải thích giúp mình với, mình google thì chỉ thấy chuyển từ máy tính đến máy tính thôi, mà truyền PC đến PC thì đã có card mạng tự động gắn header (như mac, port, tcp,ip...)

    - Hiện tại mình dùng board xilinx xc3s500e, EDK 10.1, labview 8.5 và..... board, pc không kết nối được với nhau. Bạn nào biết về cái này giúp mình với nhé.

    Cám ơn các bạn!

  • #2
    Nguyên văn bởi tuongthuong Xem bài viết
    Xin chào các bạn, mình đang làm 1 chương trình là truyền dữ liệu từ microblaze về máy tính qua cổng ethernet. Mình đang gặp phải vài vấn đề mong mọi người chỉ giúp.

    - Mình tạo ra 1 microblaze có EMAC, chương trình đã phát sinh các hàm hỗ trợ của emaclite.
    - Trên labview có hỗ trợ protocol TCP (các vi như open, listen, queue... đều có đủ). mình thấy muốn open connection thì cần phải có PORT (labview dùng port 6341)
    - Gắn board bằng cáp mạng vào hub (loại có phát wifi ở nhà mình í), chạy labview ----> hoàn toàn ko kết nối

    - Trong XPS, mình không biết PORT của emac lite mình dùng là bao nhiêu và gắn vào phần nào của header frame (vì trong datasheet của emaclite không thấy nói đến thông số Port này)

    - Mình cũng xem vài ví dụ về emaclite nhưng cũng khống máy thấy gắn PORT vào header frame để gửi đi. Các bạn giải thích giúp mình với, mình google thì chỉ thấy chuyển từ máy tính đến máy tính thôi, mà truyền PC đến PC thì đã có card mạng tự động gắn header (như mac, port, tcp,ip...)

    - Hiện tại mình dùng board xilinx xc3s500e, EDK 10.1, labview 8.5 và..... board, pc không kết nối được với nhau. Bạn nào biết về cái này giúp mình với nhé.

    Cám ơn các bạn!
    Hi,
    Khái niệm port như bạn nói là "logical port" chứ không phải physical. Giá trị của port là 16-bit trong gói dữ liệu UDP/TCP.
    Maclite không đề cập vì nó làm việc ở lớp MAC (MAC layer) ...
    Thông thường, MAC sẽ có FIFO để phần mềm ghi data vào, MAC sẻ gắn thêm:
    - MAC source address (8-byte), có thể có, cũng có thể packet đã có sẵn do phần mềm ghi vào
    - MAC destination address
    - Checksum

    Như vậy bạn phải làm gì:
    1) Send:
    - Tao ra một packet hoàn chỉnh theo TCP/UDP protocol: gổm: MAC Address Src/Dest, IP addresses src/dest, Ports, data
    - Ghi vào FIFO của Maclite và gửi đi
    2) Receive
    - Nhận interrupt từ Mac, đọc data ra khỏi RX fifo và chuyển lên lớp trên (tức lớp xử lý gói TCP)

    Comment


    • #3
      Chào bạn jefflieu, cám ơn bạn đã trả lời mình. Nhưng mình vẫn chưa hiểu lắm ý bạn nói. Mình đọc trong datasheet của emaclite (LogiCORE IP XPS Ethernet Lite Media Access Controller.pdf) mình thấy emaclite đóng gói frame thế này:

      Preamble(7byte)|Start Frame Delimiter(1byte)|Destination Address(6byte)|Source Address(6byte)|Type/Length(2byte)|Data(0-1500)|Pad(0-46)|Frame check sequence(4byte)

      Ví dụ mình muốn gửi chuỗi "điện tử Việt Nam" từ xc3s500e có IP 192.168.1.102 về labview (PC) có địa chỉ 192.168.1.100, port 6341 thì mình định dạng frame như sau:


      transmit:
      - Preamble: tự động gắn
      - Start Frame Delimiter: tự động gắn
      - Destination Address: 192.168.1.100
      - Source Address: 192.168.1.102
      - Type/Length: 46 byte (17data and 29byte pad): tự động insert
      - Data: điện tử Việt Nam

      receive: phần lớn các trường đều được emaclite gắn vào khi emaclite nhận.

      Theo mình hiểu thì có phải trên PC dùng port 6341 thì xc3s500e cũng phải gắn vào 1 cái port 6341 để lúc transmit data về PC thì card mạng đưa data qua port 6341 lên labview. (Không biết mình nghĩ vậy có đúng không nữa)

      Mình không biết gắn localport vào phần nào trong định dạng frame của emaclite cả. Bạn giải thích rõ hơn giúp mình với.

      Còn nữa Destination/source Address 6byte, nhưng IP của mình có 4byte, tại sao bạn nhỉ?


      Cám ơn jefflieu.
      Last edited by tuongthuong; 08-07-2013, 14:20.

      Comment


      • #4
        Phần Maclite đóng gói là MAC Layer Packet, 6-byte đó là mac address
        Gói bạn muốn gửi là IP Layer Packet + UDP/TCP protocol
        Vậy data bạn phải đưa cho maclite là toàn bộ IP packet của bạn gổm: MAC-Header - IP header + UDP/TCP Header + Data ... Port sẽ nằm trong UDP/TCP Header
        MAC Header: maclite sẽ thay đổi phấn mac-header và thêm vào: SFD + Checksum

        Basic Ethernet Frame: https://en.wikipedia.org/wiki/Ethernet_frame
        IP Frame: https://en.wikipedia.org/wiki/IPv4
        TCP Frame: https://en.wikipedia.org/wiki/Transm...ntrol_Protocol

        Comment


        • #5
          Cho mình hỏi thêm câu nữa jefflieu ơi!

          Mình hiểu thế này có đúng không??

          trong OSI model https://en.wikipedia.org/wiki/Media_access_control, gồm 7 tầng, trên PC khi ta viết chương trình thì ta làm việc ở tầng 7, còn 6 tầng kia là việc của card mạng máy tính, ta ko cần quan tâm, đúng không?

          khi làm việc với xc3s500e, mình tạo ra 1 microblaze trống không nạp vào con xc3s500e 320 pin trên board FPGA, con xc3s500e320pq này nối với con ethernet LAN83C185 bằng 1 số chân như (TXD(4), TX_EN, TX_ER..... RXD(4), RX_EN.... MDC, MDIO)

          Mình vào XPS và tự viết source code gắn hết các thông số từ tầng 1 đến tầng 7 vào frame cần gửi đi như trong OSI model, sau đó gửi 4byte một qua TXD(4) đến con LAN83C185, rồi con lan83C185 tự động gửi frame này ra RJ45.

          Nếu mình hiểu thế này là đúng thì bạn có thể cho mình 1 ví dụ cụ thể về frame mình muốn gửi đi từ C (XPS) không?

          vd mình có struct (tầng7, tầng 6....., tầng 1) có phải mình sẽ truyền thế này ko??

          tầng 7: data: "điện tử Việt Nam"
          tầng 6: MIME, or XDR (cái này chuỗi cụ thể của nó thế nào hả bạn?)
          tầng 5: Named pipe NetBIOS SAP PPTP RTP SOCKS SPDY TLS/SSL (mấy cái này mình cũng ko hiểu)
          tầng 4, 3: 6341 (port nguồn), 192.168.1.100 (IP nguồn), 6341 (port đích), 192.168.1.102 (ip đích)
          tầng 2 và tầng 1 thế nào?? bạn giải thích dùm mình với.

          Vì mình mới làm về cái này nên bạn giải thích chi tiết giúp mình với nhé bạn (không biết thế này có hơi quá không , làm phiền bạn quá)

          Cám ơn bạn, jefflieu.
          Last edited by tuongthuong; 08-07-2013, 15:33.

          Comment


          • #6
            Nguyên văn bởi tuongthuong Xem bài viết
            Cho mình hỏi thêm câu nữa jefflieu ơi!

            Mình hiểu thế này có đúng không??

            trong OSI model https://en.wikipedia.org/wiki/Media_access_control, gồm 7 tầng, trên PC khi ta viết chương trình thì ta làm việc ở tầng 7, còn 6 tầng kia là việc của card mạng máy tính, ta ko cần quan tâm, đúng không?
            Mình không có comment gì về vụ này. Có thể đúng và có thể không. Từ từ tự bạn sẽ hình dung được mấy cái tầng lớp này là gì.

            khi làm việc với xc3s500e, mình tạo ra 1 microblaze trống không nạp vào con xc3s500e 320 pin trên board FPGA, con xc3s500e320pq này nối với con ethernet LAN83C185 bằng 1 số chân như (TXD(4), TX_EN, TX_ER..... RXD(4), RX_EN.... MDC, MDIO)

            Mình vào XPS và tự viết source code gắn hết các thông số từ tầng 1 đến tầng 7 vào frame cần gửi đi như trong OSI model, sau đó gửi 4byte một qua TXD(4) đến con LAN83C185, rồi con lan83C185 tự động gửi frame này ra RJ45.
            Ừ, đúng. Bạn phải làm từ trên xuống dươi. MACLITE sẽ thay đổi "SOURCE MAC ADDRESS" và găn thêm checksum vào, sau đó găn thêm Preample với SFD rổi gởi ra thằng Phy.
            Phy là lớp 1, physical layer.
            Tủy văo mạng (media) của bạn mà phy xuất ra tín hiệu gì (optical, 100Mbps hay 1000Mbps ...)
            Viêc phân lớp như vậy để khỏi phải phụ thuộc vào media (loại cable dùng để truyền data).

            Nếu mình hiểu thế này là đúng thì bạn có thể cho mình 1 ví dụ cụ thể về frame mình muốn gửi đi từ C (XPS) không?

            vd mình có struct (tầng7, tầng 6....., tầng 1) có phải mình sẽ truyền thế này ko??

            tầng 7: data: "điện tử Việt Nam"
            tầng 6: MIME, or XDR (cái này chuỗi cụ thể của nó thế nào hả bạn?)
            tầng 5: Named pipe NetBIOS SAP PPTP RTP SOCKS SPDY TLS/SSL (mấy cái này mình cũng ko hiểu)
            tầng 4, 3: 6341 (port nguồn), 192.168.1.100 (IP nguồn), 6341 (port đích), 192.168.1.102 (ip đích)
            tầng 2 và tầng 1 thế nào?? bạn giải thích dùm mình với.

            Vì mình mới làm về cái này nên bạn giải thích chi tiết giúp mình với nhé bạn (không biết thế này có hơi quá không , làm phiền bạn quá)

            Cám ơn bạn, jefflieu.
            Bạn có thể hỏi thoải mái, mình chỉ giúp được phần khái niệm, phần tiểu tiết bạn phải tự mày mò trên máy + phẩn cứng.

            Nếu bạn muốn truyến data: "điện tử Việt Nam".

            Trường hợp 1: Từ máy tính A sang máy tính B. Mỗi máy có 6-byte MAC address. Bạn chỉ cần bỏ data vào phần payload của Ethernet Packet: https://en.wikipedia.org/wiki/Ethernet_frame
            Trương hợp 2: Tư máy tinh A sang máy tinh B, hai máy tính ở 2 network khác sau, bạn cần thêm lớp IP.
            Trường hợp 3: Tử ưng dụng 1 tren A sang ứng dụng 2 trên B. Bạn cần thêm lớp UDP/TCP.

            Mục đích cuối cùng của bạn là giao tiếp với labview tren PC thí bạn cần làm như sau:

            - Thiết kế phần cứng --> Truyen data ở Physical Layer (L1+L2)
            - Thiêt kê driver, nhận vằ truyền ở lớp L2. Ví dụ nhận interrupt từ MAC, đọc data ra khỏi FIFO ...
            - Thiêt kế driver, TCP/IP stack, sẽ có các API, open/listen/close ..., API này nhận lênh từ lớp trên, tạo packet và chuyên xuống lơp L2
            - Thiêt kê application, truyền và xử lý các gói data cho phần mêm trên PC

            Phức tạp lắm.
            Nêu bạn cài OS (ulinux gì đó) thì bạn chỉ cần thiêt kề Application để giao tiếp với Software trên PC.

            Comment


            • #7
              Cám ơn bạn, mình đang ... mò mẫm trên C

              Comment

              Về tác giả

              Collapse

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

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

              Collapse

              Đang tải...
              X