112
Giao diện truyền thông điều khiển với Ethernet Mục lục Lời nói đầu Trang Chương I – Mục tiêu và nhiệm vụ của đề tài 1.1- Đặt vấn đề 6 1.2- Mục tiêu của đề tài 6 1.3- Nhiệm vụ của đề tài 6 Chương II– Tổng quan về mạng Ethernet 2.1-Kiến trúc giao thức 7 2.2-Cấu trúc mạng và kỹ thuật truyền dẫn 8 2.3-Cơ chế giao tiếp 9 2.4-Cấu trúc bức điện 10 2.5-Truy nhập bus 11 2.6-Chuẩn IEEE 802 14 Chương III– Các phương thức truyền tin dựa theo chuẩn Ethernet 3.1-Họ giao thức TCP/IP 17 3.2-Cấu trúc gói tin IP,TCP,UDP 3.2.1 Cấu trúc địa chỉ IP 21 3.2.2 Cấu trúc gói tin IP 22 3.2.3 Cấu trúc gói tin TCP và quá trình kết nối của giao Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 1

Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Embed Size (px)

Citation preview

Page 1: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Giao diện truyền thông điều khiển với Ethernet

Mục lụcLời nói đầu Trang

Chương I – Mục tiêu và nhiệm vụ của đề tài

1.1- Đặt vấn đề 6

1.2- Mục tiêu của đề tài 6

1.3- Nhiệm vụ của đề tài 6

Chương II– Tổng quan về mạng Ethernet

2.1-Kiến trúc giao thức 7

2.2-Cấu trúc mạng và kỹ thuật truyền dẫn 8

2.3-Cơ chế giao tiếp 9

2.4-Cấu trúc bức điện 10

2.5-Truy nhập bus 11

2.6-Chuẩn IEEE 802

14

Chương III– Các phương thức truyền tin dựa theo chuẩn Ethernet

3.1-Họ giao thức TCP/IP 17

3.2-Cấu trúc gói tin IP,TCP,UDP

3.2.1 Cấu trúc địa chỉ IP 21

3.2.2 Cấu trúc gói tin IP 22

3.2.3 Cấu trúc gói tin TCP và quá trình kết nối của giao

thức TCP 24

3.2.4 Cấu trúc gói tin UDP

28 3.3-Cấu trúc phần cứng, phần mềm

3.3.1 Vi điều khiển 29

3.3.2 Thiết bị ghép nối Ethernet với vi điều khiển 44

3.3.3 Một số thành phần khác 49

Chương IV– Mô hình ứng dụng sử dụng Ethernet

4.1- Phần cứng

4.1.1 Các thành phần của mạch 50

4.1.2 Sơ đồ mạch nguyên lý, mạch in 50

4.2- Phần mềm

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 1

Page 2: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Giao diện truyền thông điều khiển với Ethernet

4.2.1 Các hàm dùng cho vi điều khiển PIC16F877A trong

mikroC 51

4.2.2 Các hàm API dùng cho PC 54

4.3- Một số kết quả thực hiện được 58

Chương V– Kết luận và hướng phát triển của đề tài

5.1-Đánh giá kết quả thực hiện đồ án 63

5.2- Hướng phát triển của đồ án 63

Tài liệu tham khảo 64

Phụ lục 65

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 2

Page 3: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Giao diện truyền thông điều khiển với Ethernet

Danh mục các hình vẽ

Hình 1: Ethernet/IEE 802.3 trong tập chuẩn IEEE 802 7

Hình 2: Cấu trúc khung MAC theo IEEE 802.3/ Ethernet 10

Hình 3: Minh họa phương pháp CSMA/CD 12

Hình 4: Kiến trúc giao thức TCP/IP 17

Hình 5:Gói dữ liệu trong lớp liên kết dữ liệu 20

Hình 6: Tổ chức địa chỉ IP 21

Hình 7: Mạng con và mặt nạ 22

Hình 8: Quá trình thiết lập kết nối của giao thức TCP 26

Hình 9: Vi điều khiển PIC 16F877A 29

Hình 10: Sơ đồ khối cấu trúc của vi điều khiển PIC 16F877A 31

Hình 11: Bộ nhớ chương trình PIC16F877A 32

Hình 12: Bộ nhớ dữ liệu PIC16F877A 33

Hình 13: Sơ đồ khối của Timer 0 34

Hình 14: Sơ đồ khối Timer 1 36

Hình 15: Sơ đồ khối Timer 2 36

Hình 16: Sơ đồ kết nối của chuẩn giao tiếp SPI 39

Hình 17: Sơ đồ kết nối của chuẩn giao tiếp SPI 40

Hình 18: Giản đồ xung SPI ở chế độ Master Mode 41

Hình 19: Giản đồ xung chuẩn giao tiếp SPI ở chế độ Slave Mode 42

Hình 20: Sơ đồ logic của tất cả các ngắt trong vi điều khiển PIC 16F877A 43

Hình 21: ENC28J60 45

Hình 22 : Giao diện cơ bản ENC28J60 45

Hình 23: Các vùng nhớ của ENC28J60 46

Hình 24: Vùng đệm truyền nhận của ENC28J60 47

Hình 25: RJ45 tích hợp biến áp 49

Hình 26: Giắc RJ45 và cáp đôi dây xoắn 49

Hình 27: Sơ đồ mạch in 51

Hình 28 : Đo và hiển thị nhiệt độ trên LCD. 58

Hình 29 : Hiển thị nhiệt độ nhận được trên PC. 58

Hình 30 : Gửi dữ liệu xuống vi điều khiển, sử dụng giao thức TCP 59

Hình 31 : Nhận dữ liệu từ PC, theo giao thức TCP. 59

Hình 32 : Đặt IP và Port mới 60

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 3

Page 4: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Giao diện truyền thông điều khiển với Ethernet

Hình 33 : Hiển thị IP và Port mới 60

Hình 34 : Gửi và nhận dữ liệu theo giao thức UDP 61

Hình 35 : Hiển thị dữ liệu nhận được theo giao thức UDP 61

Hình 36: Các lựa chọn của chương trình 62

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 4

Page 5: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Giao diện truyền thông điều khiển với Ethernet

Lời nói đầu

Internet ngày nay đã trở thành một công cụ hiệu quả trong tất cả các lĩnh

vực đời sống xã hội, việc kết nối giữa các máy tính đã trở nên dễ dàng rất nhiều.

Với mong muốn xây dựng một phương thức kết nối giữa máy tính và thiết bị điều

khiển theo chuẩn Ethernet nhằm mục đích nâng cao kiến thức thực tiễn, chúng em

đã được sự giúp đỡ của thầy giáo - Tiến sĩ Lưu Hồng Việt, đã tiến hành nghiên

cứu, xây dựng mạch thiết bị điều khiển tích hợp giao diện truyền thông Ethernet.

Chúng em xin chân thành cảm ơn thầy giáo – TS Lưu Hồng Việt đã tận tình

hướng dẫn, giúp đỡ chúng em hoàn thành đồ án này. Chúng em cũng xin cảm ơn

bộ môn điều khiển tự động đã tạo điều kiện thuận lợi trong quá trình chúng em

thực hiện đồ án.

Nhóm sinh viên

Trác Quang Hòa

Nguyễn Tiến Tùng

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 5

Page 6: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Giao diện truyền thông điều khiển với Ethernet

CHƯƠNG 1 : MỤC TIÊU VÀ NHIỆM VỤ CỦA ĐỀ TÀI1.1 Đặt vấn đề

Ngày nay, với sự phát triển nhanh chóng của thiết bị điện- điện tử, việc giao

tiếp với máy tính là hết sức cần thiết. Điều này không những tận dụng được tài

nguyên, khả năng xử lý của máy tính mà còn giúp người sử dụng có thể theo dõi

các đối tượng làm việc phía dưới.

Hiện nay, có nhiều phương pháp kết nối máy tính với các thiết bị điều

khiển như thực hiện việc kết nối theo chuẩn RS232, RS485 rất phổ biến, tuy nhiên

khi thực hiện việc kết nối các theo chuẩn này gặp phải một số vấn đề cơ bản sau:

Khoảng cách kết nối giữa máy tính với thiết bị điều khiển khoảng

30-40m.

Tốc độ truyền thông của RS232 chỉ khoảng 19.2kBd.

Ghép nối điểm-điểm.

Những nhược điểm của các phương pháp giao tiếp trên cũng chính là

những ưu điểm của mạng Ethernet. Với những lợi thế của mình, mạng Ethernet đã

trở thành mạng phổ biến nhất trong các hệ thống nhà máy công nghiệp.

Để có thể kết nối thiết bị điều khiển với máy tính theo chuẩn Ethernet,

chúng em đã thực hiện đề tài này.

1.2 Mục tiêu của đề tài

Thực hiện việc kết nối thiết bị điều khiển với PC thông qua mạng Ethernet.

Qua đó, thực hiện việc trao đổi dữ liệu, thực hiện một số ứng dụng cụ thể như : thu

thập hiển thị nhiệt độ; điều khiển, hiển thị tốc độ động cơ dùng Ethernet…

1.3 Nhiệm vụ của đề tài

Để thực hiện được mục tiêu của đề tài, nhiệm vụ cần đặt ra là :

1. Thiết kế mạch phần cứng thiết bị điều khiển.

2. Xây dựng phần mềm giao diện Ethernet.

Thiết kế phần mềm giao diện trên PC giúp người sử dụng thực hiện đặt các giá trị

đặt và theo dõi trạng thái đối tượng bên dưới.

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 6

Page 7: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Tổng quan về Ethernet

CHƯƠNG 2: TỔNG QUAN VỀ ETHERNET

Ethernet là kiểu mạng cục bộ (LAN) được sử dụng rộng rãi nhất hiện nay.

Thực chất, Ethernet chỉ là mạng cấp dưới (lớp vật lý và một phần lớp liên kết dữ

liệu), vì vậy có thể sử dụng các giao thức khác nhau ở phía trên, trong đó TCP/IP

là tập giao thức được sử dụng phổ biến nhất. Tuy vậy, mỗi nhà cung cấp sản phẩm

có thể thực hiện giao thức riêng hoặc theo một chuẩn quốc tế cho giải pháp của

mình trên cơ sở Ethernet. High Speed Ethernet (HSE) của Fieldbus Foundation

chính là một trong tám hệ bus trường được chuẩn hóa quốc tế theo IEC 61158.

Ethernet có xuất xứ là tên gọi một sản phẩm của công ty Xerox, được sử

dụng đầu tiên vào năm 1975 để nối mạng 100 trạm máy tính với cáp đồng trục dài

1km, tốc độ truyền 2,94 Mbit/s và áp dụng phương pháp truy nhập bus

CSMA/CD. Từ sự thành công của phương pháp này, Xerox đã cùng DEC và Intel

đã xây dựng một chuẩn 10 Mbit/s- Ethernet. Chuẩn này chính là cơ sở cho IEEE

802.3 sau này. Đặc biệt, với phiên bản 100 Mbit/s (Fast Ethernet, IEEE 802.3u),

Ethernet ngày càng đóng một vai trò quan trọng trong các hệ thống công nghiệp.

Bên cạnh việc sử dụng cáp đồng trục, đôi dây xoắn và cáp quang, gần đây

Ethernet không dây (Wireless LAN, IEEE 802.11) cũng đang thu hút được sự

quan tâm lớn.

2.1 Kiến trúc giao thức

Kiến trúc giao thức của Ethernet theo chuẩn IEEE 802.3 chỉ bao gồm lớp

vật lí và lớp MAC (Medium Access Control, lớp điều khiển truy nhập môi

trường).

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 7

Page 8: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Tổng quan về Ethernet

Hình 1: Ethernet/IEE 802.3 trong tập chuẩn IEEE 802.

2.2 Cấu trúc mạng và kỹ thuật truyền dẫn

Về mặt logic, Ethernet có cấu trúc bus. Cấu trúc mạng vật lí có thể là đường

thẳng hoặc hình sao tùy theo phương tiện truyền dẫn. Bốn loại cáp thông dụng

nhất : cáp đồng trục dầy, cáp đồng trục mỏng, cáp đôi dây xoắn, cáp quang.

Tên hiệu Loại cáp Chiều dài tối đa Số trạm tối đa

10BASE5 Cáp đồng trục dầy 500m 100

10BASE2 Cáp đồng trục mỏng 200m 30

10BASE-T Cáp đôi dây xoắn 100m 1024

10BASE-F Cáp quang 200m 1024

Bảng 1 : Một số loại cáp truyền Ethernet thông dụng.

Loại 10BASE5 còn được gọi là cáp dầy ( thick Ethernet), loại cáp đồng trục

thường có màu vàng. Kí hiệu 10BASE5 có nghĩa là tốc độ truyền tối đa 10Mbit/s,

phương pháp truyền tải dải cơ sở và chiều dài một đoạn mạng tối đa 500m. Loại

cáp đồng trục thứ hai có kí hiệu 10BASE2 được gọi là cáp mỏng ( thin Ethernet),

rẻ hơn nhưng hạn chế một đoạn mạng ở phạm vi 200m và số lượng 30 trạm.

Với 10BASE5, bộ nối được gọi là vòi hút ( vampire tap), đóng vai trò một

bộ thu phát ( transceiver ). Bộ thu phát chứa vi mạch điện tử thực hiện chức năng

nghe ngóng đường truyền và nhận biết xung đột. Trong trường hợp xung đột được

phát hiện, bộ thu phát gửi một tín hiệu không hợp lệ để tất cả các bộ thu phát khác

cũng nhận biết được rằng xung đột đã xảy ra. Như vậy, chức năng của module

giao diện mạng được giảm nhẹ. Cáp nối giữa bộ thu phát và card giao diện mạng

được gọi là cáp thu phát, có thể dài tới 50m và chứa tới năm đôi dây xoắn bọc lót

riêng biệt ( STP). Hai đôi dây cần cho trao đổi dữ liệu, hai đôi cho truyền tín hiệu

điều khiển, còn đôi dây thứ năm có thể sử dụng để cung cấp nguồn cho bộ thu

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 8

Page 9: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Tổng quan về Ethernet

phát. Một số bộ thu phát cho phép nối tới tám trạm qua các cổng khác nhau, nhờ

vậy tiết kiệm được số lượng bộ nối cũng như công lắp đặt.

Với 10BASE2, card giao diện mạng được nối với cáp đồng trục thông qua

bộ nối thụ động BNC hình chữ T. Bộ thu phát được tích hợp trong bảng mạch điện

tử của module giao diện mạng bên trong máy tính. Như vậy, mỗi trạm có một bộ

thu phát riêng biệt.

Về bản chất, cả hai kiểu dây với cáp đồng trục như nói trên đều thực hiện

cấu trúc bus ( vật lí cũng như logic), vì thế có ưu điểm là tiết kiệm dây. Tuy nhiên,

các lỗi phần cứng như đứt cáp, lỏng bộ phận nối rất khó phát hiện trực tuyến. Mặc

dù đã có một số biện pháp khắc phục, phương pháp tin cậy hơn là sử dụng cấu trúc

hình sao với một bộ chia ( hub) hoặc một bộ chuyển mạch ( switch ). Cấu trúc này

thông thường được áp dụng với cáp đôi dây xoắn, nhưng cũng áp dụng được với

cáp đồng trục ( ví dụ Industrial Ethernet).

Đa số cấu hình mạng Ethernet có kết nối với thiết bị điều khiển thường sử

dụng chuẩn chung 10BASE-T. Trong mạng này các trạm được nối với nhau qua

một bộ chia giống như cách nối các mạng điện thoại.

Ưu điểm của cấu trúc này là việc bổ xung hoặc tách một trạm ra khỏi mạng

cũng như việc phát hiện cáp truyền rất đơn giản.

Nhược điểm có thể thấy rõ nhất đó là tốn dây dẫn và công đi dây cũng như

chi phí cho bộ chia chất lượng cao cũng là một vấn đề. Bên cạnh đó, khoảng cách

tối đa cho phép từ một trạm tới bộ chia thường bị hạn chế trong vòng 100 – 150m.

Bên cạnh cáp đồng trục và cáp đôi dây xoắn thì cáp quang cũng được sử

dụng nhiều trong Ethernet, trong đó đặc biệt là 10BASE-F. Với cách ghép nối duy

nhất là điểm – điểm, cấu trúc mạng có thể là daisy-chain, hình sao hoặc hình cây.

Thông thường, chi phí cho các bộ nối và chặn đầu cuối rất lớn nhưng khả năng

kháng nhiễu tốt và tốc độ truyền cao lá các yếu tố quyết định trong nhiều phạm vi

ứng dụng.

Trong nhiều trường hợp, ta có thể sử dụng phối kết hợp nhiều loại trong

một mạng Ethernet. Ví dụ, cáp quang hoặc cáp đồng trục dầy có thể sử dụng là

