#include //////////////////////////////////////////////////////////////////////////////// // ATmega8: // начальное: RC - 1 МHz: Low E1; Higt D9; // RC - 8 МHz: Low E4; Higt D9; // кварц - 8 МHz: Low EF; Higt C9 (CKOPT -on); XTAL2 – выход--V // кварц - 8 МHz: Low EF; Higt D9 (CKOPT -off); // XTAL1 – вход: Low E0; Higt D9 //////////////////////////////////////////////////////////////////////////////// // ATmega328: // начальное: RC -1 МHz: Higt D9; Ext 07; Lok 3F; Low 62 // RC -8 МHz: Higt D9; Ext 07; Lok 3F; Low E2 // кварц - 20 МHz: Higt D9; Ext 07; Lok 3F; Low E7(CKOUT -off); XTAL2 – выход--V // кварц - 20 МHz: Higt D9; Ext 07; Lok 3F; Low E7(CKOUT -on); CKOUT – выход //////////////////////////////////////////////////////////////////////////////// // W5500: // 3,3 V - 80 mA. - 10 МБит/c // 3,3 V - 135 mA. - 100 МБит/c // Socket_0 - MACRAW // Socket_1 - UDP // Socket_2 - TCP //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////// Socket_0 - MACRAW: // MACRAW // len | Data // len - 0x00 0x00(len=len+Data). /////////////////////////////////////////////// ICMP (ping): unsigned char ICMP[74]={ //Destination MAC: // 0...5 //0xff,0xff,0xff,0xff,0xff,0xff, //Destination MAC: FF:FF:FF:FF:FF:FF //Source MAC: // 6...11 0x00,0x08,0xdc,0x01,0x02,0x03, //Source MAC: 00:08:dc:01:02:03 //Type: 0x08,0x00, // 12,13- Type: IP (0x0800) /////////////////////////////////////////////// Protocol IP: 0x45, // 14- Version: 4, Header length: 20 bytes 0x00, // 15- Differentiated Services Field... 0x00,0x3c, // 16,17- Total Length: 60 0x00,0x00, // 18,19- Identification: 0 0x00,0x00, // 20,21- Fragment offset: 0 0x80, // 22- Time to live: 128 0x01, // 23- Protocol: ICMP (1) 0x00,0x00, // 24,25- Header checksum IP: 0xc0,0xa8,0x00,0x03, // 26...29- Source IP: 192.168.0.3 0xc0,0xa8,0x00,0x65, // 30...33- Destination IP: 192.168.0.101 /////////////////////////////////////////////// Protocol ICMP: 0x08, // 34- Type: 8 (Echo (ping) request) 0x00, // 35- Code: 0 0x00,0x00, // 36,37- Checksum ICMP: // начальное =0 0x00,0x00, // 38,39- Identifier (BE): 0 0x00,0x00, // 40,41- Sequence number (BE): 0 //////////////////////////// 42...73- Data(32 bytes): 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69 }; /////////////////////////////////////////////// Header checksum IP: //Header checksum IP = 0x00+0x00 // сброс Header checksum IP //Version + Differentiated + Total Length + Identification + Fragment offset + //Time to live + Protocol + Header checksum IP + Source IP + Destination IP //0x45+0x00+0x00+0x3c+0x00+0x00+0x00+0x00+ //0x80+0x01+0x00+0x00+0xc0+0xa8+0x00+0x03+0xc0+0xa8+0x00+0x65 //Header checksum IP =~Header checksum IP //Проверка КС: расчётная == FFFF /////////////////////////////////////////////// checksum ICMP: //Type + Code + checksum ICMP + Identifier + Sequence + Data //0x08+0x00+0x00+0x00+0x00+0x00+0x00+0x00+ //0x61+0x62+0x63+0x64+0x65+0x66+0x67+0x68+ //0x69+0x6a+0x6b+0x6c+0x6d+0x6e+0x6f+0x70+ //0x71+0x72+0x73+0x74+0x75+0x76+0x77+0x61+ //0x62+0x63+0x64+0x65+0x66+0x67+0x68+0x69 //checksum ICMP =~checksum ICMP //Проверка КС: расчётная == FFFF //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// void main(void) { //////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////// checksum_ICMP (ping): /* checksum_ICMP = 0; ICMP[36] = 0; // начальное checksum_ICMP =0 ICMP[37] = 0; // начальное checksum_ICMP =0 /////////////////////////////////////////////// 34...73 for (x=34;x<74;x+=2) { bufer_checksum_ICMP = ICMP[x]; x1 = x + 1; bufer_checksum_ICMP = (bufer_checksum_ICMP<<8)|ICMP[x1]; checksum_ICMP += bufer_checksum_ICMP; if (checksum_ICMP & 0xffff0000) { checksum_ICMP &= 0x0000ffff; checksum_ICMP += 0x00000001; }; }; /////////////////////////////////////////////// checksum_ICMP: checksum_ICMP = ~checksum_ICMP; ICMP[36] = (checksum_ICMP>>8); ICMP[37] = checksum_ICMP; */ }