Module kết nối mạng lan ENC28J60

Mã số sản phẩm : 1701047
95.000₫

  1. Module Ethernert ENC28J60

  2. Giới thiệu:

  3. Module Ethernert ENC28J60 là module hỗ trợ giao tiếp mạng Ethernet ở lớp vật lý tương ứng trong mô hình OSI(mô hình 7 lớp). Nó hỗ trợ tuyền song công trên kênh truyền có băng thông từ 10-20Mbps. Đồng thời nhằm tránh xung đột trên kênh truyền, ENC28J60 làm việc với chế độ CSMA/CD để phát hiện và tối thiểu hóa xung đột. ENC28J60 được giao tiếp với các thiết bị khác theo chuẩn SPI

  4. Thông số kỹ thuật:

 - Sử dụng chip ENC 28J60 Ethernet kiểu sop28 chân. 

 - Chuẩn giao tiếp SPI.

 - Sử dụng điện áp 3.3 V.

 - Tần số hoạt động 25 MHZ.  

 - Đầu nối rj45 hr911105a

  1. Sơ đồ chân IC ENC28J60:

 

  1. Sơ đồ ghép nối module với vi điều khiển:

 

 

  1. II. Lập trình ứng dụng chat server sử dụng module ENC28J60 và vi điều khiển STM32F103C8T6:

  2. 1.Giao thức truyền tin TCP/IP(xem chi tiết trong file lý thuyết ethernet)

  3. - Giao thức TCP (Transmission Control Protocol - "Giao thức điều khiển truyền vận") là một trong các giao thức cốt lõi của bộ giao thức TCP/IP. Sử dụng TCP, các ứng dụng trên các máy chủ được nối mạng có thể tạo các "kết nối" với nhau, mà qua đó chúng có thể trao đổi dữ liệu hoặc các gói tin. Giao thức này đảm bảo chuyển giao dữ liệu tới nơi nhận một cách đáng tin cậy và đúng thứ tự. TCP còn phân biệt giữa dữ liệu của nhiều ứng dụng (chẳng hạn, dịch vụ Web và dịch vụ thư điện tử) đồng thời chạy trên cùng một máy chủ.

  4. - TCP hỗ trợ nhiều giao thức ứng dụng phổ biến nhất trên Internet như WWW, thư điện tử và chat.

  5. - Trong bộ giao thức TCP/IP, TCP là tầng trung gian giữa giao thức IP bên dưới và một ứng dụng bên trên. Các ứng dụng thường cần các kết nối đáng tin cậy kiểu đường ống để liên lạc với nhau, trong khi đó, giao thức IP không cung cấp những dòng kiểu đó, mà chỉ cung cấp dịch vụ chuyển gói tin không đáng tin cậy. TCP làm nhiệm vụ của tầng giao vận trong mô hình OSI đơn giản của các mạng máy tính.

    1. + Mô hình truyền tin TCP

    2. Cấu trúc gói tin TCP:

    3. ​Source Por (16 bits): Số hiệu cổng TCP của trạm nguồn.

      1. --> Data offset (4 bit): số lượng bội của 32 bit (32 bit words) trong TCP header (tham số này chỉ ra vị trí bắt đầu của nguồn dữ liệu).

      2. --> Acknowledgment Number (32 bit): số hiệu của segment tiếp theo mà trạm nguồn đang chờ để nhận. Ngầm ý báo nhận tốt (các) segment mà trạm đích đã gửi cho trạm nguồn.

      3. --> Sequence Number (32 bit): số hiệu của byte đầu tiên của segment trừ khi bit SYN được thiết lập. Nếy bit SYN được thiết lập thì Sequence Number là số hiệu tuần tự khởi đầu (ISN) và byte dữ liệu đầu tiên là ISN+1.

      4. --> Destination Port (16 bit): Số hiệu cổng TCP của trạm đích

      5. --> Reserved (6 bit): dành để dùng trong tương lai

      6. --> Control bit (các bit điều khiển):

      7. --> URG: Vùng con trỏ khẩn (Ucgent Poiter) có hiệu lực.

      8. --> ACK: Vùng báo nhận (ACK number) có hiệu lực.

      9. --> PSH: Chức năng PUSH.

      10. --> RST: Khởi động lại (reset) liên kết.

      11. --> SYN: Đồng bộ hóa số hiệu tuần tự (sequence number).

      12. --> FIN: Không còn dữ liệu từ trạm nguồn.

      13. --> Window (16 bit): cấp phát credit để kiểm soát nguồn dữ liệu (cơ chế cửa sổ). Đây chính là số lượng các byte dữ liệu, bắt đầu từ byte được chỉ ra trong vùng ACK number, mà trạm nguồn đã saün sàng để nhận.

      14. --> Checksum (16 bit): mã kiểm soát lỗi cho toàn bộ segment (header + data)

      15. --> Urgemt Poiter (16 bit): con trỏ này trỏ tới số hiệu tuần tự của byte đi theo sau dữ liệu khẩn. Vùng này chỉ có hiệu lực khi bit URG được thiết lập.

      16. --> Options (độ dài thay đổi): 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.

      17. --> Paddinh (độ dài thay đổi): 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 bit. Phần thêm này gồm toàn số 0.

      18. --> TCP data (độ dài thay đổi): chứa dữ liệu của tầng trên, có độ dài tối đa ngầm định là 536 byte. Giá trị này có thể điều chỉnh bằng cách khai báo trong vùng options.

  6. 2. Xây dựng chương trình chat server:

  7. Cấu hình  SPI cho MCU:

void SPI1_Init(void){

   SPI_InitTypeDef SPI_InitStructure;

   GPIO_InitTypeDef GPIO_InitStructure;

 

   /* Enable SPI1 and GPIOA clocks */

   RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);

   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE);

 

 

   /* Configure SPI1 pins: NSS, SCK, MISO and MOSI */

   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;

   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

   GPIO_Init(GPIOA, &GPIO_InitStructure);

 

   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;

   GPIO_InitStructure.GPIO_Mode =  GPIO_Mode_IPU;   //ÉÏÀ­ÊäÈë

   GPIO_Init(GPIOA, &GPIO_InitStructure);

 

   /* SPI1 configuration */

   SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;

   SPI_InitStructure.SPI_Mode = SPI_Mode_Master;

   SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;

   SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;

   SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;

   SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;

   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;

   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;

   SPI_InitStructure.SPI_CRCPolynomial = 7;

   SPI_Init(SPI1, &SPI_InitStructure);

 

   /* Enable SPI1  */

   SPI_Cmd(SPI1, ENABLE);

}

  1.  Tạo server kết nối với Client sử dụng giao thức TCP

    1. - Khởi tạo Enc28j60 với địa chỉ IP 192.168.1.100 & Port 80

, địa chỉ Mac 54:55:58:10:00:24.

   init_ip_arp_udp_tcp(mymac, myip, mywwwport);

   enc28j60PhyWrite(PHLCON, 0x476);

   enc28j60clkout(2);

  1. Kiểm tra có gói tin mới:

plen = enc28j60PacketReceive(BUFFER_SIZE, buf);

   

      if (plen == 0)

      {

         continue;

      }

  • Kiểm tra ip & mac đích chứa trong gói tin sử dụng ARP:

if (eth_type_is_arp_and_my_ip(buf, plen))

      {

         make_arp_answer_from_request(buf);      

         continue;

      }

                             ////////////////check ip

      if (eth_type_is_ip_and_my_ip(buf, plen) == 0)

      {

         continue;

      }

  • Nếu đúng thì gửi lại tin xác nhận với cờ ACK và Syn được bật => đã thiết lập kết nối.

if (buf[IP_PROTO_P] == IP_PROTO_ICMP_V &&

         buf[ICMP_TYPE_P] == ICMP_TYPE_ECHOREQUEST_V)

      {     

         make_echo_reply_from_request(buf, plen);        

         continue;

      }    

      if (buf[IP_PROTO_P] == IP_PROTO_TCP_V &&

         buf[TCP_DST_PORT_H_P] == 0 &&

         buf[TCP_DST_PORT_L_P] == mywwwport)

      {

         if (buf[TCP_FLAGS_P] & TCP_FLAGS_SYN_V)

         {

            make_tcp_synack_from_syn(buf);          

            continue;

         }

         if (buf[TCP_FLAGS_P] & TCP_FLAGS_ACK_V)

         {

            init_len_info(buf);            

            dat_p = get_tcp_data_pointer();

            if (dat_p == 0)

            {

               if (buf[TCP_FLAGS_P] & TCP_FLAGS_FIN_V)

               {                 

                  make_tcp_ack_from_any(buf);

               }              

               continue;

            }

  • Lọc data là chuỗi kí tự trong gói tin nhận được và tạo chuỗi mới có dạng “Hello + chuỗi nhận đc” và gửi lại cho client.

i=0;

j=(TCP_CHECKSUM_L_P + 3);

while(buf[j]>=32 && buf[j]<=122) ///ky tu space & ky tu z

{

 str[i+8]= buf[j];

i++;

j++; 

}

str[i+8]='\0';

/////gui lai du lieu

plen = fill_tcp_data_p(buf, 0, str);

 make_tcp_ack_from_any(buf); //gui ack

 make_tcp_ack_with_data(buf, plen); // gui data

Sản phẩm liên quan