đường trục chính hay xương sống ( backbone ) trong cấu trúc cây, với các đường

nhánh là cáp mỏng hoặc đôi dây xoắn. Đối với mạng quy mô lớn, có thể sử dụng

các bộ lặp, nhưng đường dẫn giữa hai bộ thu phát không được phép dài quá 2,5km

cũng như không đi qua quá bốn bộ lặp.

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 9

Page 10: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Tổng quan về Ethernet

2.3 Cơ chế giao tiếp

Sự phổ biến của Ethernet có được là nhờ tính năng mở. Thứ nhất, Ethernet

chỉ qui định lớp vật lí và lớp MAC, cho phép các hệ thống khác nhau tùy ý thực

hiện các giao thức và dịch vụ phía trên. Thứ hai, phương pháp truy nhập bus ngẫu

nhiên CSMA/CD không yêu cầu các trạm tham gia phải biết cấu hình mạng, vì

vậy có thể bổ xung hay tách một trạm ra khỏi mạng mà không ảnh hưởng tới các

phần còn lại. Thứ ba, việc chuẩn hóa sớm trong IEEE 802.3 giúp cho các nhà cung

cấp sản phẩm thực hiện dễ dàng hơn.

Trong một mạng Ethernet, không kể tới bộ chia hoặc bộ chuyển mạch thì

tất cả đều có vai trò bình đẳng như nhau. Mỗi trạm có một địa chỉ Ethernet riêng

biệt và thống nhất. Việc giao tiếp giữa các trạm thông qua giao tiếp phía trên ví dụ

NetBUI, IPX/SPX hoặc TCP/IP. Tùy theo giao thức cụ thể, căn cước của bên gửi

và bên nhận trong một bức điện của lớp phía trên sẽ được dịch sang địa chỉ

Ethernet trước khi được chuyển xuống lớp MAC.

Bên cạnh cơ chế giao tiếp tay đôi, Ethernet còn hỗ trợ phương pháp gửi

thông báo đồng loạt ( multicast và broadcast ). Một thông báo multicast được gửi

tới một nhóm các trạm, trong khi một thông báo broadcast gửi tới tất cả các trạm.

2.4 Cấu trúc bức điện

IEEE 802.3/ Ethernet chỉ quy định lớp MAC và lớp vật lý, vì vậy một bức

điện được còn gọi là khung MAC. Cấu trúc của khung MAC được minh họa ở

dưới

Mở đầu

555…5H

SFD

(D5H)

Địa chỉ

đích

Địa chỉ

nguồn

Độ dài

kiểu gói

Dữ liệu PA

D

FCS

7 byte 1 byte 2/6 byte 2/6 byte 2 byte 46-1500 byte 4 byte

Hình 2: Cấu trúc khung MAC theo IEEE 802.3/ Ethernet.

Mở đầu (Preamble ) của khung MAC là trường 7 byte giống nhau có giá trị

55H, được bên nhận sử dụng để đồng bộ nhịp với bên gửi. Việc đồng bộ hóa chỉ

được thực hiện một lần cho cả bức điện.

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 10

Page 11: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Tổng quan về Ethernet

Một byte SFD (Start of Frame Delimiter ) chứa dãy bit 10101011, đánh dấu

khởi đầu khung MAC.

Theo 802.3,địa chỉ đích và địa chỉ nguồn có thể là 2 hoặc 6 byte, nhưng

chuẩn qui định cho truyền dải cơ sở 10 Mb/s chỉ sử dụng địa chỉ 6 byte. Bit cao

nhất trong địa chỉ đích có giá trị 0 cho các địa chỉ thông thường và giá trị 1 cho các

địa chỉ nhóm. Đối với các thông báo gửi tới các trạm (broadcast), tất cả các bit

trong địa chỉ đích sẽ là 1.

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 11

Page 12: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Tổng quan về Ethernet

Có hai loại địa chỉ Ethernet là các địa chỉ cục bộ và các địa chỉ toàn cầu,

được phân biệt bởi bit 46 (bit gần cao nhất). Các địa chỉ cục bộ có thể đổ cứng

hoặc đặt bằng phần mềm và không có ý nghĩa ngoài mạng cục bộ. Ngược lại, một

địa chỉ toàn cầu được IEEE cấp phát, luôn được đổ cứng trong vi mạch để đảm

bảo sự thống nhất trên toàn thế giới. Với 46 bit có thể có tổng cộng 7* địa chỉ

cục bộ. Tuy nhiên số lượng các trạm cho phép trong một hệ thống mạng công

nghiệp còn phụ thuộc vào kiểu cáp truyền, giao thức phía trên cũng như đặc tính

của các thiết bị tham gia mạng.

Một sự khác nhau giữa Ethernet và IEEE 802.3 là ý nghĩa ô tiếp sau phần

địa chỉ. Theo đặc tả Ethernet, hai byte này chứa mã giao thức chuyển gói phía trên.

Cụ thể, mã 0800 chỉ giao thức IP (Internet Protocol ) và mã 0806 chỉ giao thức

ARP (Address Resolution Protocol ). Theo chuẩn IEEE 802.3, ô này dùng để chỉ

số byte dữ liệu ( từ 0 đến 1500). Với điều kiện ràng buộc giữa tốc độ truyền v (tính

bằng bit/s), chiều dài bức điện n và khoảng cách truyền l (tính bằng mét) của

phương pháp CSMA/CD

lv < 100.000.000 n.

để đảm bảo tốc độ truyền 10Mbit/s và khoảng cách truyền 2500m thì một

bức điện phải dài hơn 250 bit hay 32 byte. Xét tới cả thời gian trễ qua bốn bộ lặp,

chuẩn 802.3 qui định chiều dài khung tối thiểu là 64 byte (51,2us), không kể phần

mở đầu và byte SFD. Như vậy ô dữ liệu phải có chiều dài tối thiểu là 46 byte.

Trong trường hợp dữ liệu thực ngắn hơn 46 byte, ô PAD (Padding ) được sử dụng

để lấp đầy.

Ô cuối cùng trong khung MAC là FCS ( Frame Check Sequence) gồm 4

byte chứa mã CRC (Cyclic Redundancy Check) với đa thức phát

Phần thông tin kiểm soát lỗi bao gồm các ô địa chỉ, ô chiều dài, ô dữ liệu.

2.5 Truy nhập bus

Một vấn đề lớn thường gây lo ngại trong việc sử dụng Ethernet ở cấp

trường là phương pháp truy nhập bus ngẫu nhiên CSMA/CD ( Carrier Sense

Multiple Access with Collision Avoidance ) và sự ảnh hưởng tới hiệu suất cũng

như tính năng thời gian thực của hệ thống. Ở đây, một trong những yếu tố quyết

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 12

Page 13: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Tổng quan về Ethernet

định tới hiệu suất của hệ thống là thuật toán tính thời gian truy nhập lại cho các

trạm trong trường hợp xảy ra xung đột.

Hình 3: Minh họa phương pháp CSMA/CD.

Nguyên tắc làm việc phương pháp CSMA/CD

Theo phương pháp CSMA/CD, mỗi trạm đều có quyền truy nhập bus mà

không cần một sự kiểm soát nào. Phương pháp được tiến hành như sau:

Mỗi trạm đều phải tự nghe đường dẫn ( carrier sense), nếu đường dẫn rỗi

( không có tín hiệu ) thì mới được phát.

Do việc lan truyền tín hiệu cần một thời gian nào đó, nên vẫn có khả năng

hai trạm cùng phát tín hiệu lên đường dẫn. Chính vì vậy, trong khi phát thì

mỗi trạm vẫn phải nghe đường dẫn để so sánh tín hiệu phát đi với tín hiệu

nhận được xem có xảy ra xung đột hay không ( collision detection).

Trong trường hợp xảy ra xung đột, mỗi trạm đều phải hủy bỏ bức điện của

mình, chờ một thời gian ngẫu nhiên và thử gửi lại.

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 13

Page 14: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Tổng quan về Ethernet

Một tình huống xảy ra xung đột tiêu biểu và cách khắc phục được minh họa

trên hình ….. Trạm A và C cùng nghe đường dẫn. Đường dẫn rỗi nên A có thể gửi

trước. Trong khi tín hiệu từ trạm A gửi đi chưa kịp tới nên trạm C không hay biết

và cũng gửi, gây ra xung đột tại một điểm gần C. A và C sẽ lần lượt nhận được tín

hiệu phản hồi, so sánh với tín hiệu gửi đi và phát hiện xung đột. Cả hai trạm sẽ

cùng phải hủy bỏ bức điện đã gửi đi bằng cách không phát tiếp, các trạm muốn

nhận sẽ không nhận được cờ hiệu kết thúc bức điện và sẽ coi như bức điện không

hợp lệ. A và C cũng có thể gửi đi một tín hiệu “ jam” đặc biệt để báo cho các trạm

cần nhận biết. Sau đó mỗi trạm sẽ chờ một thời gian chờ ngẫu nhiên, trước khi thử

phát lại. Thời gian chờ ngẫu nhiên ở đây tuy nhiên phải được tính theo một thuật

toán nào đó để sao cho thời gian chờ ngắn một cách hợp lí và không giống nhau

giữa các trạm cùng chờ. Thông thường thời gian chờ này là bội số của hai lần thời

gian lan truyền tín hiệu Ts.

Ưu điểm của CSMA/CD là tính chất đơn giản, linh hoạt. Khác với các

phương pháp tiền định, việc ghép thêm hay bỏ đi một trạm trong mạng không ảnh

hưởng gì tới hoạt động của hệ thống. Chính vì vậy, phương pháp này được áp

dụng rộng rãi trong mạng Ethernet.

Nhược điểm của CSMA/CD là tính chất bất định của thời gian phản ứng.

Các trạm đều bình đẳng như nhau nên quá trình chờ ở một trạm có thể lặp đi lặp

lại, không xác định được tương đối chính xác thời gian. Hiệu suất sử dụng đường

truyền vì thế cũng thấp. Rõ ràng, nếu như không kết hợp thêm với các kỹ thuật

khác thì phương pháp này không thích hợp với các cấp thấp, đòi hỏi trao đổi dữ

liệu định kỳ, thời gian thực.

Điều kiện ràng buộc

Khả năng thực hiện phương pháp CSMA/CD bị hạn chế bởi một điều kiện

ràng buộc giữa chiều dài dây dẫn, tốc độ truyền thông và chiều dài bức điện. Chỉ

khi một trạm phát hiện được xung đột xảy ra trong khi bức điện chưa gửi xong

mới có khả năng hủy bỏ bức điện ( có thể chỉ đơn giản bằng cách không gửi tiếp

cờ hiệu kết thúc). Còn nếu bức điện đã được gửi đi xong rồi mới phát hiện xảy ra

xung đột thì đã quá muộn, một trạm khác có thể đã nhận được và xử lí bức điện

với nội dung sai lệch.

Trong trường hợp xấu nhất hai trạm cùng gửi thông tin có thể ở hai đầu của

dây dẫn, trạm thứ hai chỉ gửi bức điện trước khi tín hiệu từ trạm thứ nhất tới một

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 14

Page 15: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Tổng quan về Ethernet

chút. Tín hiệu bị xung đột xảy ra ở đây phải mất thêm một khoảng thời gian nữa

đúng bằng thời gian lan truyền tín hiệu Ts mới quay trở lại tới trạm thứ nhất. Như

vậy điều kiện thực hiện phương pháp CSMA/CD là thời gian gửi một bức điện

phải lớn hơn hai lần thời gian lan truyền tín hiệu, tức :

( Chiều dài bức điện n/ Tốc độ truyền v) > 2Ts

n/v > 2l/(0,66*300.000.000),

Với l là chiều dài dây dẫn và hệ số k= 0,67

lv < 100.000.000n

Đây chính là điều kiện ràng buộc trong việc nâng cao tốc độ và tăng chiều

dài dây dẫn. Ví dụ đối với một mạng Fast Ethernet (100Mbit/s) có chiều dài 100m

thì một bức điện không thể ngắn hơn 100 bit. Hệ quả của điều kiện rằng buộc này

là hiệu suất truyền thông sẽ rất thấp nếu như dữ liệu cần trao đổi không lớn. Một

lần nữa, ta thấy rằng phương pháp này không thích hợp lắm cho các hệ thống

mạng cấp thấp.

Thời gian lan truyền tín hiệu một lần qua lại đường truyền được gọi là khe

thời gian. Giá trị này được tính cho tối đa 2,5 km đường truyền và bốn bộ lặp là

512 thời gian bit hay 51,2 us. Sau lần xảy ra xung đột đầu tiên, mỗi trạm sẽ chọn

ngẫu nhiên 0 hoặc 1 lần khe thời gian chờ trước khi thử gửi lại. Nếu hai trạm ngẫu

nhiên cùng chọn một khoảng thời gian, hoặc có sự xung đột với một trạm thứ ba,

thì số khe thời gian lựa chọn chờ sẽ là 0, 1, 2 hoặc 3.Sau lần xung đột thứ i , số

khe thời gian chọn ngẫu nhiên nằm trong khoảng từ 0 tới -1. Tuy nhiên, sau

mười lần xung đột, số khe thời gian chờ tối đa sẽ được giữ lại ở con số 1023. Sau

16 lần xung đột liên tiếp, các trạm sẽ coi là lỗi hệ thống và báo trở lại lớp giao

thức phía trên. Thuật toán nổi tiếng này được gọi là Binary Exponential Backoff

(BEB).

2.6 Chuẩn IEEE 802

IEEE 802 là họ các chuẩn IEEE dành cho các mạng LAN và mạng MAN

(metropolitan area network). Cụ thể hơn, các chuẩn IEEE 802 được giới hạn cho

các mạng mang các gói tin có kích thước đa dạng. (Khác với các mạng này, dữ

liệu trong các mạng cell-based được truyền theo các đơn vị nhỏ có cùng kích

thước được gọi là cell. Các mạng Isochronous, nơi dữ liệu được truyền theo một

dòng liên tục các octet, hoặc nhóm các octet, tại các khoảng thời gian đều đặn,

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 15

Page 16: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Tổng quan về Ethernet

cũng nằm ngoài phạm vi của chuẩn này). Con số 802 chỉ đơn giản là con số còn

trống tiếp theo mà IEEE có thể dùng, đôi khi "802" còn được liên hệ với ngày mà

cuộc họp đầu tiên được tổ chức –tháng 2 năm 1980.

Các dịch vụ và giao thức được đặc tả trong IEEE 802 ánh xạ tới hai tầng

