ãŸããUARTãšUSBãè©Šãã次ã«ã€ãŒãµããããè©ŠããããšæããŸããã ããããã®æ¬²æ±ã«å¯ŸããŠãç§ã¯èªåã®ããããžã§ã¯ãããæãã€ããŸããã å€ãã®ã¢ã€ãã¢ãããããŠã¹ã®ãããžã§ã¯ãã®åœ¢ã§æ®ã£ãŠããŸãã-ãã®ã¢ã€ãã¢ã¯ãœãããŠã§ã¢éšåã®å®è£ çŽåŸã«æ©ã¿ãŸããã
ãã®æçš¿ããUSBããã€ã¹ãäœãããããŸãã¯ãããããã»ã©é£ãããªãããšãç¥ããããšæã£ããã¹ãŠã®äººã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã ããã«ãç§ã¯ããã«ã·ãã¥ã¬ãŒã¿ãŒã§è©ŠããŠã¿ãããšæããŸããã åå¿è ããåå¿è ãŸã§ãGoogleãéããŠèªæžãå§ãããããã£ãšå€ãã®ããšããããããã£ãšå匷ãããããªã©ã
ã¬ãžã¹ã¿ãã¢ãŒãã«ã€ããŠã¯èª¬æããŸããã ç§ã¯ãããç§ã®ç®ã«ç«ãã€ããå©ãã«ãªããšã¯æããªãã ãããã誰ããèªåèªèº«ã«åœ¹ç«ã€äœããããããšæã£ãŠãããç°¡åãªäŸã§ã¯ããã®éåžžã«é åçãªäœåããã©ãã°ããå¯èœæ§ãé«ããªããŸãïŒãããŠãç§ã«ãšã£ãŠã¯ã»ãšãã©éº»è¬ã§ãïŒã ãããŠãebayã§èµ°ã£ãããäžåœãããããã°ããŒããéã£ãŠããæ¥æ°ãæ°ãå§ããåã«ãä»®æ³ãã€ã¯ãã³ã³ãããŒã©ãŒãè©ŠããŠã¿ãããšãã§ããŸãã
2ã€ã®ç¬ç¹ãªãããŒã¯ãŒã«ããããžã§ã¯ããäœæããããšæããŸãããããã§ãæšæºã®LEDç¹æ» ãããããã»ã©è€éã§ã¯ãããŸããã ã«ããã®äžã«ããããã®ç»åã
ããã¹ãå ã®èª¬æãšã³ãŒãäŸã¯PIC18F4550ãã€ã¯ãã³ã³ãããŒã©çšã§ãã®ã§ãã容赊ãã ãããç§ã¯atmelã䜿çšããŠããŸããã ãŸããSTM8 / 32ã¯8çªç®ã®ããŒãžã§ã³ã§ãæ¬ èœããŠããŸãã
ãã€ã¯ãã³ã³ãããŒã©ãŒã®ã³ãŒãã¯ã Mikroelektronikaã®mikroCã³ã³ãã€ã©ãŒçšã«äœæãããç解ã容æã«ããããã«äœæãããŸãããå°ãªããšãéšåçã«ã¯ããŸããããšæããŸãã
ããããŠã¹ãšMCUã®ãã€ã³ãã£ã³ã°
ããããŠã¹ã¯ããœãããŠã§ã¢ã®åäœãæåã«ãããã¿ã€ãã³ã°ããã³ãã¹ãããããã«äœæãããããã§ãã ããããããããåè·¯ãäœæããéã«è€æ°ã®åçŽåãå¯èœã«ããçç±ã§ãã 以äžã¯ãUART / USBçµç±ã®PCéä¿¡ããã¹ãããããã®çµ¶å¯Ÿã«ååãªãããã§ãã ãã®ãããªã¹ããŒã ã¯ããããŠã¹ã§ã®ã¿æ©èœããããšã«åã³æ³šæãæããããšæããŸãã
ãã¹ãŠã®ãããžã§ã¯ãã¯èšäºã«æ·»ä»ãããŠãããããããã°ã©ã ãã€ã³ã¹ããŒã«ãããšãããã«ãã¹ãŠãè©Šãããšãã§ããŸãã
UïŒSïŒART
ãããã¯ã¯beatãããŠããŸãããããã§ãããäžåºŠèª¬æãããŠãã ããã
ããããã®ä»ã®ä»»æã®ããã°ã©ã ãä»®æ³ãã€ã¯ãã³ã³ãããŒã©ãŒã«æ¥ç¶ããã«ã¯ãããã€ãã®ã¢ã¯ã·ã§ã³ãå®è¡ããå¿ èŠããããŸãã
COMPIMã¢ãžã¥ãŒã«ã¯ä»®æ³ããŒãã䜿çšããŠæ¥ç¶ããŸããå¥ã®ããŒããäœæãã ãã«ã¢ãã ãšããŠæ¥ç¶ããå¿ èŠããããŸã ã
ããã§åœ¹ç«ã€ã®ã¯ç¡æã®ãŠãŒãã£ãªãã£com0comã§ãã
ããã§2ã€ã®ä»®æ³ããŒããäœæããŸããç§ã®å Žåã¯COM 3ãš4ã§ãã1ã€ã¯Proteus COMPIMã«æ¥ç¶ããã2ã€ç®ã¯æ¢ã«ãå€éšãã§äœ¿çšãããŠããŸã
ããã°ã©ã ãŠã£ã³ããŠ
ãããŠãããã¯devmgmt.mscïŒããã€ã¹ãããŒãžã£ïŒã§ã©ã®ããã«èŠãããã§ã
ããã§ããã¹ãŠã®ãã¹ãã®æºåãæŽããŸããã
ãã¹ãããã°ã©ã ãäœæãã
char uart_rd; void main() { UART1_Init(9600); UART1_Write_Text("Hello Habrahabr"); UART1_Write(10); UART1_Write(13); for(;;) { if(UART1_Data_Ready()) { uart_rd = UART1_Read( ); switch(uart_rd) { case 0xD: UART1_Write(10); UART1_Write(13); break; default: UART1_Write(uart_rd); break; } } } }
COMPIMããã€ã¹ãæ§æããŸãïŒå³ã¯ãªãã¯-ããããã£ã®ç·šéïŒã
com0comãCOM3 / COM4ããŒãããšãã¥ã¬ãŒãããããšãæãåºãããŠãã ãã
念ã®ããããã€ã¯ãã³ã³ãããŒã©ãŒã®èšå®ãåçã«æ·»ä»ããŸã
Puttyããªã³ã«ããã·ãªã¢ã«ã¢ãŒãã«ããŠãCOM4ã«æ¥ç¶ããŸãã ä»...ãã¿ã³ãã¯ãªãã¯ããŠãã ãã-çµæãåŸãããŸã
端æ«ãŠã£ã³ããŠã«ããã¹ããå°å·ãããšããã€ã¯ãã³ã³ãããŒã©ãŒããšã³ãŒãè¿ããŸãã EnterããŒãæŒããšããã£ãªããžãšæ°ããè¡ãå€æãããŸãã
Backspaceãæ©èœããŸãã ç§ã¯ããã«ãã€ããŒã¿ãŒããã«ã§å人ãšãã£ããããäœæéãé»è©±åç·ãå æããŠããããšãæãåºããŸãã...
ããã§ãã³ãŒããå€æŽããŠãã€ã¯ãã³ã³ãããŒã©ãŒã§éã¶ããšãã§ããŸãã
ããšãã°ãããªããã£ãã³ãã³ããã³ãã©ãŒãè¿œå ã§ããŸãã
#define CRLF UART1_Write(10);UART1_Write(13) char uart_rd = 0; char cmd[32] = {0}; int char_counter = 0; void cmd_exec(void) { if (strstr(cmd, "hello")) { UART1_Write_Text("EHLO"); CRLF; } else if (strstr(cmd, "test")) { UART1_Write_Text("TSET"); CRLF; } else { UART1_Write_Text("Unknown command"); CRLF; } char_counter=0; memset(cmd, 0, sizeof cmd); } void main(void) { UART1_Init(9600); UART1_Write_Text("MCU started"); UART1_Write(10); UART1_Write(13); for(;;) { if(UART1_Data_Ready()) { uart_rd = UART1_Read( ); switch(uart_rd) { case 0xD: CRLF; cmd_exec(); break; default: UART1_Write(uart_rd); break; } cmd[char_counter++] = uart_rd; if(char_counter == (sizeof cmd - 1)) { CRLF; cmd_exec(); } } } }
USB HID
ãã®ãšããUSBããã€ã¹ãäœãã®ã¯é£ããããšãããããŸããã HIDããã€ã¹ãã€ãŸãã»ãšãã©ã®å Žåãå ¥åããã€ã¹ããã¹ãããŸãã
ç§ã¯æ¬åœã«èªåãã¹ã¯ãŒãå ¥åããããã£ãã ãã§ãªããå»ã£ããšãã«ã³ã³ãã¥ãŒã¿ãããã¯ããè¿ã¥ãããšãã«ããã¯ã解é€ãããã£ãã®ã§ãã ããŠãä»®æ³ããŒããŒãã䜿çšããŠå®è£ ã§ããä»ã®å€ãã®ããšã
䟿å©ãªHIDæ å ±ã®æã¯ããã«ãããŸã ã èªã¿åã-åèªã¿åãããŸããã
èŠããã«ãåUSB HIDããã€ã¹ã«ã¯ç¹å¥ãªèª¬æãèšè¿°åããããŸãã ã©ã®çš®é¡ã®ããã€ã¹ã§ããããã©ã®ããã«å¶åŸ¡ã§ãããããã¹ããæ¶è²»ããéããŸãã¯ç¬èªã®é»æºãšãã®ä»ã®æ å ±ãæã£ãŠãããã©ããã説æããŸãã ãããã£ãŠãOSãããŒããŒãã§ããããšãç解ãããããæäœã§ããããã«ãæ£ãã説æãäœæããå¿ èŠããããŸãã
ããããæåã«ãProteusããã®ä»®æ³USBãã¹ããå®éã®PCã«è»¢éããã«ã¯ãä»®æ³ãã©ã€ããŒãã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã
ããã€ã¹ãæ¬æ ŒçãªFullSpeed USB 2.0ãšããŠæ©èœãããã«ã¯ãPLLãæå¹ã«ããããã«å¿ããŠæ§æããå¿ èŠããããŸãã
Proteusã§ã¯ãããã»ããµåšæ³¢æ°ã96 MHzã«èšå®ããå¿ èŠããããŸãã
ãã¿ãã¬ã®äžã§ããã¹ã¿ãŒãªã·ã¬ãŒã¿ãŒãã©ã®ããã«æ©èœãããã®èª¬æïŒPICã®å ŽåïŒ
èšè¿°å
ããã調ã¹ãŠå®éšããã ãã§ãšãŠã圹ã«ç«ã¡ãŸããã usb.orgã®ç¡éã®PDFãã©ãã§æãã°ããããããã«æããã«ãªããŸãã
ç§ãã¡ã®å Žåããæšæºã埩å·åããã°ã©ã ããã®å€æŽã¯ã»ãšãã©ãããŸããã
VID / PIDãå€æŽãããããã8ãã€ãã®å ¥å/åºåãããã¡ãŒãããããšã瀺ããŸãããå®éããããŒããŒããã¯ã©ã¹ã®ããã€ã¹ãããããã®ããã«äœ¿çšããå¿ èŠãããããšã瀺ããŸããã
ãã¹ãŠã®å€æ°åã¯ããèªèº«ãè¡šããŠããŸãã
èšè¿°åã³ãŒãèªäœã倧éã®ã³ãŒã
const unsigned int USB_VENDOR_ID = 0xdead; const unsigned int USB_PRODUCT_ID = 0xbeaf; const char USB_SELF_POWER = 0x80; // Self powered 0xC0, 0x80 bus powered const char USB_MAX_POWER = 50; // Bus power required in units of 2 mA const char HID_INPUT_REPORT_BYTES = 8; const char HID_OUTPUT_REPORT_BYTES = 8; const char USB_TRANSFER_TYPE = 0x03; //0x03 Interrupt const char EP_IN_INTERVAL = 1; const char EP_OUT_INTERVAL = 1; const char USB_INTERRUPT = 1; const char USB_HID_EP = 1; const char USB_HID_RPT_SIZE = 63; /* Device Descriptor */ const struct { char bLength; // bLength - Descriptor size in bytes (12h) char bDescriptorType; // bDescriptorType - The constant DEVICE (01h) unsigned int bcdUSB; // bcdUSB - USB specification release number (BCD) char bDeviceClass; // bDeviceClass - Class Code char bDeviceSubClass; // bDeviceSubClass - Subclass code char bDeviceProtocol; // bDeviceProtocol - Protocol code char bMaxPacketSize0; // bMaxPacketSize0 - Maximum packet size for endpoint 0 unsigned int idVendor; // idVendor - Vendor ID unsigned int idProduct; // idProduct - Product ID unsigned int bcdDevice; // bcdDevice - Device release number (BCD) char iManufacturer; // iManufacturer - Index of string descriptor for the manufacturer char iProduct; // iProduct - Index of string descriptor for the product. char iSerialNumber; // iSerialNumber - Index of string descriptor for the serial number. char bNumConfigurations; // bNumConfigurations - Number of possible configurations } device_dsc = { 0x12, // bLength 0x01, // bDescriptorType 0x0200, // bcdUSB 0x00, // bDeviceClass 0x00, // bDeviceSubClass 0x00, // bDeviceProtocol 8, // bMaxPacketSize0 USB_VENDOR_ID, // idVendor USB_PRODUCT_ID, // idProduct 0x0001, // bcdDevice 0x01, // iManufacturer 0x02, // iProduct 0x00, // iSerialNumber 0x01 // bNumConfigurations } ; /* Configuration 1 Descriptor */ const char configDescriptor1[]= { // Configuration Descriptor 0x09, // bLength - Descriptor size in bytes 0x02, // bDescriptorType - The constant CONFIGURATION (02h) 0x29,0x00, // wTotalLength - The number of bytes in the configuration descriptor and all of its subordinate descriptors 1, // bNumInterfaces - Number of interfaces in the configuration 1, // bConfigurationValue - Identifier for Set Configuration and Get Configuration requests 0, // iConfiguration - Index of string descriptor for the configuration USB_SELF_POWER, // bmAttributes - Self/bus power and remote wakeup settings USB_MAX_POWER, // bMaxPower - Bus power required in units of 2 mA // Interface Descriptor 0x09, // bLength - Descriptor size in bytes (09h) 0x04, // bDescriptorType - The constant Interface (04h) 0, // bInterfaceNumber - Number identifying this interface 0, // bAlternateSetting - A number that identifies a descriptor with alternate settings for this bInterfaceNumber. 2, // bNumEndpoint - Number of endpoints supported not counting endpoint zero 0x03, // bInterfaceClass - Class code 0, // bInterfaceSubclass - Subclass code 0, // bInterfaceProtocol - Protocol code 0, // iInterface - Interface string index // HID Class-Specific Descriptor 0x09, // bLength - Descriptor size in bytes. 0x21, // bDescriptorType - This descriptor's type: 21h to indicate the HID class. 0x01,0x01, // bcdHID - HID specification release number (BCD). 0x00, // bCountryCode - Numeric expression identifying the country for localized hardware (BCD) or 00h. 1, // bNumDescriptors - Number of subordinate report and physical descriptors. 0x22, // bDescriptorType - The type of a class-specific descriptor that follows USB_HID_RPT_SIZE,0x00, // wDescriptorLength - Total length of the descriptor identified above. // Endpoint Descriptor 0x07, // bLength - Descriptor size in bytes (07h) 0x05, // bDescriptorType - The constant Endpoint (05h) USB_HID_EP | 0x80, // bEndpointAddress - Endpoint number and direction USB_TRANSFER_TYPE, // bmAttributes - Transfer type and supplementary information 0x40,0x00, // wMaxPacketSize - Maximum packet size supported EP_IN_INTERVAL, // bInterval - Service interval or NAK rate // Endpoint Descriptor 0x07, // bLength - Descriptor size in bytes (07h) 0x05, // bDescriptorType - The constant Endpoint (05h) USB_HID_EP, // bEndpointAddress - Endpoint number and direction USB_TRANSFER_TYPE, // bmAttributes - Transfer type and supplementary information 0x40,0x00, // wMaxPacketSize - Maximum packet size supported EP_OUT_INTERVAL // bInterval - Service interval or NAK rate } ; const struct { char report[]; } hid_rpt_desc = { 0x05, 0x01, // USAGE_PAGE (Generic Desktop) 0x09, 0x06, // USAGE (Keyboard) 0xa1, 0x01, // COLLECTION (Application) 0x05, 0x07, // USAGE_PAGE (Keyboard) 0x19, 0xe0, // USAGE_MINIMUM 224(Keyboard LeftControl) 0x29, 0xe7, // USAGE_MAXIMUM 231(Keyboard Right GUI) (left and right: alt, shift, ctrl and win) 0x15, 0x00, // LOGICAL_MINIMUM (0) 0x25, 0x01, // LOGICAL_MAXIMUM (1) 0x75, 0x01, // REPORT_SIZE (1) 0x95, 0x08, // REPORT_COUNT (8) 0x81, 0x02, // INPUT (Data,Var,Abs) 0x95, 0x01, // REPORT_COUNT (1) 0x75, 0x08, // REPORT_SIZE (8) 0x81, 0x03, // INPUT (Cnst,Var,Abs) 0x95, 0x05, // REPORT_COUNT (5) 0x75, 0x01, // REPORT_SIZE (1) 0x05, 0x08, // USAGE_PAGE (LEDs) 0x19, 0x01, // USAGE_MINIMUM (Num Lock) 0x29, 0x05, // USAGE_MAXIMUM (Kana) 0x91, 0x02, // OUTPUT (Data,Var,Abs) 0x95, 0x01, // REPORT_COUNT (1) 0x75, 0x03, // REPORT_SIZE (3) 0x91, 0x03, // OUTPUT (Cnst,Var,Abs) 0x95, 0x06, // REPORT_COUNT (6) 0x75, 0x08, // REPORT_SIZE (8) 0x15, 0x00, // LOGICAL_MINIMUM (0) 0x25, 0x65, // LOGICAL_MAXIMUM (101) 0x05, 0x07, // USAGE_PAGE (Keyboard) 0x19, 0x00, // USAGE_MINIMUM (Reserved (no event indicated)) 0x29, 0x65, // USAGE_MAXIMUM (Keyboard Application) 0x81, 0x00, // INPUT (Data,Ary,Abs) 0xc0 // END_COLLECTION } ; //Language code string descriptor const struct { char bLength; char bDscType; unsigned int string[1]; } strd1 = { 4, 0x03, { 0x0409 } } ; //Manufacturer string descriptor const struct{ char bLength; char bDscType; unsigned int string[10]; } strd2={ 22, //sizeof this descriptor string 0x03, { 'H','a','b','r','a','h','a','b','r' } } ; //Product string descriptor const struct{ char bLength; char bDscType; unsigned int string[15]; } strd3={ 32, //sizeof this descriptor string 0x03, { 'H','a','b','r','a','K','e','y','b','o','a','r','d' } } ; //Array of configuration descriptors const char* USB_config_dsc_ptr[1]; //Array of string descriptors const char* USB_string_dsc_ptr[3]; void USB_Init_Desc(){ USB_config_dsc_ptr[0] = &configDescriptor1; USB_string_dsc_ptr[0] = (const char*)&strd1; USB_string_dsc_ptr[1] = (const char*)&strd2; USB_string_dsc_ptr[2] = (const char*)&strd3; }
ãã®èšè¿°åã¯ãããžã§ã¯ãã«è¿œå ãããã¢ã»ã³ããªäžã«èªåçã«äœ¿çšãããŸãã
å
¥åããæãåçŽãªããã°ã©ã
unsigned short USBResponse[8] = { 0} absolute 0x500; unsigned short USBCommand[8] = {0} absolute 0x508; char *text="habrahabr"; int i = 0; void interrupt(void) { USB_Interrupt_Proc( ); } void clrUSB(void) { memset(USBCommand, 0, sizeof USBCommand); while ( !HID_Write(&USBCommand, sizeof USBCommand)); } void main(void) { ADCON1 |= 0x0F; CMCON |= 7; HID_Enable(&USBResponse, &USBCommand); delay_ms(1000); for (i=0; i < strlen(text); i++) { USBCommand[2] = text[i] - 93; while ( !HID_Write(&USBCommand, sizeof USBCommand)); clrUSB(); delay_ms(200); } }
å®éããã¹ãŠã®äœæ¥ã¯ã察å¿ãããããã¡ãŒãåããŠPCã«éä¿¡ããããšããæããŸãã UARTã»ã©è€éã§ã¯ãããŸããã ãã¹ãŠã®äœæ¥ã¯ãå²ã蟌ã¿ã«ãŒãã³ã§è¡ãããŸãã IDEã«ã¯ãHIDãæäœããããã®æ¢è£œã®ã©ã€ãã©ãªããããŸãã
ã¹ãã£ã³ããŒããŒãã³ãŒãã¯ASCIIãšã¯ç°ãªãããšãããã§èª¬æããå¿ èŠããããŸãããã³ãŒããéè² è·ã«ããªãããã«ïŒããã«ã¡ã¯ïŒããã®äžäŸ¿ãåå§çãªæ¹æ³ã§åé¿ããŸããã å°æåã§ã®ã¿æ©èœããŸãã åžæãã人ã¯èªåã§å€æãè¡ãããšãã§ããŸãã ç§ã¯KVMã«åæ§ã®ããã€ã¹ã䜿çšããŠããŸããè·å Žã§ã¯ãã¯ã€ã€ã¬ã¹ããŒããŒããšã¯ã¹ãã³ããŒã§ããåœç€Ÿã®D-Link KVMã¯USBã¯ã€ã€ã¬ã¹ãã³ã°ã«ãç解ããããªãã®ã§ãã
ããã§ã¡ã¢åž³ãéããProteusãèµ·åããŠïŒæåã«ä»®æ³ãã©ã°ãã¯ãªãã¯ããŸã-USBã³ãã¯ã¿ãããã©ã°ã€ã³ãããŸãïŒãããã«ããŠã¹ã§ãã©ãŒã«ã¹ãã¡ã¢åž³ã«å€æããäœæãhabrahabrãšããåèªãå°å·ããæ¹æ³ã確èªããŸãã
ãããŠããã£ã¹ãããã£ã«ããã€ã¹ãç»å ŽããŸãã
ããã«åºã¥ããŠãç¬èªã®äœããè¿œå ã§ããŸãã
ãããã©ã®ããã«æ©èœãããã«ã€ããŠããã€ãã®èšèã
8ãã€ãã¯ããŒããŒãI / Oçšã«äºçŽãããŠããŸãïŒ
0修食å
1æªäœ¿çš
2ããŒ1
3ããŒ2
4ããŒ3
5ããŒ4
6ããŒ5
7ããŒ6
修食åããããã¯ç¹æ®ããŒCtrlãShiftãAltã§ãã ãããã¯çµã¿åãããããšãã§ããŸãã ããšãã°ãCtrl Alt Delã®çµã¿åããã®å ŽåïŒ
修食åïŒ0b00000 101 Ctrl ãShiftã Alt
ããŒã³ãŒãïŒ0x4cïŒããŒã®åé€ïŒ
ããŒã¿è»¢éã®çŽåŸã«USBãããã¡ãæ¶å»ããå¿ èŠãããããšãèŠããŠããå¿ èŠããããŸããããããªããšãã¹ãã£ãããŒããŒã®å¹æãçããŸãã ã€ãŸãã8ã€ã®ãŒããã€ããPCã«éä¿¡ããŸãã ãã®äŸã§ã¯ãclearUSBãµãã«ãŒãã³ããããå®è¡ããŸãã
ã¹ãã£ã³ã³ãŒãã®è©³çŽ°ã«ã€ããŠã¯ã ãã€ã¯ããããã®ã¢ããªããŒãã«èšèŒãããŠããŸã
åæ§ã«ãéåžžã®HIDããã€ã¹ãäœæããPCãããã€ããéåä¿¡ã§ããŸããäœæ¥ã®è«çã«åŸã£ãŠãããã¯åãUARTãšã»ãšãã©å€ãããŸããã ããããããã«ã¯ãäŸãã°ãPCåŽããã®libusbã䜿çšãããªã©ãå¥ã®äœæ¥ãæ¢ã«å¿ èŠã§ãã
ã€ãŒãµããã
ã¿ã€ãã«ã«ã¯åæ ãããŠããŸããããèšåãã䟡å€ããããŸãã
æ®å¿µãªãããããã¯å¥ã®è°è«ã®ãããã¯ã§ããããããã®äŸã¯å®äºããŸããã
ããããå°ãªããšãã·ãã¥ã¬ãŒã¿ãŒèªäœã®æ§ææ¹æ³ã«ã€ããŠã¯èª¬æããäœããè©Šãããšã«æåããŸãã
ããŒããŠã§ã¢ã§æ©èœãããã®ã®äŸã瀺ããŸãããå¿ ãããã·ãã¥ã¬ãŒã¿ã§æ©èœãããšã¯éããŸããã Proteusã¯ãENC28J60ããã³RTL8019ãããçšã®VSMã¢ãã«ãå®è£ ããŠããŸãã ã¯ããç§ãã¡å šå¡ãäºç®ã®ãããã¯ãŒã¯ã«ãŒãã«ã€ããŠç¥ã£ãŠããã®ãšåããããã§ãã ENCã®äœ¿çšã¯ååã«åºã説æãããŠãããããã§ã¯åé¡ã¯ãªãã¯ãã§ãã ããšãã°ãå°æ¬ãããLifeloverãšããŠãç¥ãããRedshã¯ããã¹ãŠãé·ã培åºçã«èª¬æããŠããŸãã ãããã£ãŠãéå±ããªãããã«ããã«ã¯ã8019ãåããŸããZ80ãšçµã¿åãããŠäœ¿çšââãããœãããŠã§ã¢ãäœæããã»ã©ã§ãã
USBãšåæ§ã«ããã©ã€ããŒãã€ã³ã¹ããŒã«ããå¿ èŠããããŸãããä»ã¯WinPCAPã§ãã ãããã¯ãUSBãã©ã€ããŒã®é£ã®ä»®æ³ãããã¯ãŒã¯ãã©ã«ããŒã«ãããŸãã ãŸãã¯ã ãµã€ãããææ°ããŒãžã§ã³ãããŠã³ããŒãããŸã
ãã®åŸãã¢ãã¬ã¹ã192.168.95.1ã®æ°ããä»®æ³ãããã¯ãŒã¯ã€ã³ã¿ãŒãã§ã€ã¹ãäœæãããŸãããããã¯ãã¡ããå€æŽã§ããŸãã
æ¢ç¥ã®ã¹ããŒã ã«åŸã£ãŠãUARTã§ãããã°ã€ã³ã¿ãŒãã§ã€ã¹ãäœæããŸãããã
ãã³ãïŒTEXTã©ãã«ã«æ©ãŸãããå Žåã¯ãã³ã³ããŒãã³ãã®èª¬æã«ã¹ããŒã¹ãå ¥ããŠãã ãã
è¶ å°ååè·¯ã®ããããã£ã§ãä»®æ³ãããã¯ãŒã¯ã«ãŒãã®çªå·ãŸãã¯IPãèšè¿°ããããã€ãã®èšå®ãå€æŽã§ããŸãã
ç§ã®å Žåãããã¯192.168.50.1ã§ãïŒå€æŽããŸããïŒ
次ã¯ãœãããŠã§ã¢ã§ãã 8019çšã®æ¬æ Œçãªãã©ã€ããŒã¯ãŸã æºåãã§ããŠããŸãããããã¯å¥ã®å€§ããªèšäºã®ãããã¯ã§ããããã®ãããªæ代é¯èª€ã«èª°ããèå³ãæã€ããšã¯ãªãã§ãããã ãããããããã³ã«ãèšå®ããªããŠãïŒIPã¢ãã¬ã¹ã¯0.0.0.0ã«ãªããŸããïŒãã¬ãžã¹ã¿ã§ICMP /ãããŒããã£ã¹ããæå¹ã«ããããããµããããäžã®å·Šã®ã¢ãã¬ã¹ã«pingãå®è¡ã§ãããã±ãããåä¿¡ãããš
æ¢è£œã®HEXã¯ãããžã§ã¯ãã«å«ãŸããŠããããããã¹ãŠãæ©èœããããšã確èªããå¿ èŠãããå Žåã¯ãã³ã³ãã€ã©ãããŠã³ããŒãããããšããã§ããŸããã
ã·ãã¥ã¬ãŒã·ã§ã³ãæ©èœãããããã«ãHEXãã¡ã€ã«ã®å Žæããã€ã¯ãã³ã³ãããŒã©ãŒã«äŒããããšãå¿ããªãã§ãã ããã
ãã®ãªã³ã¯ãããã¹ãŠã®ãã¡ã€ã«ãããŠã³ããŒãã§ããŸã
誰ããããŒããŠã§ã¢ã§è©ŠããŠå®è£ ããããšãã匷ã欲æ±ãæã£ãŠããããšãé¡ã£ãŠããŸãã