Nghĩa các trường:

Một phần của tài liệu ATMEGA32 GIAO TIẾP VỚI ENC28J60 QUA SPI – AVR WEBSERVER (Trang 28 - 30)

+ Hardware type (2 bytes): cho biết loại địa chỉ phần cứng, đối với địa chỉ MAC của giao thức ethernet thì giá trị này được qui định là "0x0001". ethernet thì giá trị này được qui định là "0x0001".

+ Protocol type (2 bytes): cho biết loại địa chỉ giao thức lớp trên, đối với địa chỉ IP, giá trị này được qui định là “0x0800”. được qui định là “0x0800”.

+ HLEN (1 byte): cho biết chiều dài của địa chỉ vật lý (địa chỉ MAC).+ PLEN (1 byte): cho biết chiều dài của địa chỉ giao thức (địa chỉ IP) + PLEN (1 byte): cho biết chiều dài của địa chỉ giao thức (địa chỉ IP)

+ Operation (2 bytes): cho biết hoạt động đang thực hiện trong gói tin này (request hay reply).+ Sender H/W (hardware ađress, 6 bytes): địa chỉ vật lý của phía gửị + Sender H/W (hardware ađress, 6 bytes): địa chỉ vật lý của phía gửị

+ Sender IP (4 bytes): địa chỉ IP của phía gửị

+ Target H/W (6 bytes): địa chỉ vật lý của phía nhận, nếu chưa biết thì sẽ là chứa toàn 0.+ Target IP (4 bytes): địa chỉ IP của phía nhận. + Target IP (4 bytes): địa chỉ IP của phía nhận.

Vậy ta khai báo cấu trúc gói ARP trong file “packet.h” như sau:Code: Code:

//--- ---

//Cau truc ARP header struct ntARPHeader {

unsigned int hwType; unsigned int protocol; unsigned char hwLen; unsigned char protoLen; unsigned int opcode; struct ntEthAđr shwađr; unsigned long sipađr; struct ntEthAđr dhwađr; unsigned long dipađr; };

#define ARP_OPCODE_REQUEST 1 #define ARP_OPCODE_REPLY 2 #define ARP_HWTYPE_ETH 1

Không có thời gian để viết chi tiết hơn. Bạn nào đọc thấy chỗ nào khó hiểu thì cứ hỏi nhé.

Dù là trên PIC hay AVR hay bất cứ micro controller nào thì cơ chế cũng như nhau thôi (thậm chí trên máy tính thì cũng tương tự), chỉ khác là đối với PIC thì Microchip đã cung cấp đầy đủ bộ thư viện cho các giao thức ethernet, ip, arp, udp, tcp, dhcp, http, không cần phải viết lại như anh đang làm cho AVR. Cơ chế như sau:

- Khi ta mở máy tính lên, mở trình duyệt và gõ vào địa chỉ của webserver (PIC hay AVR gì cũng thế), giả sử ở đây ta gõ vào địa chỉ IP như sau: http://192.168.1.10

- Sau khi nhấn enter thì máy tính của chúng ta sẽ gửi đi một bản tin request của giao thức HTTP (Hyper Text Transfer Protocol, giao thức để truyền/nhận nội dung trang web), thường là HTTP Get thông qua giao thức TCP (với cổng TCP được qui định cho giao thức HTTP là 80) đến địa chỉ webserver trên. - Webserver, ở đây chính là vi điều khiển của chúng ta (PIC hay AVR) nhận được bản tin này (tất nhiên bản tin này sẽ đi qua hết các lớp giao thức ethernet, IP, TCP rồi mới đến HTTP). Tại đây vi điều khiển sẽ đọc và phân tích bản tin HTTP request này để biết máy tính đang yêu cầu tải nội dung trang web nàọ - Sau đó vi điều khiển sẽ lấy nội dung trang web này (được soạn thảo theo ngôn ngữ HTML) chứa trên trên flash ROM, nó cũng có thể thêm vào trang web đó một số thông tin (ví dụ đọc giá trị từ các sensor cảm biến nhiệt độ và đưa vào trong trang web), và gửi toàn bộ nội dung trang web thông qua giao thức TCP trở lại cho máy tính. Nếu nội dung trang web lớn nó có thể được gửi đi trên rất nhiều gói tin, vì mỗi gói tin chỉ chứa tối đa 1460 byte dữ liệu mà thôị