thấp (tầng liên kết dữ liệu và tầng vật lý của mô hình 7 tầng OSI. Thực tế, IEEE

802 chia tầng liên kết dữ liệu OSI thành hai tầng con LLC (điều khiển liên kết

lôgic) và MAC (điều khiển truy nhập môi trường truyền), do đó các tầng này có

thể được liệt kê như sau:

Tầng liên kết dữ liệu

Tầng con LLC

Tầng con MAC

Tầng vật lý

Họ chuẩn IEEE 802 được bảo trì bởi Ban Tiêu chuẩn LAN/MAN IEEE 802

(IEEE 802 LAN/MAN Standards Committee (LMSC)). Các chuẩn được dùng rộng

rãi nhất là dành cho họ Ethernet, Token Ring, mạng LAN không dây, các mạng

LAN dùng bridge và bridge ảo (Bridging and Virtual Bridged LANs). Mỗi lĩnh

vực có một Working Group tập trung nghiên cứu.

Các Working Group:

IEEE 802.1 Các giao thức LAN tầng cao

IEEE 802.2 điều khiển liên kết lôgic

IEEE 802.3 Ethernet

802.3u là chuẩn của FastEthernet

802.3z là chuẩn Gigabit Ethernet

IEEE 802.4 Token bus (đã giải tán)

IEEE 802.5 Token Ring

IEEE 802.6 Metropolitan Area Network (đã giải tán)

IEEE 802.7 Broadband LAN using Coaxial Cable (đã giải tán)

IEEE 802.8 Fiber Optic TAG (đã giải tán)

IEEE 802.9 Integrated Services LAN (đã giải tán)

IEEE 802.10 Interoperable LAN Security (đã giải tán)

IEEE 802.11 Wireless LAN (Wi-Fi certification)

IEEE 802.12 công nghệ 100 Mbit/s plus

IEEE 802.13 (không sử dụng)

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 16

Page 17: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Tổng quan về Ethernet

IEEE 802.14 modem cáp (đã giải tán)

IEEE 802.15 Wireless PAN

IEEE 802.15.1 (Bluetooth certification)

IEEE 802.15.4 (ZigBee certification)

IEEE 802.16 Broadband Wireless Access (WiMAX certification)

IEEE 802.16e (Mobile) Broadband Wireless Access

IEEE 802.17 Resilient packet ring

IEEE 802.18 Radio Regulatory TAG

IEEE 802.19 Coexistence TAG

IEEE 802.20 Mobile Broadband Wireless Access

IEEE 802.21 Media Independent Handoff

IEEE 802.22 Wireless Regional Area Network.

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 17

Page 18: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

CHƯƠNG 3 : CÁC PHƯƠNG THỨC TRUYỀN TIN DỰA THEO CHUẨN ETHERNET

3.1 Họ giao thức TCP/IP:

TCP/IP (Transmission Control Protocol/Internet Protocol) là kết quả nghiên

cứu và triển giao thức trong mạng chuyển mạch gói thử nghiệm mang tên Arpanet

do ARPA (Advanced Reseach Projecs Agency ). Khái niệm TCP/IP dùng để chỉ

cả một lớp tập giao thức và dịch vụ truyền thông được công nhận thành chuẩn cho

Internet. Cho tới nay TCP/IP đã xâm nhập tới rất nhiều phạm vi ứng dụng khác

nhau, trong đó có các máy tính cục bộ và mạng truyền thông công nghiệp.

TCP/IP bao gồm 5 lớp độc lập : lớp ứng dụng, lớp vận chuyển, lớp Internet,

lớp truy nhập và mạng vật lí.

Lớp ứng dụng

TELNET FTP

SNMP SMTP

DNS

Lớp vận chuyển

TCP UDP

Lớp Internet

ICMP IP ARP RARP

Lớp truy nhập mạng

Lớp vật lí

Hình 4: Kiến trúc giao thức TCP/IP .

Lớp ứng dụng:

Lớp ứng dụng thực hiện các chức năng hỗ trợ cần thiết cho nhiều ứng dụng

khác nhau : SMTP ( Simple Mail Transfer Protocol ) cho chuyển thư điện tứ, FTP

( File Transfer Protocol ) cho chuyển giao file, TELNET là chương trình mô

phỏng thiết bị đầu cuối cho phép người dùng login vào một máy chủ từ một máy

tính nào đó trên mạng, SNMP (Simple Network Management Protocol) giao thức

quản trị mạng cung cấp những công cụ quản trị mạng, DNS(Domain Name

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 18

Page 19: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

Server) là dịch vụ tên miền cho phép nhận ra máy tính từ một tên miền thay cho

chuỗi địa chỉ Internet.

Lớp ứng dụng trao đổi dữ liệu với lớp dưới ( lớp vận chuyển ) qua cổng.

Việc dùng cổng bằng số cho phép giao thức của lớp vận chuyển biết loại nội dung

nào chứa bên trong gói dữ liệu. Những cổng được đánh bằng số và những ứng

dụng chuẩn thường dùng cùng cổng. Ví dụ: giao thức FTP dùng cổng 20 cho dữ

liệu và cổng 21 cho điều khiển, giao thức SMTP dùng cổng 25…

Lớp vận chuyển:

Lớp vận chuyển có chức năng cung cấp các dịch vụ cho việc thực hiện vận

chuyển dữ liệu giữa các chương trình ứng dụng một cách tin cậy hoàn toàn. TCP

là giao thức tiêu biểu nhất, phổ biến nhất phục vụ việc thực hiện chức năng nói

trên. TCP hỗ trợ việc trao đổi dữ liệu trên cơ sở dịch vụ có nối. Khi dữ liệu nhận,

giao thức TCP lấy những gói được gửi từ lớp Internet và đặt chúng theo thứ tự của

nó, bởi vì những gói có thể đến vị trí đích theo phương thức không theo một thứ

tự, và kiểm tra nếu nội dung của gói nhận có nguyên vẹn hay không và gửi tín hiệu

Acknowledge – chấp nhận – tới bên gửi, cho biết gói dữ liệu đã đến đích an toàn.

Nếu không có tín hiệu Acknowledge của bên nhận (có nghĩa là dữ liệu chưa đến

đích hoặc có lỗi ), bên truyền sẽ truyền lại gói dữ liệu bị mất.

Bên cạnh TCP, một giao thức khác cũng được sử dụng cho lớp vận chuyển

đó là UDP (User Data Protocol ). Khác với TCP, UDP cung cấp dịch vụ không

hướng kết nối cho việc gửi dữ liệu mà không đảm bảo tuyệt đối đến đích, không

đảm bảo trình tự đến đích của các gói dữ liệu.

Như vậy TCP được coi là một giao thức tin cậy, trong khi UDP được coi là

giao thức không đáng tin cậy. Tuy nhiên UDP lại đơn giản hơn và có hiệu suất

nhanh hơn TCP, chỉ đòi hỏi một cơ chế xử lí giao thức tối thiểu và thường được

dùng làm cơ sở thực hiện các giao thức cao cấp theo yêu cầu riêng của người sử

dụng, ví dụ tiêu biểu là giao thức SNMP.

Cả hai giao thức UDP và TCP sẽ lấy dữ liệu từ lớp ứng dụng và thêm

header vào khi truyền dữ liệu. Khi nhận dữ liệu, header sẽ bị gỡ trước khi gửi dữ

liệu đến cổng thích hợp. Trong header này có một vài thông tin điều khiển liên

quan đến số cổng nguồn, số cổng tới đích, chuỗi số ( để hệ thống sắp xếp lại dữ

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 19

Page 20: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

liệu và hệ thống Acknowledge sử dụng trong TCP ) và Checksum (dùng để tính

toán xem dữ liệu đến đích có bị lỗi hay không ) .

Header của UDP có 8 byte trong khi header của TCP có 20 hoặc 24 byte

(tùy theo kiểu byte lựa chọn ).

Dữ liệu ở lớp này sẽ được chuyển tới lớp Internet nếu truyền dữ liệu hoặc

được gửi từ lớp Internet tới nếu nhận dữ liệu.

Lớp Internet:

Lớp Internet có chức năng chuyển giao dữ liệu giữa nhiều mạng được liên

kết với nhau. Có một vài giao thức mà làm việc ở lớp Internet như : IP (Internet

Protocol ) có chức năng gán địa chỉ cho dữ liệu trước khi truyền và định tuyến

chúng tới đích, ICMP ( Internet Control Message Protocol ) có chức năng thông

báo lỗi trong trường hợp truyền dữ liệu bị hỏng, ARP ( Address Resolution

Protocol ) có chức năng lấy địa chỉ MAC từ địa chỉ IP.

Với giao thức IP, lớp Internet được sử dụng có nhiệm vụ thêm header tới

gói dữ liệu được nhận từ lớp vận chuyển, là một loại dữ liệu điều khiển khác, nó sẽ

thêm địa chỉ IP nguồn và địa chỉ IP đích – có nghĩa là địa chỉ IP của bên gửi dữ

liệu và bên nhận dữ liệu.

Mỗi datagram của IP có kích thước lớn nhất là 65.535 byte, bao gồm cả

header mà có thể dùng 20 hoặc 24 byte, phụ thuộc vào sự lựa chọn trong chương

trình sử dụng. Như vậy datagram của IP có thể mang 65.515 byte hoặc 65.511

byte, giao thức IP sẽ cắt gói xuống thành nhiều datagram nếu thấy cần thiết.

Đối với mạng Ethernet, dữ liệu có thể lên tới 1500 byte, nghĩa là kích thước

lớn nhất trường dữ liệu của frame được gửi lên mạng MTU ( Maximum Transfer

Unit ) có giá trị 1500 byte. Như vậy hệ điều hành tự động cấu hình giao thức IP để

tạo ra datagram của IP có chiều dài 1500 byte mà không phải là 65.535 byte.

Hình dưới minh họa datagram được tạo ra từ lớp Internet bằng giao thức IP.

Như chúng ta đã đề cập header được giao thức IP thêm vào bao gồm địa chỉ IP

nguồn, địa chỉ IP đích và một vài thông tin điều khiển.

Lớp truy cập mạng:

Lớp truy cập mạng liên quan tới việc trao đổi dữ liệu giữa hai trạm thiết bị

trong cùng một mạng. Các chức năng bao gồm việc kiểm soát truy nhập môi

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 20

Page 21: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

trường truyền dẫn, kiểm soát lỗi và lưu thông dữ liệu. Datagram được tạo từ lớp

Internet sẽ được gửi xuống tới lớp truy nhập mạng nếu truyền dữ liệu, hoặc lớp

truy nhập mạng sẽ lấy dữ liệu từ mạng và gửi nó tới lớp Internet nếu chúng ta nhận

dữ liệu. Như đã đề cập ở phần trên, Ethernet là giao thức cấp dưới có ba lớp LLC (

Logic Link Control ), MAC ( Media Access Control ) và lớp vật lí Physical.

Lớp MAC (điều khiển truy nhập phương tiện truyền thông ) có nhiệm vụ

lắp ráp frame mà sẽ được gửi lên mạng, thêm địa chỉ MAC nguồn và địa chỉ MAC

đích. Địa chỉ MAC là địa chỉ vật lí của cạc mạng. Những frame mà là đích tới

mạng khác sẽ dùng địa chỉ MAC của router như là địa chỉ đích.

Những lớp LLC và MAC sẽ thêm những header của chúng tới datagram mà

nhận được từ lớp Internet. Do đó, cấu trúc đầy đủ của frame được tạo ra từ hai lớp

đó được thể hiện trong hình vẽ dưới

Hình 5:Gói dữ liệu trong lớp liên kết dữ liệu.

Lớp vật lí:

Lớp vật lí đề cập tới giao diện vật lí giữa một thiết bị truyền dữ liệu với môi

trường truyền dẫn hay mạng, trong đó có các đặc tính tín hiệu, chế độ truyền, tốc

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49

Data

DataTCP/IPHeader

TCP/IPHeader

IP header Data

Data MACCRC

MAC header

IP header TCP/IPHeader

LLC header

Lớp ứng dụng

Lớp vận chuyển

Lớp Internet

21

Page 22: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

độ truyền và cấu trúc cơ học của các phích cắm, rắc cắm. Lớp này có nhiệm vụ

chuyển đổi frame do lớp MAC tạo ra thành tín hiệu điện ( đối với hệ thống dây

dẫn mạng bằng cable ) hoặc thành song từ trường ( đối với hệ thống mạng không

dây ).

3.2 Cấu trúc gói tin IP,TCP,UDP

3.2.1 Cấu trúc địa chỉ IP:

Cấu trúc địa chỉ IP:

Mạng Internet dùng hệ thống địa chỉ IP (32 bit) để "định vị" các máy tính

liên kết với nó. Có hai cách đánh địa chỉ phụ thuộc vào cách liên kết của từng máy

tính cụ thể.

Nếu các máy tính được kết nối trực tiếp với mạng Internet thì NIC

(Network Information Centre) sẽ cấp cho các máy tính đó một địa chỉ IP (IP

Address).

Nếu các máy tính không kết nối trực tiếp với mạng Internet mà thông qua

một mạng cục bộ thì người quản trị mạng sẽ cấp cho các máy tính đó một địa chỉ

IP (tuy nhiên cũng dưới sự cho phép của NIC).

Hệ thống địa chỉ này được thiết kế mềm dẻo qua một sự phân lớp, có 5 lớp

địa chỉ IP là : A, B, C, D, E. Sự khác nhau cơ bản giữa các lớp địa chỉ này là ở khả

năng tổ chức các cấu trúc con của nó.

0 1 2 3 4 8 16 24

Class A 0 Netid Hostid

Class B 1 0 Netid Hostid

Class C 1 1 0 Netid Hostid

Class D 1 1 1 0 Multicast address

Class E 1 1 1 1 0 Reverved for future use

Hình 6: Tổ chức địa chỉ IP.

Địa chỉ lớp A: Lớp A sử dụng byte đầu tiên của 4 byte để đánh địa chỉ

mạng. Như hình trên, nó được nhận ra bởi bit đầu tiên trong byte đầu tiên

của địa chỉ có giá trị 0. 3 bytes còn lại được sử dụng để đánh địa chỉ máy

trong mạng. Có 126 địa chỉ lớp A (được đánh địa chỉ trong byte thứ nhất)

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 22

Page 23: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

với số máy tính trong mạng là 2563 - 2 = 16.777.214 máy cho mỗi một địa

chỉ lớp A (sử dụng 3 bytes để đánh địa chỉ máy).

Địa chỉ lớp B: Một địa chỉ lớp B được nhận ra bởi 2 bit đầu tiên của byte

thứ nhất mang giá trị 10. Lớp B sử dụng 2 byte đầu tiên của 4 byte để đánh

địa chỉ mạng và 2 byte cuối đánh địa chỉ máy trong mạng. Có 64*256 - 2 =

16.128 địa chỉ mạng lớp B với 65.534 máy cho mỗi một địa chỉ lớp B.

Địa chỉ lớp C: Một địa chỉ lớp C được nhận ra với 3 bit đầu mang giá trị

110. Mạng lớp C sử dụng 3 byte đầu để đánh địa chỉ mạng và 1 byte cuối

đánh địa chỉ máy tính có trong mạng. Có 2.097.152 -2 địa chỉ lớp C, mỗi

địa chỉ lớp C có 254 máy.

Địa chỉ lớp D: Dùng để gửi các IP datagram tới một nhóm các host trên một

mạng.

Địa chỉ lớp E: Dùng để dự phòng và dùng trong tương lai.

Mạng con và mặt nạ:

Mạng Internet sử dụng địa chỉ IP 32 bit và phân chia ra các lớp rất mềm

dẻo, tuy nhiên, với một hệ thống địa chỉ như vậy việc quản lý vẫn rất khó khăn.

Nếu như một mạng được cấp một địa chỉ lớp A thì có nghĩa nó chứa tới

6*1.048.576 máy tính, do vậy người ta dùng mặt nạ bit để phân chia mạng ra

thành những mạng con gọi là Subnet. Subnet mask là một con số 32 bit bao gồm n

bit 1 (thường là các bit cao nhất) dùng để đánh địa chỉ mạng con và m bit 0 dùng

để đánh địa chỉ máy trong mạng con (với n+m=32).

0 16

Network Number Host Number

Network Number Subnet Number Host Number

1111111 11111111 11111111 00000000

Hình 7: Mạng con và mặt nạ.

3.2.2 Cấu trúc gói tin IP:

Gói tin (datagram) IP có dạng:

Ver-4 bít: chỉ version hiện hành của ip đang được dùng, nếu trường này

khác với phiên bản IP của thiết bị nhận, thiết bị nhận sẽ loại bỏ các gói tin

này.

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 23

Page 24: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

IHL(IP Header Length)-4bít: chỉ độ dài phần header của gói tin, tính theo

từ 32 bít.

TOS(Type of Service)-1byte: cho biết dịch vụ nào mà gói tin muốn sử dụng

chẳng hạn như độ ưu tiên, thời hạn chậm trễ, năng suất truyền và độ tin

cậy. Cụ thể như sau:

3 bít đầu (Precedence) chỉ quyền ưu tiên gửi gói tin, từ gói tin bình

thường là 0 đến gói tin kiểm soát mạng là 7.

1 bít tiếp theo (Delay) chỉ độ trễ yêu cầu, 0 ứng với gói tin có độ trễ

bình thường, 1 ứng với gói tin có độ trễ thấp.

1 bít tiếp theo (Throughput) chỉ thông lượng yêu cầu sử dụng để

truyền gói tin với lựa chọn truyền trên đường thông suất thấp hay trên

đường thông suất cao, 0 ứng với thông lượng bình thường, 1 ứng với thông

lượng cao.

1 bít tiếp theo (Reliability) chỉ độ tin cậy yêu cầu, 0 ứng với độ tin

cậy bình thường, 1 ứng với độ tin cậy cao.

Total Length-2byte:chỉ độ dài toàn bộ gói tin tính cả phần header, tính theo

đơn vị byte.

Indentification-16 bít: cùng với các tham số khác như Source Address,

Destination Address dùng để định danh duy nhất một gói tin trong thời gian

nó tồn tại trên mạng.

Flags: Các gói tin khi truyền trên đường đi có thể bị phân thành nhiều gói

tin nhỏ. Trường Flags dùng để điều khiển phân đoạn và lắp ghép gói tin. Cụ

thể như sau:

Bít 0: chưa sử dụng, luôn lấy giá trị 0

Bít 1: 0 ứng với gói tin bị phân mảnh, 1 ứng với gói tin không bị

phân mảnh.

Bít 2: 0 ứng với gói tin thuộc phân đoạn cuối cùng của gói tin gốc, 1

ứng với gói tin không phải là phân đoạn cuối cùng của gói tin gốc.

Fragment Offset-13bít: chỉ vị trí của phân đoạn trong gói tin gốc, tính theo

đơn vị 8 byte.

Time To Live-1byte: quy định thời gian tồn tại tính bằng giây của gói tin

trong mạng. Thời gian này được đặt bởi trạm gửi và giảm đi (thường quy

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 24

Page 25: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

ước là 1) khi gói tin đi qua mỗi router của liên mạng. Một giá trị tối thiểu

phải đủ lớn để mạng hoạt động tốt.

Protocol: Chỉ tầng giao thức kế tiếp sẽ nhận vùng dữ liệu ở trạm đích. TCP

có ứng với giá trị 6, UDP ứng với giá trị 17, 1 ứng với ICMP.

Header Checksum-2byte: Dùng để phát hiện lỗi header của gói tin xảy ra

trong quá trình truyền của nó.

Source IP Address-4byte: Địa chỉ IP của nơi truyền gói tin.

Destination IP Address-4byte: Địa chỉ IP của nơi nhận gói tin.

IP Option-độ dài thay đổi: Khai báo các lựa chọn do người sử dụng yêu

cầu, ví dụ như: mức độ bảo mật, đường mà gói tin được gửi đi, timestamp ở

mỗi router.

Padding-độ dài thay đổi: Dùng để đảm bảo phần header luôn kết thúc ở một

mốc 32 bít.

Data: chứa thông tin lớp trên ,chiều dài thay đổi đến 64Kb.

3.2.3 Cấu trúc gói tin TCP và quá trình kết nối của giao thức TCP

Đơn vị dữ liệu trong TCP được gọi là Segment với cấu trúc như sau:

Source Port-2 byte: số hiệu cổng TCP của trạm nguồn.

Destination Port-2byte: số hiệu cổng TCP của trạm đích.

Sequence number: số hiệu của byte đầu tiên của segment, nếu cờ SYN bật

thì nó là số thứ tự gói ban đầu và byte đầu tiên được gửi có số thứ tự này

cộng thêm 1. Nếu không có cờ SYN thì đây là số thứ tự của byte đầu tiên.

Acknowledgment Number-2byte: nếu cờ ACK bật thì giá trị của trường

chính là số thứ tự gói tin tiếp theo mà bên nhận cần. Báo là nhận tốt các

segment mà trạm đích đã gửi cho trạm nguồn.

Data offset-4bit: độ dài của phần header tính theo đơn vị từ 32 bit. Tham số

này chỉ ra vị trí bắt đầu của nguồn dữ liệu.

Reserved-6 bít.

Flags: các bít điều khiển

URG: Vùng con trỏ khẩn (Urgent pointer) có hiệu lực

ACK: Vùng báo nhận ACK number có hiệu lực

PSH: Chức năng PUSH

RST: khởi động lại liên kết

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 25

Page 26: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

SYN: đồng bộ hoá số hiệu tuần tự

FIND: không còn dữ liệu từ trạm nguồn

Window-2byte: số byte dữ liệu bắt đầu từ byte được chỉ ra trong ACK

number mà trạm nguồn đã sẵn sàng để nhận.

Checksum: checksum cho cả phần header lẫn dữ liệu.

Urgent Pointer-2byte: nếu cờ URG bật thì giá trị trường này chính là số từ

16 bit mà số thứ tự gói tin (sequence number) cần dịch trái.

Option-2byte: vùng tuỳ chọn, khai báo các option của TCP trong đó có độ

dài tối đa của vùng TCP data trong một segment.

Padding: phần chèn thêm vào header để đảm bảo phần header luôn kết thúc

ở một mốc 32 bít

TCP data: chứa dữ liệu của tầng trên có độ dài tối đa ngầm định là 536byte.

Giá trị này có thể khai báo trong trường Option.

Quá trình thiếp lập kết nối của giao thức TCP:

Không giống như giao thức UDP-giao thức có thể lập tức gửi mà không cần

thiết lập kết nối, TCP đòi hỏi phải thiết lập kết nối trước khi bắt đầu gửi dữ liệu và

kết thúc kết nối khi việc gửi dữ liệu hoàn tất. Cụ thể các kết nối của TCP có 3 pha

là :thiết lập kết nối, truyền dữ liệu và kết thúc kết nối.

Các trạng thái của kết nối:

LISTEN: đang đợi yêu cầu kết nối từ một TCP và cổng bất kỳ ở xa (trạng thái này

thường do các TCP server đặt).

SYN-SENT: đang đợi TCP ở xa gửi một gói tin TCP với các cờ SYN và ACK

được bật (trạng thái này thường do các TCP client cài đặt).

SYN-RECEIVED: đang đợi TCP ở xa gửi lại một tin báo nhận sau khi đã gửi cho

TCP ở xa đó một tin báo nhận kết nối(connnection acknowledgment)(thường do

TCP server đặt).

ESTABLISHED: cổng đã sẵn sàng nhận/gửi dữ liệu với TCP ở xa (đặt bởi TCP

client và server).

TIME-WAIT: đang đợi qua đủ thời gian để chắc chắn là TCP ở xa nhận được đã

nhận được tin báo nhận về yêu cầu kết thúc kết nối của nó. Một kết nối có thể ở

trạng thái TIME-WAIT trong vòng tối đa 4 phút.

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 26

Page 27: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

Hình 8: Quá trình thiết lập kết nối của giao thức TCP.

Thiết lập kết nối:

Để thiết lập một kết nối, TCP sử dụng một quy trình bắt tay 3 bước. Trước

khi client thử kết nối với một server, server phải đăng ký một cổng và mở cổng đó

cho các kết nối: đây được gọi là mở bị động. Một khi mở bị động đã được thiết lập

thì một client có thể bắt đầu mở chủ động. Để thiết lập một kết nối, quy trình bắt

tay 3 bước xảy ra như sau:

1. Mở chủ động được thực hiện bằng các gửi một SYN cho server

2. Server trả lời bằng một SYN-ACK

3. Cuối cùng, client gửi một ACK lại cho server

Đến đây cả client và server đều đã nhận được một tin báo nhận(acknowledgement)

về kết nối.

Truyền dữ liệu:

Một số đặc điểm cơ bản của TCP để phân biệt với UDP:

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 27

Page 28: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

Truyền dữ liệu không lỗi (do có cơ chế sữa lỗi/truyền lại)

Truyền các gói dữ liệu theo đúng thứ tự

Truyền lại các gói dữ liệu mất trên đường truyền

Loại bỏ các gói dữ liệu trùng lặp

Cơ chế hạn chế tắc nghẽn đường truyền

Ở hai bước đầu tiên trong ba bước bắt tay, hai máy tính trao đổi một số thứ tự gói

ban đầu (Initial Sequence Number-ISN). Số này có thể chọn một cách ngẫu nhiên.

Số thứ tự này được dùng để đánh dấu các khối dữ liệu gửi từ mỗi máy tính. Sau

mỗi byte được truyền đi, số này được tăng lên. Nhờ vậy ta có thể sắp xếp lại chúng

cho khi tới máy tính kia bất kể các gói tin tới nơi theo thứ tự thế nào. Trên lý

thuyết, mỗi byte gửi đi đều có một số thứ tự và khi nhận được thì máy tính nhận

lại gửi tin báo nhận(ACK). Trong thực tế thì chỉ có byte dữ liệu đầu tiên được gán

số thứ tự trong trường số thứ tự của gói tin và bên nhận sẽ gửi tin báo nhận bằng

cách gửi số thứ tự của byte đang chờ.

Ví dụ máy A gửi 4 byte với số thứ tự ban đầu là 100 (theo lý thuyết thì 4

byte sẽ có thứ tự là 100, 101, 102 và 103) thì bên nhận sẽ gửi báo nhận có nội

dung là 104, bên nhận đã ngầm thông báo rằng nó đã nhận được các byte

100,101,102 và 103. Trong trường hợp 2 byte cuối bị lỗi thì bên nhận sẽ gửi tin

báo nhận với nội dung 102 vì 2 byte 100 và 101 đã nhận thành công. Giả sử ta có

10000 byte được gửi trong 10 gói tin 1000byte và có 1 gói tin mất trên đường

truyền. Nếu gói tin bị mất là gói đầu tiên thì bên gửi sẽ phải gửi lại toàn bộ 10 gói

tin vì không có cách nào để bên nhận thông báo nó đã nhận được 9 gói tin kia. Vấn

đề này được giải quyết trong giao thức SCTP (Stream Control Transmission

Protocol-Giao thức điều khiển truyền vận dòng) với việc bổ sung báo nhận chọn

lọc.

Số thứ tự và tin báo nhận giải quyết được các vấn đề về lặp gói tin, truyền

lại những gói tin bị hỏng/mất và các gói tin đến sai thứ tự. Để phục vụ mục đích

kiểm tra, các gói tin có trường giá trị tổng kiểm (checksum). Với trình độ hiện tại,

kỹ thuật kiểm tra tổng trong TCP không đủ mạnh. Các tầng liên kết dữ liệu với xác

suất lỗi bit cao có thể cần được bổ sung các khả năng phát hiện lỗi tốt hơn. Nếu

như TCP được thiết kế vào thời điểm hiện tại, nhiều khả năng nó sẽ bao gồm

trường kiểm tra độ dư tuần hoàn (cyclic rudundancy check-CRC) với độ dài 32 bít.

Điểm yếu này một phần được bù đắp bằng CRC hay những kỹ thuật khác tại tầng

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 28

Page 29: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

thứ 2 trong mô hình OSI. Tuy nhiên điều này không có nghĩa là trường kiểm tra

tổng của TCP là không cần thiết: thống kê cho thấy các sai sót do cả phần cứng và

phần mềm gây ra giữa các điểm áp dụng kỹ thuật kiểm tra CRT là khá phổ biến và

kỹ thuật kiểm tra tổng có khả năng phát hiện phần lớn các lỗi đơn giản này.

Điểm cuối cùng là khả năng hạn chế tắc nghẽn. Tin báo nhận (hoặc không

có tin báo nhận) là tín hiệu về trạng thái đường truyền giữa 2 máy tính. Từ đó, hai

bên có thể thay đổi tốc độ truyền nhận dữ liệu cho phù hợp với điều kiện. Vấn đề

này thường được đề cập là điều kiển lưu lượng, kiểm soát tắc nghẽn. TCP sử dụng

một số cơ chế nhằm đạt được hiệu suất cao và ngăn ngừa khả năng nghẽn mạng.

Các cơ chế này bao gồm: cửa sổ trượt (sliding window), thuật toán slow-start,

thuật toán tránh nghẽn mạng (congestion avoidance), thuật toán truyền lại và phục

hồi nhanh,… Hiện nay, vấn đề cải tiến TCP trong môi trường truyền dẫn tốc độ

cao đang là hướng nghiên cứu được quan tâm.

Kích thước cửa sổ TCP là chiều dài (byte) của khối dữ liệu có thể lưu trong

bộ đệm bên nhận. Bên gửi chỉ có thể gửi tối đa lượng thông tin chứa trong cửa sổ

này trước khi nhận được tin báo nhận.

Dãn kích thước cửa sổ: Để tận dụng khả năng truyền dẫn của mạng thì cửa

sổ dùng trong TCP cần được tăng lên. Trường điều khiển kích thước cửa sổ của

gói tin TCP có độ dài 2 byte do đó kích thước tối đa của cửa sổ là 65535 byte. Do

trường điều khiển không thể thay đổi nên người ta sử dụng một hệ số dãn nào đó.

Hệ số này được định nghĩa trong RFC1323 có thể tăng kích thước tối đa của cửa

sổ lên tới 1GB. Việc tăng kích thước cửa sổ chỉ được dùng trong giao thức bắt tay

3 pha. Giá trị của trường co dãn cửa sổ thể hiện số bít cần được dịch trái đối với

trường kích thước cửa sổ. Hệ số dãn có thể thay đổi từ 0 (không dãn) đến 14 (dãn

tối đa).

Kết thúc kết nối

Để kết thúc kết nối hai bên sử dụng quá trình bắt tay 4 bước và chiều của

kết nối kết thúc độc lập với nhau. Khi một bên muốn kết thúc, nó gửi đi một gói

tin FIN và bên kia gửi lại tin báo nhận ACK. Vì vậy, một quá trình kết thúc tiêu

biểu sẽ có 2 cặp gói tin trao đổi. Một kết nối có thể tồn tại ở dạng nửa mở: một

bên đã kết thúc gửi dữ liệu nên chỉ nhận thông tin, bên kia tiếp tục gửi.

3.2.4 Cấu trúc gói tin UDP:

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 29

Page 30: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

Vùng header của UDP có 64 bít với 4 trường :

Source Port-2byte: xác định cổng của người gửi thông tin và có ý nghĩa nếu

muốn nhận thông tin phản hồi từ người nhận. Nếu không thì đặt nó bằng 0.

Destination Port-2byte: xác định cổng nhận thông tin và trường này là cần

thiết.

Length-2byte: là chiều dài của toàn bộ gói tin(phần header và phần dữ liệu).

Chiều dài tối thiểu là 8 byte khi gói tin không có dữ liệu, chỉ có header.

Checksum-2byte: dùng cho việc kiểm tra lỗi của phần header và phần dữ

liệu.

3.3.Cấu trúc phần cứng, phần mềm

Để xây dựng giao diện truyền thông Ethernet thì cấu trúc phần cứng của

giao diện truyền thông bao gồm 3 phần chính sau :

-Vi điều khiển.

-Thiết bị kết nối Ethernet với vi điều khiển.

-RJ45 tích hợp biến áp.

3.3.1. Vi điều khiển

Vi điều khiển sử dụng để thực hiện giao tiếp là PIC 16F877A.

Sơ đồ chân của vi điều khiển PIC 16F877A

Hình 9: Vi điều khiển PIC 16F877A.

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 30

Page 31: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

Một vài thông số về vi điều khiển PIC 16F877A

Đây là vi điều khiển thuộc họ PIC16Fxxx với tập lệnh gồm 35 lệnh có độ

dài 14 bit. Mỗi lệnh đều được thực thi trong một chu kì xung clock. Tốc độ hoạt

động tối đa cho phép là 20 MHz với một chu kì lệnh là 200ns. Bộ nhớ chương

trình 8Kx14 bit, bộ nhớ dữ liệu 368x8 byte RAM và bộ nhớ dữ liệu EEPROM với

dung lượng 256x8 byte. Số PORT I/O là 5 với 33 pin I/O.

Các đặc tính ngoại vi bao gồm các khối chức năng sau:

Timer0: bộ đếm 8 bit với bộ chia tần số 8 bit.

Timer1: bộ đếm 16 bit với bộ chia tần số, có thể thực hiện chức năng đếm

dựa vào xung clock ngoại vi ngay khi vi điều khiển hoạt động ở chế độ

sleep.

Timer2: bộ đếm 8 bit với bộ chia tần số, bộ postcaler.

Hai bộ Capture/Compare/PWM.

Các chuẩn giao tiếp nối tiếp SSP (Synchronous Serial Port), SPI và I2C.

Chuẩn giao tiếp nối tiếp USART với 9 bit địa chỉ.

Cổng giao tiếp song song PSP (Parallel Slave Port) với các chân điều khiển

RD, WR, CS ở bên ngoài.

Các đặc tính Analog: 8 kênh chuyển đổi ADC 10 bit, hai bộ so sánh.

Bên cạnh đó là một vài đặc tính khác của vi điều khiển như:

Bộ nhớ flash với khả năng ghi xóa được 100.000 lần.

Bộ nhớ EEPROM với khả năng ghi xóa được 1.000.000 lần.

Dữ liệu bộ nhớ EEPROM có thể lưu trữ trên 40 năm.

Khả năng tự nạp chương trình với sự điều khiển của phần mềm.

Nạp được chương trình ngay trên mạch điện ICSP (In Circuit Serial

Programming) thông qua 2 chân.

Watchdog Timer với bộ dao động trong.

Chức năng bảo mật mã chương trình.

Chế độ Sleep.

Có thể hoạt động với nhiều dạng Oscillator khác nhau.

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 31

Page 32: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

Hình 10: Sơ đồ khối cấu trúc của vi điều khiển PIC 16F877A.

Cấu trúc bộ nhớ của vi điều khiển PIC16F877A bao gồm bộ nhớ chương

trình (Program memory) và bộ nhớ dữ liệu (Data Memory).

Bộ nhớ chương trình :

Bộ nhớ chương trình của vi điều khiển PIC16F877A là bộ nhớ flash, dung

lượng bộ nhớ 8K word (1 word = 14 bit) và được phân thành nhiều trang (từ page

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 32

Page 33: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

0 đến page 3) .Như vậy bộ nhớ chương trình có khả năng chứa được 8*1024 =

8192 lệnh (một lệnh sau khi mã hóa sẽ có dung lượng 1 word -14 bit).

Để mã hóa được địa chỉ của 8K word bộ nhớ chương trình, bộ đếm chương

trình có dung lượng 13 bit (PC<12:0>).

Khi vi điều khiển được reset, bộ đếm chương trình sẽ chỉ đến địa chỉ 0000h

(Reset vector). Khi có ngắt xảy ra, bộ đếm chương trình sẽ chỉ đến địa chỉ 0004h

(Interrupt vector).

Bộ nhớ chương trình không bao gồm bộ nhớ stack và không được địa chỉ

hóa bởi bộ đếm chương trình.

Hình 11: Bộ nhớ chương trình

PIC16F877A.

Bộ nhớ dữ liệu

Bộ nhớ dữ liệu của PIC là bộ nhớ EEPROM được chia ra làm nhiều bank.

Đối với PIC16F877A bộ nhớ dữ liệu được chia ra làm 4 bank. Mỗi bank có dung

lượng 128 byte, bao gồm các thanh ghi có chức năng đặc biệt SFG (Special

Function Register) nằm ở các vùng địa chỉ thấp và các thanh ghi mục đích chung

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 33

Page 34: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

GPR (General Purpose Register) nằm ở vùng địa chỉ còn lại trong bank.

Hình 12: Bộ nhớ dữ liệu PIC16F877A.

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 34

Page 35: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

Các thanh ghi SFR thường xuyên được sử dụng (ví dụ như thanh ghi STATUS) sẽ

được đặt ở tất cả các bank của bộ nhớ dữ liệu giúp thuận tiện trong quá trình truy

xuất và làm giảm bớt lệnh của chương trình. Sơ đồ cụ thể của bộ nhớ dữ liệu

PIC16F877A ở trên.

Timer 0Đây là một trong ba bộ đếm hoặc bộ định thời của vi điều khiển

PIC16F877A.

Hình 13: Sơ đồ khối của Timer 0.

Timer 0 là bộ đếm 8 bit được kết nối với bộ chia tần số (prescaler) 8 bit.

Cấu trúc của Timer0 cho phép ta lựa chọn xung clock tác động và cạnh tích cực

của xung clock. Ngắt Timer 0 sẽ xuất hiện khi Timer 0 bị tràn. Bit TMR0IE

(INTCON<5>) là bit điều khiển của Timer0. TMR0IE=1 cho phép ngắt Timer0

tác động, TMR0IF= 0 không cho phép ngắt Timer 0 tác động. Sơ đồ khối của

Timer 0 như trên.

Muốn Timer 0 hoạt động ở chế độ Timer ta xoá bit TOSC

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 35

Page 36: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

(OPTION_REG<5>), khi đó giá trị thanh ghi TMR0 sẽ tăng theo từng chu kì xung

đồng hồ (tần số vào Timer 0 bằng ¼ tần số oscillator). Khi giá trị thanh ghi TMR0

từ FFh trở về 00h, ngắt Timer0 sẽ xuất hiện. Thanh ghi TMR0 cho phép ghi và

xóa được giúp ta ấn định thời điểm ngắt Timer0 xuất hiện một cách linh động.

Muốn Timer0 hoạt động ở chế độ counter ta set bit TOSC

(OPTION_REG<5>). Khi đó xung tác động lên bộ đếm được lấy từ chân

RA4/TOCK1. Bit TOSE (OPTION_REG<4>) cho phép lựa chọn cạnh tác động

vào bột đếm. Cạnh tác động sẽ là cạnh lên nếu TOSE=0 và cạnh tác động sẽ là

cạnh xuống nếu TOSE=1.

Khi thanh ghi TMR0 bị tràn, bit TMR0IF (INTCON<2>) sẽ được set. Đây

chính là cờ ngắt của Timer 0. Cờ ngắt này phải được xóa bằng chương trình trước

khi bộ đếm bắt đầu thực hiện lại quá trình đếm. Ngắt Timer 0 không thể “đánh

thức” vi điều khiển từ chế độ sleep.

Bộ chia tần số (prescaler) được chia sẻ giữa Timer 0 và WDT (Watchdog

Timer). Điều đó có nghĩa là nếu prescaler được sử dụng cho Timer 0 thì WDT sẽ

không có được hỗ trợ của prescaler và ngược lại. Prescaler được điều khiển bởi

thanh ghi OPTION_REG. Bit PSA (OPTION_REG<3>) xác định đối tượng tác

động của prescaler. Các bit PS2:PS0 (OPTION_REG<2:0>) xác định tỉ số chia tần

số của prescaler.

Các lệnh tác động lên giá trị thanh ghi TMR0 sẽ xóa chế độ hoạt động của

prescaler. Khi đối tượng tác động là Timer 0, tác động lên giá trị thanh ghi TMR0

sẽ xóa prescaler nhưng không làm thay đổi đối tượng tác động của prescaler. Khi

đối tượng tác động là WDT, lệnh CLRWDT sẽ xóa prescaler, đồng thời prescaler

sẽ ngưng tác vụ hỗ trợ cho WDT.

Timer 1

Timer 1 là bộ định thời 16 bit, giá trị của Timer 1 sẽ được lưu trong hai

thanh ghi (TMR1H:TMR1L). Cờ ngắt của Timer1 là bit TMR1IF (PIR1<0>). Bit

điều khiển của Timer1 sẽ là TMR1IE (PIE<0>). Tương tự như Timer0, Timer1

cũng có hai chế độ hoạt động: chế độ định thời (timer) với xung kích là xung clock

của oscillator (tần số của timer bằng ¼ tần số của oscillator) và chế độ đếm

(counter) với xung kích là xung phản ánh các sự kiện cần đếm lấy từ bên ngoài

thông qua chân RC0/T1OSO/T1CKI (cạnh tác động là cạnh lên). Việc lựa chọn

chế độ hoạt động nào sẽ được điều khiển bởi TMR1CS ( T1CON<1>).

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 36

Page 37: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

Hình 14: Sơ đồ khối Timer 1.

Ngoài ra Timer 1 còn có chức năng reset input bên trong được điều khiển

bởi một trong hai khối CCP ( Capture/ Compare/ PMW ). Timer 1 có hai chế độ

đếm là đồng bộ ( Synchronous) và dị bộ ( Asynchronous). Chế độ đếm được quyết

định bởi bit điều khiển T1SYNC (T1CON <2>).

Timer 2

Hình 15: Sơ đồ khối Timer 2.

Timer 2 là bộ định thời 8 bit và được hỗ trợ bởi hai bộ chia tần số prescaler

và postscaler. Thanh ghi chứa giá trị đếm của Timer 2 là TMR2. Bit cho phép ngắt

Timer 2 tác động là TMR2ON (T2CON<2>). Cờ ngắt của Timer2 là bit TMR2IF

(PIR1<1>). Xung ngõ vào (tần số bằng ¼ tần số oscillator) được đưa qua bộ chia

tần số prescaler 4 bit (với các tỉ số chia tần số là 1:1, 1:4 hoặc 1:16 và được điều

khiển bởi các bit T2CKPS1:T2CKPS0 (T2CON<1:0>)).

Timer2 còn được hỗ trợ bởi thanh ghi PR2. Giá trị đếm trong thanh ghi

TMR2 sẽ tăng từ 00h đến giá trị chứa trong thanh ghi PR2, sau đó được reset về

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 37

Page 38: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

00h. Khi reset thanh ghi PR2 được nhận giá trị mặc định FFh.

Ngõ ra của Timer 2 được đưa qua bộ chia tần số postscaler với các mức

chia từ 1:1 đến 1:16. Postscaler được điều khiển bởi 4 bit T2OUTPS3:T2OUTPS0.

Ngõ ra của postscaler đóng vai trò quyết định trong việc điều khiển cờ ngắt.

Ngoài ra ngõ ra của Timer2 còn được kết nối với khối SSP, do đó Timer2

còn đóng vai trò tạo ra xung clock đồng bộ cho khối giao tiếp SSP.

MSSPMSSP ( Master Synchronous Serial Port) là giao diện đồng bộ nối tiếp dùng

để giao tiếp với các thiết bị ngoại vi (EEPROM, ghi dịch, chuyển đổi ADC,…)

hay các vi điều khiển khác. MSSP có thể hoạt động dưới hai dạng giao tiếp:

SPI ( Serial Pheripheral Interface ).

I2C ( Inter-Intergrated Circuit ).

Các thanh ghi điều khiển chuẩn giao tiếp này bao gồm thanh ghi trạng thái

SSPSTAT và hai thanh ghi điều khiển SSPCON và SSPCON2. Tùy theo chuẩn

giao tiếp được sử dụng (SPI hay I2C) mà chức năng các thanh ghi này được thể

hiện khác nhau.

Chuẩn giao tiếp SPI cho phép truyền nhận đồng bộ. Ta cần sử dụng 4 pin

cho chuẩn giao tiếp này:

RC5/SDO: ngõ ra dữ liệu dạng nối tiếp (Serial Data output).

RC4/SDI/SDA: ngõ vào dữ liệu dạng nối tiếp (Serial Data Input).

RC3/SCK/SCL: xung đồng bộ nối tiếp (Serial Clock).

RA5/AN4/SS/C2OUT: chọn đối tượng giao tiếp (Serial Select) khi giao

tiếp ở chế độ Slave mode.

Các thanh ghi liên quan đến MSSP khi hoạt động ở chuẩn giao tiếp SPI bao gồm:

Thanh ghi điều khiển SSPCON, thanh ghi này cho phép đọc và ghi.

Thanh ghi trạng thái SSPSTAT, thanh ghi này chỉ cho phép đọc và ghi ở 2

bit trên, 6 bit còn lại chỉ cho phép đọc.

Thanh ghi đóng vai trò là buffer truyền nhận SSPBUF, dữ liệu truyền đi

hoặc nhận được sẽ được đưa vào tranh ghi này. SSPBUF không có cấu trúc

đệm hai lớp (doubled-buffer), do đó dữ liệu ghi vào thanh ghi SSPBUF sẽ

lập tức được ghi vào thanh ghi SSPSR.

Thanh ghi dịch dữ liệu SSPSR dùng để dịch dữ liệu vào hoặc ra. Khi 1 byte

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 38

Page 39: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

dữ liệu được nhận hoàn chỉnh, dữ liệu sẽ từ thanh ghi SSPSR chuyển qua

thanh ghi SSPBUF và cờ hiệu được set, đồng thời ngắt sẽ xảy ra.

Khi sử dụng chuẩn giao tiếp SPI trước tiên ta cần thiết lập các chế độ cho

giao diện bằng cách đưa các giá trị thích hợp vào hai thanh ghi SSPCON và

SSPSTAT. Các thông số cần thiết lập bao gồm:

+ Master mode hay Slave mode. Đối với Master mode, xung clock

đồng bộ sẽ đi ra từ chân RC3/SCK/SCL. Đối với Slave mode, xung

clock đồng bộ sẽ được nhận từ bên ngoài qua chân

RC3/SCK/SCL.

+ Các chế độ của Slave mode.

+ Mức logic của xung clock khi ở trang thái tạm ngưng quá trình

truyền nhận (Idle).

+ Cạnh tác động của xung clock đồng bộ (cạnh lên hay cạnh xuống).

+ Tốc độ xung clock (khi hoạt động ở Master mode).

+ Thời điểm xác định mức logic của dữ liệu (ở giữa hay ở cuối thời

gian 1 bit dữ liệu được đưa vào).

+ Master mode, Slave mode và các chế độ của Slave mode được

điều khiển bởi các bit SSPM3:SSPM0 (SSPCON<3:0>).

MSSP bao gồm một thanh ghi dịch dữ liệu SSPSR và thanh ghi đệm dữ liệu

SSPBUF.Hai thanh ghi này tạo thành bộ đệm dữ liệu kép (doubled-buffer). Dữ

liệu sẽ được dịch vào hoặc ra qua thanh ghi SSPSR, bit MSB được dịch trước. Đây

là một trong những điểm khác biệt giữ hai giao diện MSSP và USART (USART

dịch bit LSB trước).

Trong quá trình nhận dữ liệu, khi dữ liệu đưa vào từ chân RC4/SDI/SDA

trong thanh ghi SSPSR đã sẵn sàng (đã nhận đủ 8 bit), dữ liệu sẽ được đưa vào

thanh ghi SSPBUF, bit chỉ thị trạng thái bộ đệm BF (SSPSTAT<0>) sẽ được set

để báo hiệu bộ đệm đã đầy, đồng thời cờ ngắt SSPIF (PIR1<3>) cũng được set. Bit

BF sẽ tự động reset về 0 khi dữ liệu trong thanh ghi SSPBUF được đọc vào. Bộ

đệm kép cho phép đọc tiếp byte tiếp theo trước khi byte dữ liệu trước đó được đọc

vào. Tuy nhiên ta nên đọc trước dữ liệu từ thanh ghi SSPBUF trước khi nhận byte

dữ liệu tiếp theo.

Quá trình truyền dữ liệu cũng hoàn toàn tương tự nhưng ngược lại. Dữ liệu

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 39

Page 40: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

cần truyền sẽ được đưa vào thanh ghi SSPBUF đồng thời đưa vào thanh ghi

SSPSR, khi đó cờ hiệu BF được set. Dữ liệu được dịch từ thanh ghi SSPSR và đưa

ra ngoài qua chân RC5/SDO. Ngắt sẽ xảy ra khi quá trình dịch dữ liệu hoàn tất.

Tuy nhiên dữ liệu trước khi được đưa ra ngoài phải được cho phép bởi tín hiệu từ

chân RA5/AN4/SS/C2OUT. Chân này đóng vai trò chọn đối tượng giao tiếp khi

SPI ở chế độ slave mode.

Khi quá trình truyền nhận dữ liệu đang diễn ra, ta không được phép ghi dữ

liệu vào thanh ghi SSPBUF. Thao tác ghi dữ liệu này sẽ set bit WCON

(SSPCON<7>). Một điều cần chú ý nữa là thanh ghi SSPSR không cho phép truy

xuất trực tiếp mà phải thông qua thanh ghi SSPBUF.

Hình 16: Sơ đồ kết nối của chuẩn giao tiếp SPI.

Cổng giao tiếp của giao diện SPI được điều khiển bởi bit SSPEN

(SSPSON<5>). Bên cạnh đó cần điều khiển chiều xuất nhập của PORTC thông

qua thanh ghi TRISC sao cho phù hợp với chiều của giao diện SPI. Cụ thể :

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 40

Page 41: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

RC4/SDI/SDA sẽ tự động được điều khiển bởi khối giao tiếp SPI.

RS5/SDO là ngõ ra dữ liệu, do đó cần clear bit TRISC<5>.

Khi SPI ở dạng Master mode, cần clear bit TRISC<3> để cho phép

đưa xung clock đồng bộ ra chân RC3/SCK/SCL.

Khi SPI ở dạng Slave mode, cần set bit TRISC<3> để cho phép nhận xung

clock đồng bộ từ bên ngoài qua chân RC3/SCK/SCL.

Set bit TRISC <4> để cho phép chân RA5/AN4/SS/C2OUT nhận tín hiệu

điều khiển truy xuất dữ liệu khi SPI ở chế độ slave mode.

Theo sơ đồ kết nối của chuẩn giao tiếp SPI, khối Master sẽ bắt đầu quá

trình truyền nhận dữ liệu bằng cách gửi tín hiệu xung đồng bộ SCK. Dữ liệu sẽ

dịch từ cả hai thanh ghi SSPSR đưa ra ngoài nếu có một cạnh của xung đồng bộ

tác động và ngưng dịch khi có tác động của cạnh còn lại.

Cả hai khối Master và Slave nên được ấn định chung các qui tắc tác động

của xung clock đồng bộ để dữ liệu có thể dịch chuyển đồng thời.

SPI Master Mode

Ở chế độ Master mode, vi điều khiển có quyền ấn định thời điểm trao đổi

dữ liệu (và đối tượng trao đổi dữ liệu nếu cần) vì nó điều khiển xung clock đồng

bộ. Dữ liệu sẽ được truyền nhận ngay thời điểm dữ liệu được đưa vào thanh ghi

SSPBUF. Nếu chỉ cần nhận dữ liệu, ta có thể ấn định chân SDO là ngõ vào (set bit

TRISC<5>). Dữ liệu sẽ được dịch vào thanh ghi SSPSR theo một tốc độ được

định sẵn cho xung clock đồng bộ. Sau khi nhận được một byte dữ liệu hoàn chỉnh,

byte dữ liệu sẽ được đưa vào thanh ghi SSPBUF, bit BF được set và ngắt xảy ra.

Hình 17: Sơ đồ kết nối của chuẩn giao tiếp SPI.

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 41

Page 42: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

Hình 18: Giản đồ xung SPI ở chế độ Master Mode.

Khi lệnh SLEEP được thực thi trong quá trình truyền nhận, trạng thái của

quá trình sẽ được giữ nguyên và tiếp tục sau khi vi điều khiển được đánh

thức.Giản đồ xung của Master mode và các tác động của các bit điều khiển được

trình bày trong hình vẽ trên.

SPI Slave Mode

Ở chế độ này SPI sẽ truyền và nhận dữ liệu khi có xung đồng bộ xuất hiện

ở chân SCK. Khi truyền nhận xong bit dữ liệu cuối cùng, cờ ngắt SSPIF sẽ được

set. Slave mode hoạt động ngay cả khi vi điều khiển đang ở chế độ sleep, và ngắt

truyền nhận cho phép “đánh thức” vi điều khiển. Khi chỉ cần nhận dữ liệu, ta có

thể ấn định RC5/SDO là ngõ vào (set bit TRISC<5>).

Slave Mode cho phép sự tác động của chân điều khiển RA5/AN4/SS/

C2OUT (SSPCON <3:0>=0100). Khi chân RA5/AN4/SS/C2OUT ở mức

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 42

Page 43: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

thấp, dữ liệu ra ở chân RC5/SDO được cho phép xuất dữ liệu và khi ở mức cao, dữ

liệu ra ở chân RC5/SDO bị khóa, đồng thời SPI được reset ( bộ đếm dữ liệu được

gán giá trị 0 ).

Hình 19: Giản đồ xung chuẩn giao tiếp SPI ở chế độ Slave Mode.

Các thanh ghi liên quan đến chuẩn giao tiếp SPI bao gồm:

Thanh ghi INTCON (địa chỉ 0Bh, 8Bh, 10Bh, 18Bh): chứa bit cho phép

toàn bộ các ngắt (GIE và PEIE).

Thanh ghi PIR1 (địa chỉ 0Ch): chứa cờ ngắt SSPIF.

Thanh ghi PIE1 (địa chỉ 8Ch): chứa bit cho phép ngắt SSPIE.

Thanh ghi TRISC (địa chỉ 87h): điều khiển xuất nhập PORTC.

Thanh ghi SSPBUF (địa chỉ 13h): thanh ghi đệm dữ liệu.

Thanh ghi SSPCON (địa chỉ 14h): điều khiển chuẩn giao tiếp SPI.

Thanh ghi SSPSTAT (địa chỉ 94h): chứa các bit chỉ thị trạng chuẩn giao

tiếp SPI.

Thanh ghi TRISA ( địa chỉ 85h) : điều khiển xuất nhập chân RA5/ AN4/S-

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 43

Page 44: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

S/C2-OUT.

Ngắt (Interrupt)

PIC16F877A có đến 15 nguồn tạo ra hoạt động ngắt được điều khiển bởi

thanh ghi INTCON (bit GIE). Bên cạnh đó mỗi ngắt còn có một bit điều khiển và

cờ ngắt riêng. Các cờ ngắt vẫn được set bình thường khi thỏa mãn điều kiện ngắt

xảy ra bất chấp trạng thái của bit GIE, tuy nhiên hoạt động ngắt vẫn phụ thuôc vào

bit GIE và các bit điều khiển khác. Bit điều khiển ngắt RB0/INT và TMR0 nằm

trong thanh ghi INTCON, thanh ghi này còn chứa bit cho phép các ngắt ngoại vi

PEIE. Bit điều khiển các ngắt nằm trong thanh ghi PIE1 và PIE2. Cờ ngắt của các

ngắt nằm trong thanh ghi PIR1 và PIR2.

Hình 20: Sơ đồ logic của tất cả các ngắt trong vi điều khiển PIC 16F877A.

Trong một thời điểm chỉ có một chương trình ngắt được thực thi, chương

trình ngắt được kết thúc bằng lệnh RETFIE. Khi chương trình ngắt được thực thi,

bit GIE tự động được xóa, địa chỉ lệnh tiếp theo của chương trình chính được cất

vào trong bộ nhớ Stack và bộ đếm chương trình sẽ chỉ đến địa chỉ 0004h. Lệnh

RETFIE được dùng để thoát khỏi chương trình ngắt và quay trở về chương trình

chính, đồng thời bit GIE cũng sẽ được set để cho phép các ngắt hoạt động trở lại.

Các cờ hiệu được dùng để kiểm tra ngắt nào đang xảy ra và phải được xóa bằng

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 44

Page 45: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

chương trình trước khi cho phép ngắt tiếp tục hoạt động trở lại để ta có thể phát

hiện được thời điểm tiếp theo mà ngắt xảy ra.

Đối với các ngắt ngoại vi như ngắt từ chân INT hay ngắt từ sự thay đổi

trạng thái các pin của PORTB (PORTB Interrupt on change), việc xác định ngắt

nào xảy ra cần 3 hoặc 4 chu kì lệnh tùy thuộc vào thời điểm xảy ra ngắt.

Ngắt INT dựa trên sự thay đổi trạng thái của pin RB0/INT. Cạnh tác động

gây ra ngắt có thể là cạnh lên hay cạnh xuống và được điều khiển bởi bit INTEDG

(thanh ghi OPTION_REG <6>). Khi có cạnh tác động thích hợp xuất hiện tại pin

RB0/INT, cờ ngắt INTF được set bất chấp trạng thái các bit điều khiển GIE và

PEIE. Ngắt này có khả năng đánh thức vi điều khiển từ chế độ sleep nếu bit cho

phép ngắt được set trước khi lệnh SLEEP được thực thi.

Ngắt do sự thay đổi trạng thái của các chân trong PORTB. Các pin

PORTB<7:4> được dùng cho ngắt này và được điều khiển bởi bit RBIE (thanh ghi

INTCON<4>). Cờ ngắt của ngắt này là bit RBIF (INTCON<0>).

3.3.2 Thiết bị kết nối Ethernet với vi điều khiển

Thông thường để kết nối thiết bị điều khiển với mạng Ethernet có hai cách,

một là sử dụng các vi điều khiển tích hợp sẵn phần giao tiếp với Ethernet, phổ biến

là các dòng PIC18F66J60, PIC18F66J65, PIC18F67J60, PIC18F67J60,

PIC18F86J60,…. của Microchip. Sử dụng phương thức này có ưu điểm viết mã

code đơn giản, kích thước bo mạch nhỏ gọn. Ngoài ra còn có cách khác là sử dụng

chip giao tiếp Ethernet ENC28J60, với cách sử dụng này bo mạch sẽ có kích thước

lớn hơn, thường tách thành hai module độc lập được kết nối qua card hỗ trợ giao

tiếp chuẩn SPI ( Serial Pheripheral Interface ).

Trong module ghép nối Ethernet, ta chọn cách sử dụng chip ENC28J60.

ENC28J60 là thiết bị kết nối Ethernet độc lập theo chuẩn công nghiệp giao tiếp

SPI. Nó được thiết kế để đáp ứng như một giao diện mạng Ethernet cho bất kì bộ

điều khiển nào có trang bị giao tiếp SPI.

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 45

Page 46: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

Hình 21: ENC28J60.

ENC28J60 bao gồm 7 khối chức năng chính:

Một giao tiếp SPI phục vụ cho kênh truyền thông giữa vi điều khiển với

ENC28J60.

Các thanh ghi điều khiển được sử dụng để điều khiển và giám sát

ENC28J60.

Một bộ nhớ đệm RAM dùng cho nhận và truyền dữ liệu.

Một bộ phân xử để điều khiển truy nhập tới bộ đệm RAM khi yêu cầu được

tạo ra từ DMA, khối nhận và truyền.

Giao diện bus để trao đổi dữ liệu và nhận lệnh qua giao tiếp SPI.

Module MAC thực hiện phép logic MAC theo IEEE 802.3.

Module PHY mã hóa và giải mã dữ liệu tương tự truyền trên cặp đôi dây

xoắn.

Hình 22 : Giao diện cơ bản ENC28J60.

Tất cả bộ nhớ bên trong ENC28J60 là kiểu RAM tĩnh (SRAM ). Có 3 loại

bộ nhớ :

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 46

Page 47: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

Bộ nhớ chứa các thanh ghi điều khiển được sử dụng để cấu hình, điều khiển

và lấy lại trạng thái của ENC28J60. Chúng được đọc và ghi trực tiếp bởi giao tiếp

SPI.

Bộ nhớ chứa các thanh ghi điều khiển được chia thành 4 ngăn (bank ), có

thể được chọn bởi các bit chọn ngăn BSEL1:BSEL0 trong thanh ghi ECON1. Mỗi

bank dài 32 bytes và được đánh 5 bit địa chỉ. Vị trí của 5 bytes cuối cùng (từ 1Bh

đến 1Fh) của tất cả các bank đều có chung năm thanh ghi EIE, EIR, ESTAT,

ECON1, ECON2.

Bộ đệm Ethernet là bộ nhớ đệm có được sử dụng để truyền và nhận dữ liệu.

Kích thước của bộ đệm là 8Kbyte và được chia thành bộ đệm nhận và bộ đệm

truyền. Trong đó, kích thước và vị trí của các bộ đệm trên được lập trình bởi vi

điều khiển qua giao tiếp SPI. Nội dung của bộ đệm Ethernet được truy cập thông

qua các con trỏ đọc và ghi kết hợp với các lệnh đọc và ghi bộ nhớ đệm SPI.

Hình 23: Các vùng nhớ của ENC28J60.

Bộ đệm nhận là vùng nhớ tạm thời dùng để lưu dữ liệu nhận được từ mạng

Ethernet. Các cặp thanh ghi ERXSTH: ERXSTL và ERXNDH : ERXNDL đóng

vai trò như là các con trỏ để xác định kích thước và vị trí của bộ đệm trong bộ nhớ.

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 47

Page 48: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

Khi các byte của dữ liệu nhận được từ giao diện Ethernet thì chúng sẽ được ghi

vào trong bộ đệm nhận một cách tuần tự.

Bộ đệm truyền sẽ chiếm phần bộ nhớ còn lại trong bộ đệm Ethernet. Bộ

đệm này cũng được xác định kích thước và vị trí thông qua các cặp thanh ghi

ETXST và ETXSN như các con trỏ. Dữ liệu trước khi truyền lên mạng Ethernet sẽ

được lưu tạm thời trong vùng nhớ này.

Hình 24: Vùng đệm truyền nhận của ENC28J60.

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 48

Page 49: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

Các thanh ghi PHY được sử dụng để cấu hình, điều khiển và lấy lại trạng

thái của module PHY. Các thanh ghi này không được truy nhập trực tiếp qua giao

diện SPI, chúng chỉ có thể được truy nhập qua MII thực hiện trong MAC.

Mọi hoạt động của ENC28J60 phụ thuộc vào toàn bộ các lệnh được đưa từ

vi điều khiển thông qua giao diện SPI. Các lệnh này được sử dụng để truy nhập tới

bộ nhớ chứa các thanh ghi điều khiển và bộ đệm Ethernet.

Lệnh đọc thanh ghi điều khiển (RCR) cho phép vi điều khiển đọc bất kì các thanh

ghi nào của ETH, MAC, MII. Lệnh đọc bộ nhớ đệm(RBM)cho phép vi điều khiển

có thể đọc các bytes bên trong bộ nhớ đệm truyền và nhận.Lệnh viết thanh ghi

điều khiển viết WCR cho phép vi điều khiển viết tới bất kì các thanh ghi nào của

ETH, MAC, MII. Lệnh viết tới bộ nhớ đệm WBM cho phép vi điều khiển viết các

bytes trong 8-Kbyte bộ nhớ đệm truyền và nhận. Lệnh BSF dùng để thiết lập 8 bits

điều khiển trong thanh ghi ETH. Lệnh này không được sử dụng với thanh ghi

MAC, PHY, MII hay bộ nhớ đệm. Lệnh BFC dùng để xóa 8 bits trong thanh ghi

điều khiển ETH. Lệnh reset hệ thống SRC cho phép vi điều khiển phát ra lệnh

SSR. Không giống như các lệnh SPI khác. Lệnh SRC chỉ là lệnh 1 byte, không tác

động lên các thanh ghi khác.

Quá trình gửi và nhận bức điện:

Module MAC bên trong ENC28J60 sẽ tự động gửi đi trường mở đầu và

phân định đầu khung khi truyền. Ngoài ra, MAC có thể gửi thêm bất kì phần đệm

nào (nếu cần) và phần kiểm soát lỗi CRC.

Trong khi đó, vi điều khiển sẽ phải thực hiện việc ghi tất cả những trường

hợp còn lại của khung Ethernet vào bên trong bộ nhớ đệm trước khi được truyền

đi.

Để truyền đi một bức điện Ethernet thì vi điều khiển cần thực hiện các bước

sau:

1.Điều khiển con trỏ ETXST để trỏ vào vùng nhớ nào hiện thời không sử dụng.

2.Sử dụng lệnh ghi bộ nhớ đệm WBR để ghi byte điều khiển, sau đó đến các

trường của khung Ethernet : địa chỉ MAC đích và nguồn, kiểu/ độ dài và dữ liệu

mạng.

3.Điều khiển con trỏ ETXSD để chỉ tới byte cuối cùng của dữ liệu mang.

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 49

Page 50: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

4.Xóa bit TXIF và đặt bit TXIE trong thanh ghi EIR, đặt bit INTIE trong thanh ghi

EIE để có thể thực hiện một ngắt khi cần thiết.

5.Quá trình truyền được bắt đầu khi đặt bit TXRTS của thanh ghi ECON1.

Khi quá trình truyền bức điện được thực hiện thành công hoặc ngưng lại

khi có một nguyên nhân nào đó thì bit TXRTS của thanh ghi ECON1 sẽ được xóa,

7 byte vector trạng thái truyền sẽ được ghi vào vị trí bởi ETXND +1, bit TXIF của

thanh ghi EIR sẽ được đặt và ngắt được tạo ra. Để kiểm tra nếu bức điện được gửi

thành công, bit TXABRT của thanh ghi ESTAT sẽ được đọc.

3.3.3 Một số thành phần khác

Hình 25: RJ45 tích hợp biến áp.

Để có thể nối vào card mạng của PC thì cáp đôi dây xoắn cần được gắn vào đầu nối RJ45.

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 50

Page 51: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

Hình 26: Giắc RJ45 và cáp đôi dây xoắn

Trong trường hợp có hai hoặc nhiều thiết bị điều khiển cùng kết nối với

mạng Ethernet thì ta cần sử dụng đến Hub hoặc sử dụng Switch để tạo thành

mạng.

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 51

Page 52: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

CHƯƠNG 4: XÂY DỰNG MÔ HÌNH MINH HOẠ

Về cơ bản đã thiết kế được phần cứng để giao tiếp với máy tính thông qua

giao diện Ethernet.

Có thể mở rộng để giao tiếp giữa máy tính với nhiều vi điều khiển, sử dụng

Hub.

Đã có thể sử dụng được cả giao thức TCP và UDP để truyền nhận dữ liệu.

Hiển thị nhiệt độ tương đối chính xác.

4.1 Phần cứng

4.1.1 Các thành phần của mạch

Mạch giao tiếp Ethernet sử dụng các thành phần:

PIC16F877A.

ENC28J60.

RJ45 tích hợp biến áp.

74LS08 nhằm mục đích chuyển mức điện áp từ 3.3V sang 5V để ghép nối

ENC28J60 với vi điều khiển.

LCD hiển thị nhiệt độ và dữ liệu gửi xuống từ máy tính.

Cảm biến nhiệt độ môi trường LM35.

4.1.2 Sơ đồ mạch nguyên lý, mạch in

Sơ đồ mạch nguyên lý

Trình bày trong bản A3 đính kèm

Sơ đồ mạch in

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 52

Page 53: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

Hình 27: Sơ đồ mạch in

4.2 Phần mềm

4.2.1 Các hàm dùng cho vi điều khiển PIC16F877A trong MikroC

Với vi điều khiển để thực hiện giao tiếp Ethernet, thư viện của MikroC đã tích hợp

sẵn các hàm, thủ tục, làm đơn giản việc lập trình. Một số hàm cơ bản:

1.Spi_Ethernet_Init: Khởi tạo cho ENC28J60. ENC28J60 được khởi tạo như sau:

Vùng đệm nhận bắt đầu từ địa chỉ 0x0000 và kết thúc tại 0x19AD

Vùng đệm gửi là vùng còn lại, từ 0x19AE đến 0x1FFF

Con trỏ đọc viết RAM đặt ở chế độ tự động tăng giảm khi

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 53

Page 54: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

độ dài lớn nhất của gói tin là 1518

CLKOUT bị vô hiệu hoá

LedA hiển thị trạng thái, ledB hiển thị hoạt động

void Spi_Ethernet_Init(unsigned char *resetPort, unsigned char resetBit,

unsigned char *CSportPtr, unsigned char CSbit, unsigned char *mac, unsigned

char *ip, unsigned char fullDuplex);

resetPort: Địa chỉ cổng có chân reset.

resetBit: chân reset.

CSport: Điạ chỉ cổng có chân chip select.

CSbit: chân chip select.

mac: địa chỉ MAC, phải đặt trong RAM

ip: điạ chỉ IP, phải đặt trong RAM.

fullDuplex: 0 hoặc là 1 ứng với chế độ bán song công hay là song công.

2.Spi_Ethernet_doPacket: Hàm nhận bức điện và xử lý, các yêu cầu ARP và

ICMP sẽ được tự động đáp lại, các gói tin UDP, TCP sẽ được xử lý trong

Spi_Ethernet_UserUDP, Spi_Ethernet_UserTCP.

unsinged char Spi_Ethernet_doPacket();

Giá trị trả về: 0-không có gói tin hoặc xử lý gói tin thành công.

1-quá trình nhận bức điện có lỗi hoặc vùng đệm nhận lỗi

2-nhận bức điện sai địa chỉ ip

3-nhận bức điện không phải phiên bản Ipv4

4-kiểu của bức điện không được định nghĩa trong thư viện

3.Spi_Ethernet_putByte: Hàm lưu một byte vào địa chỉ hiện tại xác định bởi

EWRPT.

void Spi_Ethernet_putByte(unsigned char v);

v: giá trị cần ghi

4.Spi_Ethernet_getByte: hàm đọc 1 byte trong RAM có địa chỉ xác định bởi

ERDPT

unsigned char Spi_Ethernet_getByte();

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 54

Page 55: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

5.Spi_Ethernet_UserTCP: Hàm xử lý gói tin TCP. Hàm này được gọi bởi hàm

Spi_Ethernet_doPacket để xử lý gói tin TCP.

unsigned int Spi_Ethernet_UserTCP(unsigned char *remoteHost, unsigned int

remotePort, unsigned int destPort, unsigned int reqLength);

Giá trị trả về của hàm: là số byte gửi trở lại

remotePort , remoteHost: cổng và số ip của nơi gửi

destPort: số cổng đích

reqLength: độ dài của dữ liệu gửi

6.Spi_Ethernet_UserUDP: Hàm xử lý gói tin UDP. Hàm này được gọi bởi hàm

Spi_Ethernet_doPacket để xử lý gói tin UDP.

unsigned int Spi_Ethernet_UserUDP(unsigned char *remoteHost, unsigned int

remotePort, unsigned int destPort, unsigned int reqLength);

Giá trị trả về của hàm: là số byte gửi trở lại

remotePort , remoteHost: cổng và số ip của nơi gửi

destPort: số cổng đích

reqLength: độ dài của dữ liệu gửi

Ngoài ra còn một số hàm khác như:

7. Spi_Ethernet_putBytes ghi một số byte vào ENC28J60 bắt đầu từ địa chỉ xác

định bởi EWRPT

void Spi_Ethernet_putBytes(unsigned char *ptr, unsigned char n);

ptr: vùng nhớ cần viết vào ENC28J60 RAM

n: số lượng byte cần ghi vào

8. Spi_Ethernet_getBytes đọc một số byte từ ENC28J60 bắt đầu từ địa chỉ addr

void Spi_Ethernet_getBytes(unsigned char *ptr, unsigned int addr, unsigned

char n);

ptr: vùng nhận giá trị

addr: địa chỉ đọc trong RAM ENC28J60

n: số byte đọc

9. Spi_Ethernet_putConstBytes ghi một số byte trong ROM vào ENC28J60

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 55

Page 56: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

void Spi_Ethernet_putConstBytes(const unsigned char *ptr, unsigned char n);

10. Spi_Ethernet_putString

unsigned int Spi_Ethernet_putString(unsigned char *ptr);

11. Spi_Ethernet_putConstString

unsigned int Spi_Ethernet_putConstString(const unsigned char *ptr);

4.2.2 Các hàm API dùng cho PC

Khái niệm về socket:

Trong mô hình mạng, hai máy tính có thể trao đổi thông tin cho nhau thì

cần phải tạo ra kết nối giữa chúng. Vì vậy người ta xây dựng khái niệm socket,

nhằm đơn giản hoá quá trình thiết lập kết nối và trao đổi dữ liệu. Socket dựa trên

giao thức TCP/IP tạo môi trường trung gian cho các ứng dụng và giao thức bên

dưới. Socket được xem là một cấu trúc dữ liệu trừu tượng dùng để tạo ra một kênh

truyền để gửi và nhận dữ liệu giữa các process trong cùng chương trình hay giữa

các máy trong cùng môi trường mạng với nhau.

Quá trình truyền, nhận dữ liệu cần có một bên đóng vai trò server còn bên

kia đóng vai trò client. Đối với TCP thì đầu tiên server phải tạo ra một socket và

chờ đợi các yêu cầu kết nối từ client. Client tạo ra socket cho riêng nó xác định vị

trí server(dựa vào tên của server hay địa chỉ của server trong mạng) và tiến hành

việc kết nối với server, sau khi kết nối được thiết lập thì client và server có thể tiến

hành trao đổi dữ liệu với nhau.

Tóm lại, socket là đầu trao đổi dữ liệu giữa các quá trình, qua đó các ứng

dụng Winsock gửi và nhận dữ liệu qua mạng.

Một TCP/IP socket gồm một địa chỉ IP kết hợp với một port xác định duy

nhất một quá trình liên mạng. Đối với giao thức IP, mỗi bên giao tiếp được gán

một địa chỉ IP đại diện bởi một chuỗi 32 bit, gọi là địa chỉ Ipv4. Ngoài địa chỉ IP

để truy cập máy tính ở xa, một ứng dụng phải biết được số cổng hay port của dịch

vụ để truyền thông với dịch vụ đang chạy trên máy cục bộ hoặc ở xa.

Khi một client muốn truyền thông giao tiếp với server qua giao thức TCP

hay UDP, nó phải dò địa chỉ IP của server song song với số cổng dịch vụ. Khi

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 56

Page 57: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

server muốn lắng nghe kết nối và thu thập nhu cầu của client chúng phải chỉ rõ

một địa chỉ IP và port.

Có hai loại socket:

Stream socket: dựa trên giao thức TCP, việc truyền dữ liệu chỉ thực hiện giữa hai

quá trình đã thiết lập kết nối. Dữ liệu được truyền tin cậy, đúng trình tự và không

lặp lại.

Datagram socket: Dựa trên giao thức UDP, việc truyền dữ liệu không yêu cầu có

sự thiết lập kết nối giữa hai quá trình. Dữ liệu truyền không tin cậy, có thể không

đúng trình tự hoặc lặp lại.

1.Hàm WSAStartup khởi động Windows Sockets.

int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);

