Thông báo

Collapse
No announcement yet.

Giao diện mạng trong PC !

Collapse
This is a sticky topic.
X
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Giao diện mạng trong PC !

    Tôi thấy các bạn trên diễn đàn thắc mắc rất nhiều về cách làm thế nào để ghép nối được PC với các thiết bị khác.Tôi nghĩ rằng chúng ta nên mở một Box giới thiệu và hướng dẫn cho anh em các giao diện mạng trên PC và cách chao đổi dữ liệu.
    Trên PC có nhiều các mà chúng ta có thể làm giao diện mạng nhưng thông dụng nhất là:Cổng song song RS232,USB,cổng nối tiếp LPT,và ghép nối qua bus PCI,ISA(hình như bây giờ bị tiệt chủng).
    Vậy anh em trên diễn đàn ai có thời gian thì viết cho anh em về các thức và phương pháp chao đổi dữ liệu của PC thông qua các công đó(Dùng một ngôn ngữ lập trình nào đó để thí dụ và phân tích cho anh em)
    Về phần tôi thì hôm sau tôi sẽ viết về PCI (phần này hơi khó và mới đối với các anh em sinh viên).
    Mong rằng anh em trên diễn đàn nhữ ai đã dùng hoặt biết dùng cổng truyền thông nào thì ghóp phần giúp các anh em khác.Càng chi tiết càng tốt.
    Hôm sau viết tiếp !
    Chúc các bạn thành công !

  • #2
    được đó. Công công quả là tốt khi khởi xướng cho anh em trao đổi. Được em sẽ công phu giúp công công một tay. Dù tài không cao nhưng cũng xin góp chút cho các bác.
    Technical sale at WT Microelectronics S'pore
    Hỗ trợ dự án sử dụng các hãng Texas Instrument, STMicro, Freescale, Fairchild, International Rectifier, Ublox, Lumiled, Maxim
    Liên hệ: 0915.560.511 hoặc ngo.haibac@wtmec.com

    Comment


    • #3
      Pci

      Phần 1: Giới thiệu về PCI

      (Toàn bộ phần 1 này là tôi copy từ trang 3ihut.net của tác giả Langtutocxoan)

      PCI là bus truyển tải thông tin rất hiệu quả giữa bộ xử lý, bộ nhớ và các thiết bị trong mang bus. Hiện giờ hầu hết các máy tính cá nhân (PC) đều dùng mạng này bên cạnh ISA (Industry Standard Architecture) để nối bộ xử lý, bộ nhớ, và các thẻ mạch điện như (ethernet, audio, video cards.v.v...) và ta cũng có thể thiết kế một mạch giao diện với mạng này, gửi thông tin ta muốn ra thế giới bên ngoài và các thông tin từ bên ngoài được tổng hợp và nhận vào mạng.
      Mạng PCI khác và nhanh hơn ISA. Mạng PCI tiêu chuẩn có tốc độ truyền trên mạng là 33MHz với 32 bít dữ kiện, trong khi ISA truyền với tốc độ 8MHz với 16 bít hoặc 8 bít dữ kiện. Mạng PCI dùng chung đường truyền cho bus địa chỉ và bus dữ kiện (mutiplex), trong khi ISA dùng bus địa chỉ và dữ kiện riêng biệt (non-multiplex).
      Các tín hiệu giao diện dùng trong mạng PCI là chừng 50 tín hiệu: 32 cho địa chỉ và dữ kiện (Address Data), 4 cho các lệnh (Command Bus), còn lại là các tín hiệu điều khiển và interrupt.
      Bộ giao diện PCI được chia làm 2 loại: chủ (master PCI) và tớ (target PCI). PCI chủ có thể khởi xướng một hoạt động truyền tải nhưng PCI tớ thì không. Trong mạng có thể có nhiều bộ chủ và nhiều bộ tớ.
      Về hoạt động mạng thì một bộ chủ PCI gởi ra 32 bít địa chỉ cùng với lệnh. Khi một PCI tớ hoặc PCI chủ nào đó trong mạng nhận được địa chỉ gởi đến nó, nó sẽ sắp xếp để chuẩn bị nhận hoặc truyền dữ kiện. Khi chuẩn bị xong sẽ gởi lại tín hiệu đã sẵn sàng và bộ chủ bắt đầu truyền ra các dữ kiện hoặc nhận lại các dữ kiện. Một điểm đặc biệt của mạng PCI là nó truyền đi một địa chỉ và sau đó là một tràn các dữ kiện liên tiếp được gởi đi hoặc nhận lại. Bộ tớ PCI tự động tăng con chỉ trong phần đệm để chứa hoặc lấy ra các dữ kiện theo thứ tự. Chính đặc điểm này mà PCI truyền hiệu quả hơn ISA. ISA truyền ra một địa chỉ cho mỗi byte, và địa chỉ và dữ kiện truyền xen kẻ nhau.
      Thiết kế PCI khó hơn là ISA. Với nhiều ứng dụng thường thì chỉ cần PCI tớ (target PCI) vì thiết kế PCI chủ phức tạp hơn và tốn nhiều linh kiện hơn.
      Vậy muốn giao diện với mạng PCI trước hết là phải có bộ tớ. Bộ tớ có nhiệm vụ mã hóa địa chỉ, nhận hoặc truyền dữ kiện, xử lý các tín hiệu điều khiển mạng, và sau cùng là tạo phần giao diện quen thuộc với người thiết kế, để sử dụng các dữ kiện trong mạng. Tức là các mạnh điện ứng dụng của bạn như điều khiển động cơ, camera, nút nhấn, điều khiển đèn... được nối ở phần giao diện này.
      Nếu các ứng dụng của bạn cần truyền tải dữ kiện thật nhanh thì trong bộ tớ PCI cần có phần đệm (thường là loại bộ nhớ FIFO - First In First Out), làm cho bộ PCI của bạn thêm phức tạp. Có nhiều loại chip PCI hiện hành của rất nhiều hãng như Intel, Motorolla, National... thường các loại này có chứa luôn bộ nhớ. Nó nối với mạng PCI và cho bạn các tín hiệu giao diện quen thuộc, dễ xử dụng. Bạn chỉ cần thiết kế mạch theo yêu cầu ứng dụng và nối vào vào mạng PCI qua chip này. Các chip loại này thường có rất nhiều chân, đòi hỏi kỹ thuật làm thẻ mạch cao, và tốn kém.
      Bạn cũng có thể tự thiết kế lấy phần giao diện PCI với các chip trong họ 74 nhưng cần rất nhiều con, thẻ diện tích lớn.
      Có thể dùng FPGA (Field Programmable Gate Array) lập trình phần cứng cho PCI và các mạch ứng dụng. FPGA là loại chip trong đó gồm hàng ngàn, hàng triệu cổng logic. Với chương trình viết trên máy computer các cổng này nối thành các mạch mình muốn, và mất chừng vài trăm miliseconds để biến nó thành một chip khác.

      Bạn có thể vào đây để đọc thêm về PCI
      http://documents.epanorama.net/links/pc/bus.html#pci



      1. Tổng Quát PCI (Peripheral Component Interface)

      Mạng bus PCI là một mạng hiệu năng cao dùng để nối các chip, các thẻ, và hệ thống vi xử lý/bộ nhớ. Nó được khởi đầu bởi hãng Intel trong những năm đầu thập niên 90 như là một phương cách tiêu chuẩn nối các chip trên mạch. Sau đó nó được công nhận là một tiêu chuẩn công nghiệp do nhóm PCI Special Interest Group (PCI SIG).
      PCI được công nhận lần đầu để dùng trong máy tính cá nhân năm 1994 với sự giới thiệu của Intel về bộ chip "Saturn" và motherboard "Alfredo" với bộ xử lý 486. Với sự giới thiệu về bộ chip và motherboard cho bộ xử lý Pentium, PCI đã sớm thay thế phần lớn cấu trúc các mạng như EISA, VL, và Micro Channel. Mạng bus ISA vẫn tiếp tục tồn tại song song với PCI để hộ trợ cho "di sản" của các thẻ mạch ra đời trước PCI. Nhưng các thẻ mạch này được thiết kế lại, mạng PCI nhằm thay thế hoàn toàn mạng ISA.
      Vào ngày 11/9/1998, nhóm PCI SIG tuyên bố rằng Compaq, Hewlett-Packard, và IBM đã đệ trình một tiêu chuẩn mới để duyệt xét được gọi là "PCI-X". Tiêu chuẩn đề nghị cho phép tăng nhanh tốc độ mạng PCI lên đến 133 MHz. Nó cũng bao gồm các đề nghị thay đổi nghi thức giao diện của PCI, ảnh hưởng đến tốc độ truyền tải và yêu cầu về thời gian. Nhóm PCI SIG đã chấp nhận hình thành một nhóm làm việc để xem xét lại sự đề xuất.

      Comment


      • #4
        Phần 1 tiếp !

        2. Tài Liệu PCI
        2.1 Ðặc Tính Kỹ Thuật PCI
        Các bản sao đặc tính kỹ thuận của PCI có thể được cung cấp với một khoảng lệ phí của nhóm PCI SIG. Sau đây là các đặc tính kỹ thuật của PCI được phát hành: .
        Revision 1.0 - Bản gốc. Phát hành ngày 22/6/92. Chỉ là đặc tính về linh kiện. Không xác định tiêu chuẩn cho hệ thống cắm nối thẻ mạch.
        Revision 2.0- Phát hành 30/4/93. Ðặc tính về hệ thống cắm nối.
        Revision 2.1 - Phát hành 1/6/95. Xác định tùy chọn 66 MHz và thêm nhiều chi tiết cho rõ ràng.
        Revision 2.2 - Phát hành 18/12/98. Sáp nhập nhiều các tiêu chuẩn nâng cao.
        Nhóm PCI SIG cũng duy trì các tài liệu sau:
        Ðặc điểm cấu trúc cầu nối PCI-PCI. (PCI to PCI Bridge Architecture Specification) .
        Hướng dẫn thiết kế PCI lưu động. (PCI Mobile Design Guide) . Ðặc điểm về quản lý hệ thống điện cho mạng PCI (PCI Bus Power Management Interface Specification) .
        Ðặc điểm của Hot-Plug PCI. (PCI Hot-Plug Specification) .
        Ðặc điểm của BIOS (PCI BIOS Specification).
        Ðặc điểm của PCI mini.

        . Giao Thức Mạng PCI

        PCI là một cấu trúc mạng hoạt động đồng bộ, mọi sự truyền tải dữ kiện được thực hiện một cách đồng bộ với xung nhịp của hệ thống. Tiêu chuẩn ban đầu của PCI cói xung nhịp tối đa là 33 MHz, cho phép một lần truyền được thực hiện mất 30 nano giây. Sau này, với bản tái thảo 2.1 (Revision 2.1), tiêu chuẩn được mở rộng đến 66 MHz, nhưng phần lớn các máy tính cá nhân ngày nay vẫn tiếp tục sử dụng PCI 33MHz. PCI sử dụng chung chân tín hiệu cho 32 bít địa chỉ và 32 bít dữ kiện (gọi là AD[31: 0]). Với 33 MHz, một ổ cắm 32 bít có tốc độ truyền là 132 MBytes/giây, và với ổ cắm 64 bít thì là 264 MByte/giây.
        Sự nhập chung địa chỉ và dữ kiện làm giảm đi số chân cho các ổ cắm PCI, do đó giảm giá thành và kích thước cho các linh kiện PCI. 32 bít PCI tiêu chuẩn gắn lên mạch chỉ dùng khoảng 50 chân tín hiệu trên ổ cắm PCI vì 32 chân được dùng chung cho 32 bít địa chỉ và dữ kiện.
        Chu kỳ mạng PCI được khởi đầu bằng cách gởi ra một địa chỉ trên đường tín hiệu AD[31:0] ở cạnh của một xung nhịp, nó được gọi là giai đoạn định địa chỉ. Giai đoạn định địa chỉ được báo hiệu bởi tín hiệu FRAME# (khung). Tại cạnh của xung kế tiếp là giai đoạn bắt đầu gởi dữ kiện, có thể là một hay nhiều dữ kiện liên tiếp. Dữ kiện cũng được gởi trên AD[31: 0].
        Với PCI bus, dữ kiện được truyền giữa một bộ khởi xướng (initiator hay master-chủ) và bộ đích (target hay slave-tớ). Bộ khởi xướng gởi ra tín hiệu lệnh C/BE[3: 0]#. Trong giai đoạn định địa chỉ thì C/BE[3:0]# báo cho bộ đích biết lệnh (như lệnh đọc bộ nhớ, viết vào bộ nhớ, đọc ngõ ra/vào, gởi ra ngõ ra/vào, v.v..) Trong giai đoạn chuyền dữ kiện, /BE[3: 0] làm nhiệm vụ chỉ ra loại byte dữ kiện nào có giá trị. Cả hai bộ khởi xướng (chủ) và bộ tớ có thể chen vào trạng thái chờ trong truyền dữ kiện truyền bằng cách tắc đi tín hiệu IRDY# và TRDY. Dữ kiện hợp lệ được truyền tại mỗi cạnh của xung trong lúc tín hiệu IRDY# và TRDY được bậc.
        Quá trình hoạt động PCI gồm 1 giai đoạn định địa chỉ và một hay nhiều giai đoạn truyền dữ kiện. Các hoạt động ra/vào truy cập các thanh ghi bên trong PCI đích (tớ) chỉ có một giai đoạn truyền tải dữ kiện. Các thanh ghi bên trong bộ giao diện PCI chứa các thông tin như tên hãng sản xuất, năm sản xuất, ... để giúp cho chức năng plug and play. Khi cắm một thẻ PCI vào mạng, bộ xử lý các thông tin trong các thanh ghi và tự động tìm chương trình (driver) để điều khiển giao diện. Trong lúc truy cập các thông tin này thì PCI truyền từng dữ kiện một, tức là mỗi một địa chỉ gởi ra chỉ có một dữ kiện (32 bít) được truyền tải. Nhưng khi truyền các khối dữ kiện trong bộ nhớ thì bộ chủ chỉ cần gởi ra một địa chỉ đầu và sau đó các dữ kiện được truyền liên tiếp nhau cho tới khi bộ chủ hay bộ đích đưa ra tín hiệu chấm dứt. Các dữ kiện được viết và đọc các vị trí thứ tự tiếp nhau trong bộ nhớ. Cả hai chủ và tớ có thể làm dừng trình tự truyền bất kỳ lúc nào. Bộ chủ ra dấu báo hoàn thành một chu trình truyền tải bằng cách tắc đi tín hiệu FRAME# ở cuối giai đoạn truyền dữ kiện. Bộ tớ có thể làm dừng bước truyền bằng cách bậc tín hiệu STOP#. Khi bộ chủ dò thấy tín hiệu STOP được bậc lên, nó phải dừng truyền và phân định lại mạng trước khi tiếp tục. Nếu STOP# được bậc mà không có bất kỳ giai đoạn hoàn thành, bộ tớ sẽ đưa ra hiệu lần nữa. Nếu tín hiệu STOP được bậc mà có một hay nhiều giai đoạn dữ kiện xảy ra một cách tốt đẹp thì bộ tớ sẽ ngắt.
        Trong một mạng PCI có thể có nhiều bộ chủ và bộ đích. vì có thể có nhiều bộ chủ nên nên để quyết định bộ chủ nào có quyền sở hữu mạng thì bộ đó bậc tín hiệu REQ# (request). Bộ phân định cho quyền sở hữu mạng bằng cách bậc tín hiệu GNT# (Grand). REQ# và GNT# là thành phần duy nhất của mỗi ổ PCI cho phép thực hiện các thuật toán mạng linh động. Sự phân định trong PCI được "dấu", không tốn một xung nào.

        PCI hộ trợ sự cài đặc chính xác. Mỗi thiết bị PCI gồm một tập hợp các thanh ghi cài đặc, nó cho phép nhận dạng ra từng loại thiết bị (SCSI, hình ảnh, Ethenet, v.v...) và hãng sản xuất. Những thanh ghi khác cho phép cài đặt địa chỉ ngõ ra/vào, địa chỉ bộ nhớ, mức ngắt (interrupt level), v.v... Mặc dù không được ứng dụng rộng rãi, PCI cũng hộ trợ cho 64 bít địa chỉ. Không giống như 64 bít dữ kiện phải yêu cầu bộ cắm nối dài hơn, 64 bít địa chỉ có thể được hộ trợ qua bộ cắm nối 32 bít. 2 chu kỳ địa chỉ được được dùng, 32 bít địa chỉ thấp được truyền trước trên AD[31: 0], và sau đó 32 bít cao được truyền trên AD[31: 0] trong giai đoạn định địa chỉ. Phần còn lại tiếp tục như mạng truyền bình thường. PCI hộ trở cho cả hai mức điện thế tín hiệu 5 Vôn và 3.3 Vôn. Bộ cắm PCI xác định vị trí chân cho mức 5 và 3.3 Vôn. Tuy nhiên, các hệ thống trước đây chỉ có mức 5 Vôn, và không cấp điện 3.3 Vôn. Qua thời gian, thêm nhiều thiết bị cần điện thế tín hiệu giao diện là 3.3 Vôn, nhưng vì các thẻ mạch cắm vào khác cũng cần phải làm việc trong các hệ thống cũ với mức điện thế mạng mức 5 Vôn. Một phương cách được thực hiện trong bộ cắm PCI nhằm đề phòng trường hợp cắm các thẻ mạch vào trong hệ thống không có điện nguồn thích hợp. Mặc dù dùng các hệ thống PC thông dụng nhất, cấu trúc mạng PCI là bộ xử lý độc lập. Các xác định tín hiệu PCI có đặc điểm chung cho phép mạng được sử dụng trong hệ thống căn bản trên các họ bộ xử lý khác. PCI bao gồm các tiêu chuẩn chính xác nhằm bảo đảm chất lượng tín hiệu yêu cầu cho hoạt động ở 33 MHz và 66 MHz. Các linh kiện và các thẻ mạch phải có mạch bộ điều khiển thống nhất được thiết kế để dùng trong môi trường mạng PCI. Các thiết bị TTL được sử dụng trong các mạng trước như ISA và EISA thỏa yêu cầu của PCI. Sự giới hạn này cùng với tốc độ cao của mạng khiến cho hầu hết các thiết bị PCI được thực hiện với các ASICs. Tốc độ cao hơn của PCI giới hạn số ổ cắm trên một mạng máy tính không quá 3 hoặc 4, so với 6 hoặc 7 ở cấu trúc mạng cũ. Ðể có thêm các ổ cắm nối vào mạng PCI, nhóm PCI SIG xác định cơ cấu cầu nối PCI - PCI. Cầu nối PCI - PCI là ASISs, nó cô lập 2 mạng PCI và cho phép các dữ kiện đi từ mạng này sang mạng kia. Mỗi thiết bị cầu nối gồm một mạng PCI sơ cấp và một PCI thứ cấp. Nhiều thiết bị cầu nối có thể mắc lại thành hệ thống với nhiều mạng PCI.

        Giới thiệu một số chân tín hiệu PCI

        Comment


        • #5
          Hệ Thống Chân CLK
          Xung (clock) cung cấp thời chuẩn cho toàn bộ sự truyền tải trong mạng PCI. Tất cả các tín hiệu, ngoại trừ reset và interrupts (ngắt), được lấy mẫu tại cạnh lên của xung tín hiệu. Tất cả tiêu chuẩn thời gian mạng được xác định liên quan đến cạnh lên. Cho hầu hết các hệ thống, tín hiệu xung hoạt động ở tần số 33 MHz. Bản bổ xung Revion 2.1 của PCI xác định đặc tính cho cách thức 66 MHz, nhưng cách thức này chưa được xử dụng rộng rãi. Ðể hoạt động ở tần số 66 MHz, cả 2 mạng PCI hệ thống và PCI của thẻ mạch cắm vào phải thỏa điều kiện thiết kế tốc độ cao. Các thẻ báo cho hệ thống nếu nó có khả năng chạy ở 66 MHz qua tín hiệu M66EN. Hệ thống sẽ cung cấp xung 66 MHz đến thẻ, và xung ngầm định 33 MHz nếu thẻ không chạy được tần số cao hơn. Tương tự, nếu một hệ thống có khả năng cung cấp xung 33 MHz thì các thẻ 66 MHz phải có khả năng chạy với tần số thấp hơn. Giá trị thấp nhất cho tín hiệu xung là 0 Hz, cho phép xung được tạm ngưng tiết kiệm điện.

          RST#
          Reset được hạ xuống thấp để làm reset thiết bị PCI. Tín hiệu reset làm cho các thanh ghi, bộ khiển trạng thái, tín hiệu ra của thiết bị PCI trở về trạng thái ban đầu. RST# được bậc và tắt không phải cần đồng bộ với tín hiệu xung. Nó nằm ở trạng thái bậc ít nhất là 100 micro giây sau khi tín hiệu xung được ổn định. 4.2

          Chân Ðịa Chỉ Và Chân Dữ Kiện AD[31:0]
          Ðịa chỉ và dữ kiện được nhập chung trên các chân này. AD[31:0] truyền 32 bít địa chỉ trong "giai đoạn định địa chỉ", và truyền 32 bít dữ kiện trong "giai đoạn truyền dữ kiện." Một "giai đoạn định địa chỉ" chỉ xảy ra tại xung trong quảng từ điểm đi xuống từ cao xuống thấp của tín hiệu FRAME. "Giai đoạn truyền dữ kiện" xảy ra khi cả hai tín hiệu IRDY# và TRDY# được bậc xuống mức thấp. Trong quá trình ghi, bộ chủ gởi dữ kiện ra AD[31:0], trong mỗi chu kỳ nó hạ tín hiệu IRDY# xuống thấp. Bộ tớ khi có thể nhận dữ kiện thì hạ tín hiệu TRDY# xuống thấp. Khi cả hai IRDY# và TRDY# xuống thấp thì bộ tớ nắm giữ dữ kiện ghi và quá trình hoàn tất. Khi đọc thì quá trình ngược lại. Khi dữ kiện hợp lệ, bộ tớ hạ TRDY# xuống thấp và gởi dữ kiện ra AD[31:0], và bộ chủ khi có thể nhận dữ kiện thì hạ IRDY# xuống thấp. Khi cả hai tín hiệu TRDY# và IRDY xuống thấp, bộ chủ nắm lấy dữ kiện và hoàn tất quá trình đọc. Bít 31 mang giá trị lớn nhất, bit 0 mang giá trị nhỏ nhất.

          C/BE[3:0]#
          Lệnh (Command) và tín hiệu báo loại byte (Byte Enable) được nhập chung trên các chân này. Trong giai đoạn định địa chỉ, các tín hiệu này mang lệnh của mạng xác định loại truyền tải nào được thực hiện. Xem bảng tóm lược sau để biết các mã lệnh. Trong lúc truyền dữ kiện, các tín hiệu này mang thông tin về byte dữ kiện. C/BE[3]# là byte AD[31:24] và C/BE[0] là byte AD[7:0]. Tín hiệu C/BE[3:0]# chỉ được điều khiển bởi bộ chủ và được điều khiển trong suốt quá trình "giai đoạn định địa chỉ" và "giai đoạn truyền dữ kiện."

          C/BE[3:0]# Command Types

          0000
          Interrupt Acknowledge

          0001
          Special Cycle

          0010
          I/O Read

          0011
          I/O Write

          0100
          Reserved

          0101
          Reserved

          0110
          Memory Read

          0111
          Memory Write

          1000
          Reserved

          1001
          Reserved

          1010
          Configuration Read

          1011
          Configuration Write

          1100
          Memory Read Multiple

          1101
          Dual Address Cycle

          1110
          Memory Read Line

          1111
          Memory Write and Invalidate

          PAR
          Parity là kiểm tổng trên tín hiệu AD[31:0] và C/BE[3:0]#. parity chẳn cho biết tổng các số ''1'' trên AD[31:0], C/BE[3:0]#, và tín hiệu PAR là số chẳn. Tín hiệu PAR có cùng thời biểu như tín hiệu AD[31:0], nhưng chậm hơn một chu kỳ để có thêm thời gian tính giá trị parity.

          Chân Ðiều Khiển Giao Diện FRAME#
          Chu kỳ Frame được điều khiển xuống thấp bời bộ chủ để báo bắt đầu một truyền tải mới trong mạng. Giai đoạn định địa chỉ xảy ra trong quảng xung đầu tiên sau khi có sự chuyển tiếp từ mức cao xuống thấp của tín hiệu FRAME#, sau đó tín hiệu FRAME# được đưa trở lại lên mức cao chỉ sau một chu kỳ. Nếu nhiều giai đoạn truyền dữ kiện được thực hiện thì bộ chủ sẽ giữ tín hiệu FRAME# ở mức thấp cho đến khi truyền đến dữ kiện kế cuối. Bộ chủ thông báo ý định sắp chấm dứt giai đoạn truyền dữ kiện bằng cách đưa tín hiệu FRAME# lên cao trong quảng truyền dữ kiện cuối. Khi bộ tớ bắt đầu dừng thì bộ chủ hạ tín hiệu FRAME# xuống lại mức thấp cho đến khi việc truyền tải hoàn tất.

          IRDY#
          Initiator Ready (bộ chủ sẵn sàng) được hạ xuống thấp bởi bộ chủ để báo nó sẵn sàng để hoàn tất giai đoạn truyền dữ kiện. Trong lúc ghi nó báo bộ chủ đã gởi ra dữ kiện hợp lệ trên AD[31:0]. Lúc đọc nó báo bộ chủ đã sẵn sàng nhận dữ kiện trên AD[31:0]. Ngay khi được bật, bộ chủ giữ tín hiệu IRDY# ở mức thấp cho đến khi tín hiệu TRDY# được hạ xuống mức thấp để hoàn tất một bước truyền, hoặc bộ tớ dùng tín hiệu STOP# để chấm dứt mà không thực hiện truyển dữ kiện. IRDY# cho phép bộ chủ chen vào trạng thái chờ làm chậm lại việc truyền dữ kiện.

          TRDY#
          Target Ready (bộ tớ sẵn sàng) được hạ xuống thấp bởi bộ tớ, để báo nó đã sẵn sàng hoàn tất giai đoạn truyền dữ kiện. Trong lúc ghi nó báo bộ tớ đã sẵn sàng nhận dữ kiện trên AD[31:0]. Trong lúc đọc nó báo bộ tớ đã gửi ra dữ kiện hợp lệ trên AD[31:0]. Ngay khi được bật, bộ tớ giữ tín hiệu TRDY# ở mức thấp cho đến khi IRDY# được hạ xuống thấp, hoàn tất một bước truyền dữ kiện. TRDY# cho phép bộ tớ chen vào trạng thái chờ làm chậm lại việc truyền dữ kiện.

          STOP#
          Tín hiệu STOP# được hạ xuống thấp bởi bộ tớ để yêu cầu bộ chủ dừng truyền. Trong trường hợp mà bộ tớ yêu cầu trong quảng thời gian dài để đáp lại một sự truyền tải, nó có thể dùng tín hiệu STOP# để đình lại sự truyền tải, mạng có thể được dùng để thực hiện các việc truyền tải khác tạm thời. Khi bộ tớ dừng truyền mà không thực hiện bất kỳ một giai đoạn truyền dữ kiện nào, nó được gọi là retry. Nếu một hay nhiều giai đoạn truyền dữ kiện được hoàn tất trước khi bộ tớ chấm dứt bước truyền tải, nó được gọi là disconnect. Retry và disconnect báo cho bộ chủ rằng nó phải trở lại sau để gắng thực hiện bước truyền tải trở lại. Trong trường hợp bị lỗi như có sự cố phần cứng, bộ tớ có thể dùng STOP# và DEVSEL# để báo một sự dừng không bình thường, nó được gọi là target abort. Bộ chủ có thể dùng target abort để báo cho hệ thống phần mềm là một lỗi sự cố được dò ra.

          Comment


          • #6
            Phần 2:Các vùng địa chỉ mà PC cấp cho PCI

            Tôi cũng đã từng như các bạn khi mới đọc đống kiến thức trên thì cũng hoa cả mắt và chóng cả mặt.Nhưng khi các bạn có khiến thức khá vữn về kiến trúc máy tính thì nó thật là đơn giản đặc biệt đối với nhữn bạn đã từng học về ghép nối thiết bị theo BUS (đây là phần rất cơ bản trong giáo trìnhVi Xử lý 1 mà ngành chúng tôi dạy :ghép nói 8051 với RAM ,ROM và các thiết bị ngoại vi khác theo BUS mục đích dùng các lệnh Movx … để truy nhập đến chúng.)

            Hoàn toàn như vậy để làm được một card PCI thì các bạn cần những gì ?Các bạn cần hiểu về các đường địa chỉ,các đường dữ liệu và các thức mà CPU truy nhập đến nó (các đường điều khiển tương thích).PCI được cấp 4 vùng địa chỉ trong không gian các thiết bị vào ra và tương ứng là 2 vùng địa chỉ trong khong gian bộ nhớ.

            Để biết chúng được cấp các địa chỉ nào thì chúng ta chỉ cần click phải chuột vào My computer chọn Property sau đó chọn Hardware -> Device manager -> system device -> PCI BUS.Khi đó bạn sẽ thấy chúng có các vùng nhớ I/O là:

            0000H-0CF7H

            0D00H-3FFFH

            40F8H-40FFH

            5010H-FFFFH

            Và 2 vùng tương đương trong không gian bộ nhớ là:

            000A0000H-000C7FFH

            0FF00000H-FFEFFFFFH

            Như vậy đây là các địa chỉ mà khi chúng ta truy nhập tới chúng sẽ được gắn cho thiết bị của chúng ta.

            Để xây dựng một Card PCI các bạn phải đi từ đâu ? Từ con số 0 !!! Việc đầutiên bạn cần nghĩ tới đó là mạch giải mã địa chỉ .Các thiết bị trong Card PCI của bạn có thể được truy nhập trực tiếp thông qua đường địa chỉ và đường dữ liệu (Một chú ý không thể không nói tới đó là tín hiệu diều khiển tương thích) .

            Giả thiết rằng các bạn đã có phần cứng rồi thì làm thế nào để có thể chao đổi được dữ liệu với các card này .Có 2 cách :

            Các 1 : Viết Driver cho nó khá phức tạp và mình cũng chưa biết làm

            Cách 2: Viết chương trình vào ra dữ liệu ngay trên ứng dụng của chúng ta.Và cách này cũng có nhiều phương pháp.(dùng các thư viện liện kết động hoặc dùng các hàm API của Windowns).

            Vấn đề này sẽ được nói rõ ở phần sau.

            Comment


            • #7
              Thanks bác, em thấy bài viết của bác rất giá trị. Mong bác tiếp tục phát huy anh em được chiêm ngưỡng.
              -------------------

              Comment


              • #8
                Giao diện RS232 và phương pháp lập trình !

                1.Giới thiệu sơ lược về phần cứng của giao diện mạng RS232 trên PC

                Giao diện mạng RS232 được thiết kế dường như có trên tất cả các máy tính PC và cấu trúc phần cứng đều giốn nhau đó là một mạch thu phát không đồ bộ vạn năng (UART) đều tương thích với vi mạch 8250 của INTEL hay 16450 của Motorola.

                Để điều khiển vào ra dữ liệu giữa CPU và giao diện mạng này thì chúng ta có các thanh ghi:

                Thanh ghi dữ liệu,thanh ghi trạng thái và thanh ghi điều khiển.

                Địa chỉ offset
                Thanh ghi

                00H
                Thanh ghi dữ liệu đệm truyền/nhận

                01H
                Thanh ghi cho phép ngắt

                02H
                Thanh ghi loại ngắt

                03H
                Thanh ghi khuân dữ liệu

                04H
                Thanh ghiđiều khiển MODEM

                05H
                Thanh ghi trạng thái đường truyền

                06H
                Thanh ghi trạng thái MODEM

                07H
                Thanh ghi phụ

                00H
                Khi DLAB=1 (byte thấp thanh ghi số chia )

                01H
                Khi DLAB=1 (Byte cao thanh ghi số chia )


                Với địa chỉ cơ sở của cổng là: 3F8H (COM1)…

                Với các thanh ghi cụ thể :

                Thanh ghi đệm dữ liệu truyền/nhận (3F8H) đây là một thanh ghi 8 bit và gồm có hai thanh ghi riên biệt một thanh ghi đệm truyềng và một thanh ghi đệm nhận.Hai thanh ghi này có chung một địa chỉ nhưng với thanh ghi đệm truyền thì chỉ có thể ghi (viết) không thể đọc và thanh ghi đệm nhận thì chỉ có thể đọc ,không có thể ghi vì vậy mặc dù chúng có chung một địa chỉ nhưng không thể truy nhập nhầm được.

                Thanh ghi cho phép ngắt (3F9H) đây là một thanh ghi 8 bit nhưng chỉ có 4 bit được định nghĩa đó là:

                Bit 0 : RxRd Báo ngắt khi mà một byte được nhận trong bộ đệm nhận.

                Bit 1 : TBE Ngắt khi bộ đệm phát rỗng (sau khi đã truyền xong 1 byte)

                Bit 2 : ERBK Ngắt khi có lỗi chẵn lẻ ,đầy bộ đệm(ERBK =1)

                Bit 3 : SINP Ngắt khi mà đường vào RS232 thay đổi (SINP=1)

                Như vậy các ngắt tương ứng với các bit trên sẽ được kích hoạt khi có sự kiện tương ứng nếu như các bit đó được set lên 1.

                Thanh ghi loại ngắt (3FAH) Thanh ghi này báo cho CPU biết loại ngắt nào đang đòi được yêu cầu (đây là thanh ghi trạng thai) và nó là thanh ghi 8 bit nhưng chỉ có 3 bit thấp được định nghĩa và các bit khác ta không quan tâm.

                Bit 0 : PND Báo cho CPU biết đang có ngắt.

                Bit 1,2 cho ta các mã các ngắt.Chụ thể:



                ID1
                ID0
                Loại ngắt

                0
                0
                Tín hiệu vào RS232 thay đổi

                0
                1
                Đệm bộ phát trống (đã truyền xong 1 byte)

                1
                0
                1 byte vừa được nhận(đã nhận)

                1
                1
                Lỗi truyền/nhận


                Chú ý : các loại ngắt 00,10,11 được xóa bằng cách đọc các thanh ghi tương ứng ,ngắt 01 được xóa khi mà ghi một byte vào thanh ghi bộ đệm truyền.



                Thanh ghi khuân dạng dữ liệu (định dạng truyền) (3FBH) thanh ghi này được sử dụng để định dạng khung dữ liệu truyền đi và nhận về .

                Bit 0 , 1 : DAB0,DAB1 số bit dữ liệu

                DAB1
                DAB0
                Số bit dữ liệu

                0
                0
                5

                0
                1
                6

                1
                0
                7

                1
                1
                8


                Bit 2 : STOP số bit kết thúc (1: 2,0:1 bit kết thúc)

                Bit 3,4,5: PAR 0,PAR1,PAR2 khiểm tra chẵn lẻ:

                PAR 2
                PAR1
                PAR0
                Kiểu kiểm tra

                0
                0
                0
                Không

                0
                0
                1
                Lẻ

                0
                1
                0


                0
                1
                1
                Chẵn

                1
                0
                0


                1
                0
                1
                Mark

                1
                1
                0


                1
                1
                1
                Trống


                Bit 6 : BRK Cho phép nghỉ (BRK=1)

                Bit 7 : DLAB Bit cho phép truy nhập thanh ghi chia . Khi mà DLAB =1 thì các địa chỉ 3F8H là địa chỉ byte thấp của số chia và 3F9H là địa chỉ byte cao của số chia.

                Số chia này thiết lập tốc độ truyền cho UART.

                Thanh ghi trạng thái dường truyền (3FDH) thanh gi này chứa trạng thái bộ phát và bộ nhận của UART .Đây là thanh ghi 8 bit nhưng chỉ có 7 bit thấp được sử dụng.

                Bit 0 : RxRd được set khi đã nhận được 1 byte.

                Bit 1 : OVRE được set 1 khi tràn bộ đệm.

                Bit 2: PARE Set 1 khi có lỗi chắn lẻ.

                Bit 3 : FRME set 1 khi lỗi khung truyền (Bên truyền và nhậnh không thống nhất về khung truyền VD một bên truyền 8 bit còn bên nhận thì thiết lập chỉ nhận 5 bit)

                Bit 4: BREK Phát hiện đường dây bị ngắt (khí đó sẽ set 1)

                Bit 5 : TBE Đệm bộ phát trống ( byte trong bộ đệm đã được đưa sang thanh ghi dịch)sẽ được set 1

                Bit 6: TXE Bộ phát trống (được set 1 khi byte trong bộ đệm sau khi được đưa sang thanh ghi dịch đã được truyền đi)



                Vậy để lập trình cho giao diện mạng RS232 phần cứng của vi mạch hỗ trợ cho chúng ta cả hai phương pháp hương pháp thăm dò (Polling)và phương pháp dùng ngắt .

                Để thực hiện giao tiếp với giao diện mạng này thì ta cần thực hiện các bước sau:

                Bước 1: Thiết lập cho các thông số của mạng

                - Thiết lập tốc độ mạng :bằng cách đặt bit DLAB =1 sau đó thay đổi thông số của các thanh ghi chia tần có địa chỉ 3F8H và 3F9H (với COM 1).Sau khi thay đổi các giá trị đó lại đặt DLBA =0.

                Ví dụ : Giả sử cần tốc độ Baud là f/12 (tốc độ 9600)

                Mov dx,3fbh ;nạp địa chỉ thanh ghi khuân dữ liệu cổng ;com1

                In al,dx ;đọc nội dung thanh ghi này

                or al,80h ;đưa DLAB lên 1

                out dx,al ;ghi lại thanh ghi khuân dữ liệu

                mov dx,3f8h ;đưa địa chỉ thanh ghi byte thấp của số chia ;vào dx

                mov al,0ch ;nạp giá trị cho byte thấp

                out dx,al

                mov dx,3f9h ;dưa địa chỉ thanh ghi byte cao số chia vào ;dx

                mov al,0h ;nạp giá trị cho byte cao

                out dx,al

                mov dx,3fbh ;nạp địa chỉ thanh ghi khuân dữ liệu vào dx

                in al,dx ;lấy nội dung của thanh ghi khuân dạng dữ ;liệu

                and al,7fh ;Đưa DLAB =0

                out dx,al

                ;đã thiết lập xong

                - Thiết lâp số bit dữ liệu truyền ,khung dữ liệu bằng cách thay đổi các bit trong thanh ghi khuân dữ liệu.

                Bước 2 :Chọn phương pháp lập trình (dùng ngắt hoặc thăm dò)

                - Dùng ngắt :Thiết lập cho thanh ghi cho phép ngắt.

                - Thăm dò : Cấm các ngắt trong thanh ghi cho phép ngắt.

                Bước 3 :Chao đổi dữ liệu

                Các bước để thực hiện chao dổi dữ liệu (sau khi đã thiết lập)

                a, Truyền dữ liệu:

                Để truyền dữ liệu thì ta chỉ cần đưa byte dữ liệu vào thanh ghi đệm dữ liệu truyền lập tức dữ liệu đó tự động được đưa vào thanh ghi dịch truyền và được truyền qua chân TxD.Sau khi dữ liệu truyền được chuyển từ bộ đệm sang thanh ghi dịch thì bit TBE (trong thanh ghi trạng thái được set và trong thanh ghin báo ngắt cũng báo ngắt 01).Nếu như bit TBE trong thanh ghi cho phép ngắt được thiết lập thì sẽ có một ngắt được gửi tới CPU.Khi đó ta có thể ghi dữ liệu mới vào thanh ghi đệm này để truyền đi.Và dữ liệu ở thanh ghi dịch đã được truyền xong thì bit TXE được set 1.

                Như vậy để truyền dữ liệu thì ta cần thực hiện các bước sau:

                Bước 1: Kiểm tra trạng thái rỗi của bộ truyền (kiểm tra bit TBE có bằng 1 không)

                Bước 2(Nếu TBE=1) thì ghi dữ liệu vào thanh ghi bộ đệm truyền (khi đó bit TBE sẽ tự bị xóa xuống 0) và chờ đợi cho tới kho có ngắt hoặc TBE=1 để tiếp tục truyền.

                B, Nhận dữ liệu:

                Để nhận dữ liệu thì ta chỉ cần kiểm tra trong bộ đệm đã có dữ liệu hay chưa bằng cách dùng ngắt hoặc kiểm tra xem bit RxRd trong thanh ghi trạng thái truyền nhận.Nếu nó được set thì ta đọc dữ liệu từ bộ đệm nhận và xóa cờ đó đi để tiếp tục nhận.



                Để lập trình cho giao diện này thì ta đều có thể dùng các ngôn ngữ bậc cao cũng như bậc thấp, nhưng ngôn ngữ bậc cao thì các công việc càng trở nên đơn giản cho người lập trình.

                Ở hệ diều hành Windows 9x trở lại chúng ta hoàn toàn có thể sử dụng các hàm vào ra các cổng của các ngôn ngữ C,Pascal ,basic… và các thư viện liên kết động cũng như dùng đối tượng Mscomm của Microsoft hoặc các hàm API của Windows để lập trình.Nhưng với hệ điều hành từ Windows NT trở đi thì chúng ta chỉ có thể sử dụng được các hàm API hoặc đối tượng Mscomm của Microsoft.

                Comment


                • #9
                  2.Sử dụng đối tượng Mscomm của Microsoft để lập trình cho giao diện mạng RS232.

                  a, Giới thiệu về đối tượng Mscomm :

                  Microsoft cung cấp đối tượng Mscomm là một gói đã được đóng về mã nguồn với đầy đủ các thuộc tính để chúng ta có thể thiết lập một cách đơn giản cho cổng COM và các sự kiện đầy đủ đáp ứng cho mọi sự kiện phát sinh của cổng COM. Đối tượng này được tích hợp trong các ngon ngữ lập trình hướng đối tượng trong môi trường đồ họa không chỉ của Microsoft mà còn có trong hầu hết của các hãng khác như của Borland,Sun (Visual Basic, Visual C++,Visual J++,Delphi (từ phiên bản 3 trở đi),Borland C ++/Builder …)

                  b, Các thuộc tính chính của đối tượng Mscomm:

                  CommID : cho ta biết thẻ mà hệ điều hành nhận dạng cổng.

                  Commport:Thiết lập hoặc tra lại cho ta số cổng (cổng 1,2,3…)

                  InBuffersize:Thiết lập hoặc trả lại cho ta độ lớn bộ đệm nhận (bộ đệm này do phần mềm tạo ra chứ không phải của phần cứng UART )và nó được tính bằng Byte

                  InputLen:Thiết lập hợac trả lại cho ta số kí tự trong bộ đệm nhận sẽ được được đọc

                  InputMode:Thiết lập hoặc trả lại kiểu dữ liệu truền đi hoặc nhận về .Chúng ta có 2 kiểu dữ liệu đó là kiểu text và kiểu nhị phân.

                  OutBuffersize : như inbuffersize

                  PortOpen :Thiết lập hoặc trả lại trạng thái của cổng truyền thông.

                  Rthreshold:Thiết lập hoặc trả lại số kí tự nhận nhỏ nhất trước khi báo ngắt.

                  Setting:Thiết lập hoặc trả lại tốc dộ,số bit chẵn lẻ … (cấu hình cho cổng COM)

                  Sthreshold: Thiết lập hoặc trả lại số kí tự nhỏ nhất của bộ đệm truyền trước khi báo ngắt.

                  Input :Trả lại hoạc di chuyển dữ liệu từ bộ đệm nhận vào biến nào đó.

                  Output:Ghi dữ liệu cần truyền vào bộ đệm truyền.

                  Inbuffercount:Số byte nhận được trong bộ nhận nếu ta đọc thuộc thính này thì đây là số byte nhận được trong bộ nhận còn nếu ta đặt nó bằng 0 thì xóa toàn bộ bộ đệm nhận

                  Outbuffercount:tương tự như inbuffercount

                  Name:Tên của đối tượng

                  Và một số thuộc tính khác.

                  Sự kiện OnComm là sự kiện mà phát sinh khi bất kì một biến cố gì xảy ra kể cả ngắt cũng như lỗi.

                  c, Quá trình truyền/nhận dữ liệu đối với đối tượng Mscomm

                  - Truyền dữ liệu:

                  Đối tượng này đã được đóng gói và hỗ trợ khá đầy đủ cho người lập trình,chúng ta không cần quan tâm đến các thanh ghi vì thông qua các thuộc tính của đối tượng chúng ta có thể truy nhập đến các thanh ghi của UART.Và một điểm làm đơn giàn việc lập trình đó là đối tượng này tạ ra một bộ đệm truyền và một bộ đệm nhận bằng phần mềm cho người sử dụng (và chúng ta hoàn toàn có thể thay đổi độ lớn của chúng) giúp chúng ta có thể truyền đi một mảng các byte một các đơn giản thay vì truy nhập trực tiếp đến các thanh ghi bằng các ngôn ngữ bậc thấp hoặc các hàm API chúng ta chỉ có thể truyền từng byte một.Để truyền đi một mảng các byte ta chỉ cần dùng thuộc tính Output ghi mảng byte đó vào bộ dệm và công việc của người lập trình đến đây là chờ đợi cho mảng đó truyền hết. Đối tượng Mscomm sẽ thực hiện truyền từng byte một theo các bước mà phần trên đã nêu .Để xác định được số byte đã truyền ta có thể kiểm tra thông qua thuộc tính Outbuffercount (thuộc tính này chỉ ra số byte còn lại chưa được truyền trong bộ truyền).Như vậy khi mà outbuffercount =0 thì ta hoàn toàn có thể tiếp tục truyền mạng tiếp theo.

                  -Nhận dữ liệu :

                  Hoàn toàn giốn như truyền dữ liệu

                  Chú ý : Chúng ta có hai chế độ truyền và nhận đó là chế độ văn bản (text) và chế độ nhị phân (Binary) được thiết lập bằng thuộc tính InputMode. Ở chế độ văn bản thì mảng nhận được sẽ được coi là một chuỗi hay mỗi kí tự nhận được sẽ là một mã ASCII của một kí tự nào đó còn ở chế độ nhị phân thì byte nhận được sẽ là byte nhị phân và ý nghĩa của nó phụ thuộc vào giao thức tuyền tin do người lập trình quy định. Ở mỗi trường hợp cụ thể thì người lập trình sẽ sử dụng các chế độ này.

                  d, Các bước lập trình cho giao diện mạng này dùng Mscomm

                  Bước 1: Mở cổng và thiết lập cổng

                  Trước khi sử dụng cổng truyền tin này chúng ta cần chọn cổn bằng thuộc tính Commport (vd: Mscomm1.commport=1 chọn cổng COM1),sau đó mở cổng bằng thuộc tính PortOpen ( Vd:Mscomm1.PortOpen=true)

                  Thiết lập các thuộc tính cho cổng đó là:tốc độ truyền ,bit kiểm tra lỗi ,số bit dữ liệu và đội dài bit stop bằng thuộc tính setting (Vd: MsComm1.Setting=”9600,n,8,1”)

                  Khung định dạng của chuỗi thiết lập là:

                  “tốc độ,bit kiểm tra chẵn lẻ,số bit dữ liệu,độ dài bit stop”

                  Ngoài ra còn thiết lập cho các thông số khác : như bộ đệm vào,ra,chế độ sử dụng…

                  Bước 2: Truyền hoặc nhận dữ liệu

                  Sử dụng phương pháp thăm dò:

                  - Truyền dữ liệu:

                  Để truyền dữ liệu ta sẽ kiểm tra xem bộ truyền dữ liệu có rỗi không bằng cách đọc thuộc tính outbuffercount nếu bằng 0 thì bộ đệm truyền đang rỗi và ta có thể truyền bằng cách ghi mảng dữ liệu vào bộ đệm truyền bằng thuộc tính output và đợi khi mà outbufercount =0 sẽ truyền mảng tiếp theo.

                  Ví dụ :ví dụ viết bằng Visual basic truyền một chuỗi kí tự

                  ‘giả thiết cổng đã được thiết lập

                  Dim StringTruyen as string

                  StringTruyen=”chuoi can truyen”

                  While (Mscomm1.outbufrercount <>0

                  Wend ‘sẽ thoát vòng lặp khi mà outbuffercount =0

                  Mscomm1.output=stringTruyen

                  ‘đã xong !

                  -Nhận dữ liệu:

                  Để nhận dữ liệu chúng ta kiểm tra bộ đệm nhận và nếu số byte trong bộ đệm(bằng thuộc tính inbuffercount) nhận khác 0 thì ta có thể đọc bộ đệm nhận.

                  Chú ý :Sau khi đọc bộ đệm nhận thì ta cần đặt số byte trong bộ đệm nhận bằng 0 để xóa dữ liệu tron bộ đệm nhận.

                  Ta nên dùng một Timer định một thời gian Scan bộ đệm để nhận hoặc truyền không nên dùng các vòn lặp để chờ trạng thái rỗi cũng như kí tự nhân vì điều đó sẽ làm phát sinh các Task không mong muốn và làm chậm tốc độ xử lý của chương trình.

                  Sử dụng ngắt trong truyền nhận dữ liệu :

                  Để sử dụng ngắt thì ta phải thiết lập các thuộc tính Rthreshold và Sthreshold khác 0.Và khi xuất hiện sự kiện OnCom thì ta cũng phải xác dịnh xem sự kiện nào đã xảy ra(Bằng các đọc số byte bộ đệm truyền ,bộ đệm nhận hay lỗi xảy ra…).

                  Comment


                  • #10
                    Đợt này đang bận ,nhân đây có báo cáo về môn lập trình tin học công nghiệp ,có phần này tôi Up lên cho anh em tham khảo.PCI khi nào có thời gian rảnh sẽ viết tiếp
                    Vutricongbka
                    Gửi anh Binh Anh: Không hiểu tại sao nik vutricongbka em không thể log in được mặc dù em đã đổi Password .

                    Comment


                    • #11
                      Quả là cao thủ. Công công cao tay thật giờ anh em mới biết. Được lắm.
                      Technical sale at WT Microelectronics S'pore
                      Hỗ trợ dự án sử dụng các hãng Texas Instrument, STMicro, Freescale, Fairchild, International Rectifier, Ublox, Lumiled, Maxim
                      Liên hệ: 0915.560.511 hoặc ngo.haibac@wtmec.com

                      Comment


                      • #12
                        Nghe cái thuật ngữ Giao diện "mạng" trong PC không chuẩn lắm, dễ hiểu lầm thành mạng theo giao thức TCP/IP. Theo tôi chỉ cần "Giao diện ghép nối trong PC" là được.

                        1. Về PCI:

                        Giả thiết rằng các bạn đã có phần cứng rồi thì làm thế nào để có thể chao đổi được dữ liệu với các card này .Có 2 cách :

                        Cách 1 : Viết Driver cho nó khá phức tạp và mình cũng chưa biết làm

                        Cách 2: Viết chương trình vào ra dữ liệu ngay trên ứng dụng của chúng ta.Và cách này cũng có nhiều phương pháp.(dùng các thư viện liện kết động hoặc dùng các hàm API của Windowns).
                        Cách 1: Nếu card PCI do ta tự thiết kế thì chắc chắn phải làm Driver cho nó rồi, cách dễ nhất & chuyên nghiệp nhất là dùng WinDriver (hỗ trợ rất nhiều các PCI IP Core của Altera,Xillink,Atmel...)
                        Cách 2: Không hiểu

                        Hiện nay đang phát triển một mô hình ghép nối giữ PC và các thiết bị nhúng đó là ghép nối theo giao thức mạng TCP/IP,UDP hay Ethernet/IP. Tương lai ứng dụng là rất rộng.

                        Comment


                        • #13
                          Nhất trí với Ý kiến của anh Cường !
                          Về vấn đề viết chương trình cho PCI . Khi đã có phần cứng:
                          Ta có PCI có vùng địa chỉ trong không gian thiết bị ngoại vi vì vậy chúng ta hoàn toàn có thể dùng các hàm truy nhập tới các vùng nhớ trong không gian thiết bị ngoại vi là được.Cụ thể em có thư viện liên kết động IOPORT.DLL hoặc đối tượng IOPORT với các thuộc tính như MScomm của Microsoft.
                          Mong anh cường giúp chúng em các kiến thức cơ bản để viết Driver (Em đã hỏi thầy Thịnh nhưng thầy bảo thầy lâu rồi không viết lên quên rồi)
                          Em : Congvt3i2@yahoo.com
                          vutricongbka@yahoo.com

                          Comment


                          • #14
                            Nguyên văn bởi vutricongbka
                            Nhất trí với Ý kiến của anh Cường !
                            Về vấn đề viết chương trình cho PCI . Khi đã có phần cứng:
                            Ta có PCI có vùng địa chỉ trong không gian thiết bị ngoại vi vì vậy chúng ta hoàn toàn có thể dùng các hàm truy nhập tới các vùng nhớ trong không gian thiết bị ngoại vi là được.Cụ thể em có thư viện liên kết động IOPORT.DLL hoặc đối tượng IOPORT với các thuộc tính như MScomm của Microsoft.
                            Mong anh cường giúp chúng em các kiến thức cơ bản để viết Driver (Em đã hỏi thầy Thịnh nhưng thầy bảo thầy lâu rồi không viết lên quên rồi)
                            Em : Congvt3i2@yahoo.com
                            vutricongbka@yahoo.com
                            Hic, cái viết Driver anh không dám dạy. Đúng là ngày xưa có đọc DDK mãi nhưng thấy nhai cái này khó mà tool WinDriver của nó thì ngon như ăn cháo nên bỏ Cái duy nhất anh làm được là cái IOPORT.SYS dùng cho IO Address Space trên nền Win2K/XP (cái này cũng sửa từ cái example của nó mà thôi ). Làm được phần cứng xong đã thì hãy nghĩ đến làm phần driver

                            Comment


                            • #15
                              Nguyên văn bởi congvt3i2
                              2.Sử dụng đối tượng Mscomm của Microsoft để lập trình cho giao diện mạng RS232.

                              a, Giới thiệu về đối tượng Mscomm :

                              Microsoft cung cấp đối tượng Mscomm là một gói đã được đóng về mã nguồn với đầy đủ các thuộc tính để chúng ta có thể thiết lập một cách đơn giản cho cổng COM và các sự kiện đầy đủ đáp ứng cho mọi sự kiện phát sinh của cổng COM. Đối tượng này được tích hợp trong các ngon ngữ lập trình hướng đối tượng trong môi trường đồ họa không chỉ của Microsoft mà còn có trong hầu hết của các hãng khác như của Borland,Sun (Visual Basic, Visual C++,Visual J++,Delphi (từ phiên bản 3 trở đi),Borland C ++/Builder …)

                              b, Các thuộc tính chính của đối tượng Mscomm:

                              CommID : cho ta biết thẻ mà hệ điều hành nhận dạng cổng.

                              Commport:Thiết lập hoặc tra lại cho ta số cổng (cổng 1,2,3…)

                              InBuffersize:Thiết lập hoặc trả lại cho ta độ lớn bộ đệm nhận (bộ đệm này do phần mềm tạo ra chứ không phải của phần cứng UART )và nó được tính bằng Byte

                              InputLen:Thiết lập hợac trả lại cho ta số kí tự trong bộ đệm nhận sẽ được được đọc

                              InputMode:Thiết lập hoặc trả lại kiểu dữ liệu truền đi hoặc nhận về .Chúng ta có 2 kiểu dữ liệu đó là kiểu text và kiểu nhị phân.

                              OutBuffersize : như inbuffersize

                              PortOpen :Thiết lập hoặc trả lại trạng thái của cổng truyền thông.

                              Rthreshold:Thiết lập hoặc trả lại số kí tự nhận nhỏ nhất trước khi báo ngắt.

                              Setting:Thiết lập hoặc trả lại tốc dộ,số bit chẵn lẻ … (cấu hình cho cổng COM)

                              Sthreshold: Thiết lập hoặc trả lại số kí tự nhỏ nhất của bộ đệm truyền trước khi báo ngắt.

                              Input :Trả lại hoạc di chuyển dữ liệu từ bộ đệm nhận vào biến nào đó.

                              Output:Ghi dữ liệu cần truyền vào bộ đệm truyền.

                              Inbuffercount:Số byte nhận được trong bộ nhận nếu ta đọc thuộc thính này thì đây là số byte nhận được trong bộ nhận còn nếu ta đặt nó bằng 0 thì xóa toàn bộ bộ đệm nhận

                              Outbuffercount:tương tự như inbuffercount

                              Name:Tên của đối tượng

                              Và một số thuộc tính khác.

                              Sự kiện OnComm là sự kiện mà phát sinh khi bất kì một biến cố gì xảy ra kể cả ngắt cũng như lỗi.

                              c, Quá trình truyền/nhận dữ liệu đối với đối tượng Mscomm

                              - Truyền dữ liệu:

                              Đối tượng này đã được đóng gói và hỗ trợ khá đầy đủ cho người lập trình,chúng ta không cần quan tâm đến các thanh ghi vì thông qua các thuộc tính của đối tượng chúng ta có thể truy nhập đến các thanh ghi của UART.Và một điểm làm đơn giàn việc lập trình đó là đối tượng này tạ ra một bộ đệm truyền và một bộ đệm nhận bằng phần mềm cho người sử dụng (và chúng ta hoàn toàn có thể thay đổi độ lớn của chúng) giúp chúng ta có thể truyền đi một mảng các byte một các đơn giản thay vì truy nhập trực tiếp đến các thanh ghi bằng các ngôn ngữ bậc thấp hoặc các hàm API chúng ta chỉ có thể truyền từng byte một.Để truyền đi một mảng các byte ta chỉ cần dùng thuộc tính Output ghi mảng byte đó vào bộ dệm và công việc của người lập trình đến đây là chờ đợi cho mảng đó truyền hết. Đối tượng Mscomm sẽ thực hiện truyền từng byte một theo các bước mà phần trên đã nêu .Để xác định được số byte đã truyền ta có thể kiểm tra thông qua thuộc tính Outbuffercount (thuộc tính này chỉ ra số byte còn lại chưa được truyền trong bộ truyền).Như vậy khi mà outbuffercount =0 thì ta hoàn toàn có thể tiếp tục truyền mạng tiếp theo.

                              -Nhận dữ liệu :

                              Hoàn toàn giốn như truyền dữ liệu

                              Chú ý : Chúng ta có hai chế độ truyền và nhận đó là chế độ văn bản (text) và chế độ nhị phân (Binary) được thiết lập bằng thuộc tính InputMode. Ở chế độ văn bản thì mảng nhận được sẽ được coi là một chuỗi hay mỗi kí tự nhận được sẽ là một mã ASCII của một kí tự nào đó còn ở chế độ nhị phân thì byte nhận được sẽ là byte nhị phân và ý nghĩa của nó phụ thuộc vào giao thức tuyền tin do người lập trình quy định. Ở mỗi trường hợp cụ thể thì người lập trình sẽ sử dụng các chế độ này.

                              d, Các bước lập trình cho giao diện mạng này dùng Mscomm

                              Bước 1: Mở cổng và thiết lập cổng

                              Trước khi sử dụng cổng truyền tin này chúng ta cần chọn cổn bằng thuộc tính Commport (vd: Mscomm1.commport=1 chọn cổng COM1),sau đó mở cổng bằng thuộc tính PortOpen ( Vd:Mscomm1.PortOpen=true)

                              Thiết lập các thuộc tính cho cổng đó là:tốc độ truyền ,bit kiểm tra lỗi ,số bit dữ liệu và đội dài bit stop bằng thuộc tính setting (Vd: MsComm1.Setting=”9600,n,8,1”)

                              Khung định dạng của chuỗi thiết lập là:

                              “tốc độ,bit kiểm tra chẵn lẻ,số bit dữ liệu,độ dài bit stop”

                              Ngoài ra còn thiết lập cho các thông số khác : như bộ đệm vào,ra,chế độ sử dụng…

                              Bước 2: Truyền hoặc nhận dữ liệu

                              Sử dụng phương pháp thăm dò:

                              - Truyền dữ liệu:

                              Để truyền dữ liệu ta sẽ kiểm tra xem bộ truyền dữ liệu có rỗi không bằng cách đọc thuộc tính outbuffercount nếu bằng 0 thì bộ đệm truyền đang rỗi và ta có thể truyền bằng cách ghi mảng dữ liệu vào bộ đệm truyền bằng thuộc tính output và đợi khi mà outbufercount =0 sẽ truyền mảng tiếp theo.

                              Ví dụ :ví dụ viết bằng Visual basic truyền một chuỗi kí tự

                              ‘giả thiết cổng đã được thiết lập

                              Dim StringTruyen as string

                              StringTruyen=”chuoi can truyen”

                              While (Mscomm1.outbufrercount <>0

                              Wend ‘sẽ thoát vòng lặp khi mà outbuffercount =0

                              Mscomm1.output=stringTruyen

                              ‘đã xong !

                              -Nhận dữ liệu:

                              Để nhận dữ liệu chúng ta kiểm tra bộ đệm nhận và nếu số byte trong bộ đệm(bằng thuộc tính inbuffercount) nhận khác 0 thì ta có thể đọc bộ đệm nhận.

                              Chú ý :Sau khi đọc bộ đệm nhận thì ta cần đặt số byte trong bộ đệm nhận bằng 0 để xóa dữ liệu tron bộ đệm nhận.

                              Ta nên dùng một Timer định một thời gian Scan bộ đệm để nhận hoặc truyền không nên dùng các vòn lặp để chờ trạng thái rỗi cũng như kí tự nhân vì điều đó sẽ làm phát sinh các Task không mong muốn và làm chậm tốc độ xử lý của chương trình.

                              Sử dụng ngắt trong truyền nhận dữ liệu :

                              Để sử dụng ngắt thì ta phải thiết lập các thuộc tính Rthreshold và Sthreshold khác 0.Và khi xuất hiện sự kiện OnCom thì ta cũng phải xác dịnh xem sự kiện nào đã xảy ra(Bằng các đọc số byte bộ đệm truyền ,bộ đệm nhận hay lỗi xảy ra…).
                              http://support.microsoft.com/?scid=k...042&sid=global
                              http://www.codeguru.com/Cpp/COM-Tech...icle.php/c7349

                              Bo sung them cai nay cho anh em. Hix em cung den vat va voi cai MScomm nay
                              Bac Vutricong viet hay lam. Thank bac nhieu
                              Last edited by mafd_47; 19-12-2005, 01:42.
                              Dia chi cho cac Fan muon hoc Pic

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X