- Máy tính nhận nội dung trang web và trình duyệt sẽ hiển thị lên cho chúng ta thấỵ

- Để điều khiển board từ xa qua web, trên trang web ta có thể thiết kế một nút nhấn chẳng hạn. Khi ta nhấn nút này trên trình duyệt, máy tính sẽ gửi đi một bản tin HTTP nữa là HTTP Post, trong bản tin này sẽ chứa các thông tin về trạng thái các nút option hay các giá trị trong các ô edit text có trên trang web. - Vi điều khiển sẽ nhận bản tin HTTP post này, phân tích dữ liệu chứa trong đó để có đáp ứng tương ứng (bật tắt relay chẳng hạn) sau đó nó sẽ gửi trả lại lần nữa nội dung trang web đã cập nhật những thay đổi vừa rồi (ví dụ bật reley thì trên web sẽ có 1 hình tròn đổi sang màu đỏ chẳng hạn). Trình duyệt sẽ update nội dung này lên và ta sẽ thấy được tác động của thao tác điều khiển đó.

Từ từ anh sẽ viết và giải thích tất cả các hoạt động đó trên AVR, trên PIC cũng thế nhưng các hàm được Microchip cung cấp sẵn mà thôị

Thầy cho em hỏi chỗ này, vì vừa đọc em vừa tưởng tượng thức thế cho dễ hiểụ

Trong mỗi frame ethernet đều chứa 2 địa chỉ MAC: một địa chỉ của host gửi và 1 địa chỉ của host nhận nhận

.

Câu hỏi:Số host truyền nhận trong trường hợp này là bao nhiêu : 2 hay >2 host ? Vì em nghĩ 2 host là TH riêng, 1 host truyền 1 host nhận, thì host nhận check IP là chính nó. host là TH riêng, 1 host truyền 1 host nhận, thì host nhận check IP là chính nó.

Nếu host nhận đc frame mà nó kiểm tra ko phải IP ađ(dst) của nó thì nó sẽ xử lý như thế nào, có phải lúc này IP ađ(dst) là IP broadcast? có phải lúc này IP ađ(dst) là IP broadcast?

Em liên tưởng TCP/IP lúc này xử lý IP như một Router check IP cho cả 1 mạng LAN, ...kết nối với nó. với nó.

Nếu frame được gửi cho tất cả máy tính trong LAN, thì sẽ ko có host đích cụ thể nào ạ?Nếu với HTTP, hay 1 ứng dụng nào khác thì điều này có thể được, nhưng với các ứng Email Nếu với HTTP, hay 1 ứng dụng nào khác thì điều này có thể được, nhưng với các ứng Email chẳng hạn, cần tính bảo mật riêng tư thì IPbroadcast lại ko được- do các máy đều nhận đc frame để xử lí.

EM có vài câu, ko biết đúng sai thế nàỏ

Câu hỏi của em thực ra rất hay, vấn đề này tôi đã không giải thích chi tiết trong phần giao thức ethernet. ethernet.

- Giao thức ethernet chỉ hỗ trợ 2 hình thức truyền: unicast: tức là 1 host gửi, 1 host nhận; và broadcast, tức là 1 host gửi, tất cả các host trong mạng LAN đều nhận. broadcast, tức là 1 host gửi, tất cả các host trong mạng LAN đều nhận.

Một phần của tài liệu ATMEGA32 GIAO TIẾP VỚI ENC28J60 QUA SPI – AVR WEBSERVER (Trang 28 - 30)