Hàm trả về 0 nếu thành công

wVersionRequested: Version yêu cầu của Windows Sockets.

lpWSAData: Nhận lại các thông tin chi tiết của Windows Sockets.

2.Hàm WSACleanup kết thúc Windows Sockets.

int WSACleanup(void);

Hàm trả về giá trị 0 nếu thành công.

3. Hàm socket tạo một socket.

SOCKET socket (int af, int type, int protocol) ;

af: họ địa chỉ

type: kiểu của socket

4. Hàm close kết thúc một socket

int closesocket (SOCKET s );

Hàm trả về 0 nếu thành công

5.Hàm accept hàm chấp nhận yêu cầu kết nối từ client

SOCKET accept(SOCKET s, struct sockaddr FAR * addr, int FAR *addrlen);

Hàm trả về INVALID_SOCKET nếu không thành công

s: Socket đang ở trạng thái listen. Kết nối được tạo ra với socket trả về.

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 57

Page 58: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

addr: chứa địa chỉ của nơi kết nối

addrlen: độ dài của dữ liệu trong addr

6.Hàm connect yêu cầu thiếp lập một kết nối

int connect (SOCKET s, const struct sockaddr *name, int namelen);

s : Một socket chưa kết nối

name: tên của socket cần kết nối

namelen: chiều dài của đối số name

7.Hàm send gửidữ liệu

int send (SOCKET s, const char *buf, int len, int flags );

Hàm trả về số byte đã truyền

s: Socket kết nối

buf: vùng chứa dữ liệu truyền

len: độ dài dữ liệu cần truyền

8.Hàm recv nhận dữ liệu

int recv (SOCKET s, char *buf, int len, int flags );

Hàm trả về số byte nhận được, SOCKET_ERROR chỉ định có lỗi, 0 nếu kết

nối kết thúc

s: socket kết nối

buf: vùng đệm nhận

len: độ lớn của vùng đệm

flag: đặt là 0

9.Hàm bind gán một địa chỉ cho socket

int bind(SOCKET s, const struct sockaddr *addr, int namelen );

Hàm trả về giá trị 0 nếu thành công

s : socket chưa được sử dụng

addr: địa chỉ gán cho socket

namelen: độ dài lớn của addr

10.Hàm setsockopt đặt một số thuộc tính cho socket

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 58

Page 59: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

int setsockopt (SOCKET s, int level, int optname, const char *optval, int optlen

);

Hàm trả về giá trị 0 nếu thành công

s: socket cần thay đổi

level: cấp của tuỳ chọn , có thể ở mức socket, giao thức TCP/UDP, hoặc ở

giao thức IP

optname: thuộc tính cần thay đổi

optval: con trỏ đến vùng đệm chứa giá trị cần đặt

optlen: độ dài của vùng optval

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 59

Page 60: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

4.3 Một số kết quả

Hình 28 : Đo và hiển thị nhiệt độ trên LCD.

Hình 29 : Hiển thị nhiệt độ nhận được trên PC.

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 60

Page 61: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

Hình 30 : Gửi dữ liệu xuống vi điều khiển, sử dụng giao thức TCP

Hình 31:Nhận dữ liệu từ PC, theo giao thức TCP.

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 61

Page 62: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

Hình 32 : Đặt IP và Port mới

Hình 33 : Hiển thị IP và Port mới

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 62

Page 63: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

Hình 34 : Gửi và nhận dữ liệu theo giao thức UDP

Hình 35 : Hiển thị dữ liệu nhận được theo giao thức UDP

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 63

Page 64: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Xây dựng mô hình minh họa

Hình 36: Các lựa chọn của chương trình

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 64

Page 65: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Kết luận và hướng phát triển của đề tài

CHƯƠNG V: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN CỦA

ĐỀ TÀI

5.1. Đánh giá kết quả thực hiện đồ án

Thiết bị điều khiển tích hợp giao diện truyền thông Ethernet, như đã trình

bày trong đồ án là một thiết bị phục vụ tốt cho việc học tập và nghiên cứu của sinh

viên. Việc xây dựng thiết bị liên quan đến nhiều mảng kiến thức, từ những kiến

thức lý thuyết cho đến những kiến thức thực tiễn. Với những cố gắng của nhóm,

chúng em đã thực hiện được những phần sau đây :

Xây dựng được module ghép nối Ethernet, bao gồm cả phần cứng và phần

mềm, giúp cho việc ghép nối thiết bị điều khiển với mạng Ethernet đơn

giản.

Trong module ghép nối Ethernet đã được tích hợp thêm thiết bị đo nhiệt độ,

như là một ứng dụng nhỏ trong việc truyền thông theo chuẩn Ethernet.

Xây dựng phần mềm trên PC giúp người sử dụng dễ dàng giám sát, gửi dữ

liệu xuống đối tượng phía dưới hay là nhận dữ liệu từ dưới gửi lên.

Tuy nhiên, đồ án vẫn còn một số vấn đề như sau :

Việc sử dụng, làm chủ chưa được hoàn toàn.

Ứng dụng của đồ án mới dừng lại ở mức đơn giản do điều kiện thời gian và

cơ sở vật chất.

5.2. Hướng phát triển của đồ án

Thiết bị điều khiển tích hợp giao diện truyền thông Ethernet là một ứng

dụng hay và có tính chất mở, khả năng ứng dụng thực tế cao. Trong đồ án mới chỉ

dừng lại ở việc thực hiện truyền thông theo chuẩn Ethernet và ứng dụng nhỏ là đo

và truyền nhiệt độ hay là dữ liệu . Việc tiếp tục phát triển đồ án với những ứng

dụng lớn hơn là rất cần thiết như ứng dụng vào phòng điều khiển giám sát tốc độ

động cơ của phòng điều khiển…

Vì vậy, đồ án có thể phát triển thêm để có những ứng dụng thực tế hơn nữa.

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 65

Page 66: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Kết luận và hướng phát triển của đề tài

TÀI LIỆU THAM KHẢO

[1] PGS.TS Hoàng Minh Sơn : Mạng truyền thông công nghiệp, NXB Khoa

học kỹ thuật 2006.

[2] Help mikroC.

[3] MSDN library.

[4] PIC16F877X, ENC28J60, LM35 datasheet.

[5] www.microchip.com

[6] www.dientuvietnam.net

[7] www.picvietnam.net

[8] http://vi.wikipedia.org

[9] Nguyễn Quốc Cường, Hoàng Đức Hải : Internetworking với TCP/IP

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 66

Page 67: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Kết luận và hướng phát triển của đề tài

Phụ lục

1. Chương trình trên vi điều khiển PIC16F877A#define PORT_SD 20000

unsigned char dcMac[6]= {0x11, 0x11, 0x11, 0x11,0x11,0x11};

unsigned char dcIP[4]= {10,0,0,10};

unsigned int port = PORT_SD;

unsigned iNhietdo;

unsigned char cDem = 0;

unsigned char pDemNhietdo[8];

unsigned char cVtNhietdo;

char strNhietdo[6];

char cChedo;

void interrupt(){

if(INTCON.TMR0IF){

cDem++;

INTCON.TMR0IF = 0;

}

}

void XoaSpace (char *str){

char j,i= 0;

char ddstr;

while (str[i]== ' ') i++;

ddstr = strlen(str)-i;

for(j= 0; j< ddstr; j++){

str[j]= str[j+i];

}

while (j< ddstr+i) str[j++]= ' ';

}

void VietBandau(){

Lcd8_Out(1,1,"Do an tot nghiep");

Lcd8_Out(2,1,"Nhiet do:");

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 67

Page 68: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Kết luận và hướng phát triển của đề tài

}

void main () {

unsigned temp;

char i;

cChedo= 1;

TRISA.F0= 1;

TMR0 = 0;

OPTION_REG = 0x07;

INTCON = 0xA0;

TRISD = 0;

TRISE = 0;

ADCON1 = 0xAE;

Lcd8_Config(&PORTE,&PORTD,0,2,1,7,6,5,4,3,2,1,0);

VietBandau();

Spi_Init();

SPi_Ethernet_Init(&PORTC,0, &PORTC, 1, dcMac, dcIP, 1 );

iNhietdo = 0;

memset(pDemNhietdo, 0, sizeof(pDemNhietdo));

cVtNhietdo = 0;

while (1) {

Spi_Ethernet_doPacket();

if (cDem == 10){

pDemNhietdo[cVtNhietdo] = (unsigned char) (ADC_Read(0) * 500L/1023);

cVtNhietdo++;

if (cVtNhietdo==8) cVtNhietdo = 0;

temp = 0;

for(i=0; i<8; i++) temp = temp+ pDemNhietdo[i];

iNhietdo = temp >> 3;

if(cChedo== 2){

Lcd8_cmd(LCD_CLEAR);

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 68

Page 69: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Kết luận và hướng phát triển của đề tài

VietBandau();

cChedo =1;

}

if(cChedo==1){

wordToStr (iNhietdo, strNhietdo);

XoaSpace (strNhietdo);

Lcd8_Out (2,11,strNhietdo);

Lcd8_Out (2,13,"(C)");

} else if(cChedo==3){

SPi_Ethernet_Init(&PORTC,0, &PORTC, 1, dcMac, dcIP, 1 );

cChedo = 0;

//Lcd8_Out (1,1,"IP:");

Lcd8_Cmd(LCD_CLEAR);

for(i=0; i<4; i++){

intToStr(dcIP[i],strNhietdo);

XoaSpace (strNhietdo);

strNhietdo[3] = 0;

if(i==0) Lcd8_Out(1,1,strNhietdo); else Lcd8_Out_Cp(strNhietdo);

if(i!= 3) Lcd8_Out_Cp(".");

}

wordToStr(port,strNhietdo);

XoaSpace(strNhietdo);

Lcd8_Out(2,1,strNhietdo);

}

cDem = 0;

}

}

}

unsigned int Spi_Ethernet_UserTCP (unsigned char *remoteHost, unsigned int remotePort,

unsigned int localPort, unsigned int reqlength){

char cCommand;

char i;

if(localPort!= port) return 0;

cCommand = Spi_Ethernet_getByte();

if(cCommand== 0){

Spi_Ethernet_putByte((iNhietdo>>8) & 0xff);

Spi_Ethernet_putByte(iNhietdo & 0xff);

return 2;

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 69

Page 70: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Kết luận và hướng phát triển của đề tài

}else if(cCommand==255){

cChedo = 2;

cDem = 10;

}else if(cCommand==254){

cChedo = 3;

for(i=0; i<4; i++)

dcIP[i]= Spi_Ethernet_getByte();

port = Spi_Ethernet_getByte()*256+Spi_Ethernet_getByte();

}else {

cChedo = 0;

Lcd8_Cmd(LCD_CLEAR);

Lcd8_Chr(1,1, cCommand);

for(i= 1; i<reqlength-1; i++){

cCommand = Spi_Ethernet_getByte();

if(cCommand!= 0) Lcd8_Chr_Cp(cCommand);

else{

cCommand = Spi_Ethernet_getByte();

i++;

Lcd8_Chr(2,1,cCommand);

}

}

}

return 0;

}

unsigned int Spi_Ethernet_UserUDP (unsigned char *remoteHost, unsigned int remotePort,

unsigned int localPort, unsigned int reqLength){

char c;

unsigned char i;

if(localPort==port){

c= Spi_Ethernet_getByte();

if(c==255){

cChedo = 2;

cDem = 10;

}else {

if(c!= 0){

cChedo = 0;

Lcd8_cmd(LCD_CLEAR);

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 70

Page 71: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Kết luận và hướng phát triển của đề tài

Lcd8_Chr(1,1,c);

if(isUpper(c)) Spi_Ethernet_putByte(tolower(c));

else Spi_Ethernet_putByte(toupper(c));

for(i= 1; i< reqLength; i++){

c= Spi_Ethernet_getByte();

if(i==16) Lcd8_Chr(2,1,c); else Lcd8_Chr_Cp(c);

if(isUpper(c)) Spi_Ethernet_putByte(tolower(c));

else Spi_Ethernet_putByte(toupper(c));

}

return reqLength;

}

}

}

return 0;

}

2. Chương trình trên PC#include "DA_Std.h"#define WM_READ WM_USER#define ID_TIMER 1#define PORT_DATA 20000

HINSTANCE hInst;HWND hDlgDAEthernet;

BOOL bUsedTCP = TRUE;IN_ADDR szHostIP = {10,0,0,10};USHORT uPort = PORT_DATA;UINT iTimerUpdate = 2000;

BOOL bConnect= FALSE;unsigned char szMessage[100];WSADATA WSADat;SOCKADDR_IN sockaddrHost,sockaddrLocal;SOCKET sockConnect,sockConnectUDP;

int iTempe = 0;

void SetSockAddr(){sockaddrLocal.sin_family = AF_INET;sockaddrLocal.sin_addr.s_addr = INADDR_ANY;sockaddrLocal.sin_port= htons (uPort);sockaddrHost.sin_family = AF_INET;sockaddrHost.sin_addr = szHostIP; //inet_addr (szHostIP);sockaddrHost.sin_port = htons (uPort);

}

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 71

Page 72: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Kết luận và hướng phát triển của đề tài

int ConnectTCP(){int tempval;SetSockAddr();sockConnect = socket (AF_INET, SOCK_STREAM, 0);if (sockConnect == INVALID_SOCKET) {

return WSAGetLastError();}bind (sockConnect, (LPSOCKADDR)&sockaddrLocal, sizeof(sockaddrLocal));if (connect (sockConnect, (LPSOCKADDR) &sockaddrHost, sizeof(sockaddrHost))==

SOCKET_ERROR){tempval = WSAGetLastError();closesocket (sockConnect);return tempval;

}if (WSAAsyncSelect (sockConnect, hDlgDAEthernet, WM_READ, FD_READ) ==

SOCKET_ERROR){tempval = WSAGetLastError();WSAAsyncSelect (sockConnect, hDlgDAEthernet, 0, 0);return tempval;

}tempval = TRUE;if(setsockopt(sockConnect, IPPROTO_TCP,TCP_NODELAY, (LPCSTR)&tempval,

sizeof(tempval)));tempval = TRUE;setsockopt(sockConnect, SOL_SOCKET, SO_DONTLINGER,(LPCSTR)&tempval,

sizeof(tempval));return 0;

}

int ConnectUDP(){SetSockAddr();sockConnectUDP = socket (AF_INET, SOCK_DGRAM, 0);if (sockConnect == INVALID_SOCKET) {

return WSAGetLastError();}bind (sockConnectUDP, (LPSOCKADDR)&sockaddrLocal, sizeof(sockaddrLocal));return 0;

}

void GetTemperature(){char pCommand[6] = {0,0,0,0,0,0}; ConnectTCP();send(sockConnect, (LPCSTR)&pCommand, 6, 0);

}

void Swap(unsigned char * n1, unsigned char * n2){unsigned char t;t = *n1; *n1= *n2; *n2 = t;

}

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 72

Page 73: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Kết luận và hướng phát triển của đề tài

INT_PTR APIENTRY DlgConfigProc(HWND hDlg, UINT uMsg, UINT wParam, LONG lParam){

unsigned int t;BOOL bTransSucc;switch(uMsg){case WM_INITDIALOG:

CheckRadioButton(hDlg, IDC_TCP,IDC_UDP,bUsedTCP?IDC_TCP:IDC_UDP);

SendDlgItemMessage(hDlg,IDC_TARGETIP,IPM_SETADDRESS,0, MAKEIPADDRESS(szHostIP.s_net,szHostIP.s_host,szHostIP.s_lh,szHostIP.s_impno));

SetDlgItemInt(hDlg,IDC_PORT,(unsigned int)uPort,FALSE);SetDlgItemInt(hDlg,IDC_TIMER,iTimerUpdate,FALSE);break;

case WM_COMMAND:switch(LOWORD(wParam)){case IDOK:

if(IsDlgButtonChecked(hDlg, IDC_TCP)==BST_CHECKED) bUsedTCP = TRUE;

else bUsedTCP = FALSE;SendDlgItemMessage(hDlg,IDC_TARGETIP,IPM_GETADDRESS, 0,

(long)&szHostIP);Swap(&szHostIP.s_impno,&szHostIP.s_net);Swap(&szHostIP.s_lh,&szHostIP.s_host);//t = GetDlgItemInt(hDlg,IDC_PORT,&bTransSucc,FALSE);if(bTransSucc && t <= 65535)

uPort= t; else{

SetFocus(GetDlgItem(hDlg,IDC_PORT));SendDlgItemMessage(hDlg,IDC_PORT,EM_SETSEL,0,-1);MessageBox(hDlg,"Port number is invalid","DA

Ethernet",MB_OK|MB_ICONEXCLAMATION);break;

}t = GetDlgItemInt(hDlg,IDC_TIMER,&bTransSucc,FALSE);if(bTransSucc && t <= 65535){

iTimerUpdate = t;} else {

SetFocus(GetDlgItem(hDlg,IDC_TIMER));SendDlgItemMessage(hDlg,IDC_TIMER,EM_SETSEL,0,-1);MessageBox(hDlg,"Temperature time update is invalid","DA

Ethernet",MB_OK|MB_ICONEXCLAMATION);break;

}KillTimer(hDlgDAEthernet, ID_TIMER);SetTimer(hDlgDAEthernet, ID_TIMER, iTimerUpdate, NULL);EndDialog(hDlg,IDOK);break;

case IDCANCEL:EndDialog(hDlg,IDCANCEL);

}

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 73

Page 74: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Kết luận và hướng phát triển của đề tài

}return 0;

}

INT_PTR APIENTRY DlgAboutProc(HWND hDlg,UINT uMsg, UINT wParam, LPARAM lParam){

switch(uMsg){case WM_LBUTTONDOWN:case WM_COMMAND:

EndDialog(hDlg,0);return TRUE;

}return 0;

}

void EnableSendData(BOOL bEnable){EnableWindow(GetDlgItem(hDlgDAEthernet,IDC_STATIC_LCDROW1),bEnable);EnableWindow(GetDlgItem(hDlgDAEthernet,IDC_STATIC_LCDROW2),bEnable);EnableWindow(GetDlgItem(hDlgDAEthernet,IDC_LCDROW1),bEnable);EnableWindow(GetDlgItem(hDlgDAEthernet,IDC_LCDROW2),bEnable);

}

void EnableSetIP(BOOL bEnable){EnableWindow(GetDlgItem(hDlgDAEthernet,IDC_STATIC_IPSET),bEnable);EnableWindow(GetDlgItem(hDlgDAEthernet,IDC_STATIC_PORTSET),bEnable);EnableWindow(GetDlgItem(hDlgDAEthernet,IDC_IPSET),bEnable);EnableWindow(GetDlgItem(hDlgDAEthernet,IDC_PORTSET),bEnable);

}

BOOL APIENTRY DlgDAEthernetProc(HWND hDlg, UINT uMsg, UINT wParam, LONG lParam){

int temp;char szLcdRow1[17];char szLcdRow2[17];static LPSTR szList[] = {"Temperature", "Data", "Set IP"};static char cExe =0;char i;INITCOMMONCONTROLSEX icce

={sizeof(INITCOMMONCONTROLSEX),ICC_INTERNET_CLASSES};

switch (uMsg) {case WM_INITDIALOG:

InitCommonControlsEx(&icce);

SendMessage(GetDlgItem(hDlg,IDC_LCDROW1),EM_LIMITTEXT,16,0);SendMessage(GetDlgItem(hDlg,IDC_LCDROW2),EM_LIMITTEXT,16,0);SetDlgItemText(hDlg,IDC_TEMPERATURE,"- - - (C)");

if (WSAStartup (0x0101, &WSADat)){

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 74

Page 75: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Kết luận và hướng phát triển của đề tài

MessageBox(hDlg,"Error in startup winsock","DAEthernet",MB_OK|MB_ICONERROR);

DestroyWindow(hDlg);PostQuitMessage(0);

} else {

wsprintf(szMessage,"%s is running",WSADat.szDescription);SetDlgItemText(hDlg,IDC_STATUS,szMessage);

}

SetTimer(hDlg, ID_TIMER, iTimerUpdate,NULL);

for(i=0; i<3; i++) SendDlgItemMessage(hDlg,IDC_DISPLAY,CB_ADDSTRING,0,

(long)szList[i]);SendDlgItemMessage(hDlg,IDC_DISPLAY, CB_SETCURSEL,0,0);

break;

case WM_READ:if(WSAGETSELECTERROR(lParam)!= 0) break;if(WSAGETSELECTEVENT(lParam)==FD_READ){

temp = recv(sockConnect, szMessage, sizeof(szMessage),0);if(temp==0){

SetDlgItemText(hDlg,IDC_STATUS,"Connect broken");} else {

iTempe= (szMessage[0]*256+szMessage[1]);

wsprintf(szMessage,"%d (C)",iTempe);SetDlgItemText(hDlg, IDC_TEMPERATURE, szMessage);

}}break;

case WM_TIMER:if(bConnect)

GetTemperature();break;

case WM_COMMAND:switch (LOWORD(wParam)){case IDC_DISPLAY:

if(HIWORD(wParam)== LBN_SELCHANGE){cExe=

(char)SendDlgItemMessage(hDlg,IDC_DISPLAY,CB_GETCURSEL,0,0);switch(cExe){case 0:

EnableSendData(FALSE);EnableSetIP(FALSE);break;

case 1:EnableSendData(TRUE);

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 75

Page 76: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Kết luận và hướng phát triển của đề tài

EnableSetIP(FALSE);break;

case 2:EnableSendData(FALSE);EnableSetIP(TRUE);

}}break;

case IDC_ABOUT:DialogBox(hInst,"ABOUT",hDlg,(DLGPROC)DlgAboutProc);break;

case IDOK:case IDCANCEL:

KillTimer(hDlg, ID_TIMER);DestroyWindow(hDlg);PostQuitMessage(0);break;

case IDC_CONFIG:if(DialogBox(hInst,"CONFIGETHERNET",hDlg,(DLGPROC)

DlgConfigProc)== IDOK){

EnableWindow(GetDlgItem(hDlg,IDC_CONNECT),bUsedTCP);EnableWindow(GetDlgItem(hDlg,IDC_SEND),!bUsedTCP);

}break;

case IDC_SEND:if(cExe==0){

szMessage[0]= (char)255;szMessage[1]= 0;temp = 2;

} else if(cExe==1){if(bUsedTCP){

memset(szLcdRow1,0,sizeof(szLcdRow1));memset(szLcdRow2,0,sizeof(szLcdRow2));

GetDlgItemText(hDlg,IDC_LCDROW1,szLcdRow1,sizeof(szLcdRow1));

GetDlgItemText(hDlg,IDC_LCDROW2,szLcdRow2,sizeof(szLcdRow2));

memset(szMessage,0,sizeof(szMessage));strcpy(szMessage,szLcdRow1);

memcpy(szMessage+strlen(szLcdRow1)+1,szLcdRow2,strlen(szLcdRow2)+1);temp = strlen(szLcdRow1)+strlen(szLcdRow2)+2;

}else{

GetDlgItemText(hDlg,IDC_LCDROW1,szMessage,sizeof(szMessage));

GetDlgItemText(hDlg,IDC_LCDROW2,szMessage+strlen(szMessage),sizeof(szMessage));temp = strlen(szMessage);

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 76

Page 77: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Kết luận và hướng phát triển của đề tài

}}else{

//int i;//PIP_ADAPTER_INFO pai;//ULONG outbuflen= sizeof(pai); unsigned short port;szMessage[0]= 254;SendDlgItemMessage(hDlg, IDC_IPSET,IPM_GETADDRESS,

0, (long)(szMessage+1));port = GetDlgItemInt(hDlg, IDC_PORTSET,NULL,FALSE);

SetDlgItemInt(hDlg,IDC_PORTSET, port,0);Swap(szMessage+1,szMessage+4);Swap(szMessage+2,szMessage+3);szMessage[5] = port/256;szMessage[6] = port%256;temp= 7;

//GetAdaptersInfo(&pai,&outbuflen);//pai.IpAddressList.IpMask.String

}if(bUsedTCP){

temp = send(sockConnect,szMessage,temp,0);if(cExe==2){

closesocket(sockConnect);bConnect = FALSE;SetDlgItemText(hDlg,IDC_CONNECT,"Connect");

EnableWindow(GetDlgItem(hDlg,IDC_CONFIG),TRUE);}

}else{ConnectUDP();temp = sendto(sockConnectUDP,szMessage,temp,0,

(LPSOCKADDR)&sockaddrHost,sizeof(sockaddrHost));if(cExe==1){

temp = sizeof(sockaddrHost);recvfrom(sockConnectUDP, szMessage,

sizeof(szMessage),0,(LPSOCKADDR)&sockaddrHost,&temp);wsprintf(szMessage+strlen(szMessage),"\nReceive %d

bytes",temp);SetDlgItemText(hDlg, IDC_STATUS, szMessage);

} else if(cExe==2){ closesocket(sockConnectUDP);

}break;

}wsprintf(szMessage, "Send %d bytes to %d.%d.%d.

%d",temp,szHostIP.s_net,szHostIP.s_host,szHostIP.s_lh,szHostIP.s_impno);SetDlgItemText(hDlg,IDC_STATUS,szMessage);break;

case IDC_CONNECT:

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 77

Page 78: Giao Dien Truyen Thong Dieu Khien Voi Ethernet

Kết luận và hướng phát triển của đề tài

bConnect = !bConnect;if(bConnect){

if((temp=ConnectTCP())== 0){wsprintf (szMessage, "Connection to %d.%d.%d.

%d",szHostIP.s_net,szHostIP.s_host,szHostIP.s_lh,szHostIP.s_impno);SetDlgItemText(hDlg, IDC_STATUS, szMessage);

} else{wsprintf(szMessage,"Socket error %d",temp);SetDlgItemText(hDlg,IDC_STATUS,szMessage);closesocket(sockConnect);bConnect = 0;

}} else {

closesocket(sockConnect);SetDlgItemText(hDlg, IDC_STATUS,"Disconnection...");

}

SetDlgItemText(hDlg,IDC_CONNECT,bConnect?"Disconnect":"Connect");

EnableWindow(GetDlgItem(hDlg,IDC_CONFIG),!bConnect);EnableWindow(GetDlgItem(hDlg,IDC_SEND),bConnect);

}return TRUE;

}return FALSE;

}

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd){

MSG msg;hInst = hInstance;hDlgDAEthernet = CreateDialog(hInstance, "DAETHERNET", NULL, (DLGPROC)

DlgDAEthernetProc);SetClassLong(hDlgDAEthernet, GCL_HICON,

(LONG)LoadIcon(hInstance,"ICONDAETHERNET"));

while (GetMessage(&msg, NULL, 0, 0)){if(!IsDialogMessage(hDlgDAEthernet, &msg)){

TranslateMessage(&msg);DispatchMessage(&msg);

}}return msg.wParam;

}

Trác Quang Hòa – Nguyễn Tiến Tùng – ĐKTĐ 1 – K49 78