Analog Devices USB Laboratory
èŠçŽ
Analog Devices USB Laboratoryã¯ARM7â¢ããã»ããµãšå®äŸãœããã䜿çšããMAX3421E/MAX3420EãããŒã¹ãšããã·ã¹ãã ã§ãããã®ã¢ããªã±ãŒã·ã§ã³ããŒãã¯ãã·ã¹ãã ãšãããå®è¡ãããœãããŠã§ã¢ã«ã€ããŠèª¬æããŸããUSBãã¹ããšããªãã§ã©ã«ã®äž¡æ¹ãšãåãARM®ã®Cã³ãŒãã§å®è£
ãããŠããŸãããã®æ¹æ³ã¯ãªãã¡ã¬ã³ã¹ããã€ã¹ãUSBã±ãŒãã«ã®ä»ç«¯ã«æ¥ç¶ããå©ç¹ãåãããã¹ãŠåãCã³ãŒãã§USBããªãã§ã©ã«ãšåã蟌ã¿ãã¹ãã®éçºãšåŠç¿ãå¯èœã«ãªããŸãã
ãã®ã¢ããªã±ãŒã·ã§ã³ããŒãã¯ã¢ããªã±ãŒã·ã§ã³ããŒã3937 Analog Devices USB Laboratoryã®ã»ããã¢ãããšå¯Ÿã«ãªã£ãŠããŸããããã·ã ãã¢ã³ãŒããå«ãKeilâ¢ãããžã§ã¯ãã¯ããŠã³ããŒãå¯èœã§ãã
ã¯ããã«
Analog Devices USB Laboratoryã¯2ã€ã®åè·¯ããŒããšCããã°ã©ã ãçµã¿åããããã®ã§ãããã®ã·ã¹ãã ã䜿ããšæ¬¡ã®ããšãå¯èœãšãªããŸãïŒ
- MAX3420E USBããªãã§ã©ã«ã³ã³ãããŒã©ã«æ¥ç¶ãããARM7ãã€ã¯ãã³ã³ãããŒã©(µC)ãããŒã¹ãšããUSBããã€ã¹æ©èœã®åŠç¿ãåäœã詊éšãããã³å€æŽã
- MAX3421Eãã¹ãã³ã³ãããŒã©ã«æ¥ç¶ãããåãARM7 µCã䜿çšããUSBãã¹ãæ©èœã®åŠç¿ãåäœã詊éšãããã³å€æŽãå³1ã¯USBã¡ã¢ãªã¹ãã£ãã¯ãããã¹ãã«ãã£ãŠããŒã¿ãæ€çŽ¢ãããæ§åã瀺ãããŠããŸãã
- ãã¹ããããªãã§ã©ã«ã«USBã±ãŒãã«ã§æ¥ç¶ããŠããã¹ããšããªãã§ã©ã«ãåæã«åäœãããŸããUSBãã¹ããŸãã¯USBããªãã§ã©ã«ã®ã³ãŒãã®ãããããéçºãããšããUSBã®ä»ç«¯ã«ãªãã¡ã¬ã³ã¹ãã¶ã€ã³ãåããããšã¯éåžžã«åœ¹ã«ç«ã¡ãŸããããããããšã§ãäž¡æ¹ãšãåãCã³ãŒãã§å®è£ ãããŠãããã¹ããšããªãã§ã©ã«ãã€ãŸãUSBã±ãŒãã«ã®äž¡åŽããå¶åŸ¡å¯èœãšããããšãã§ããã«ã¹ã¿ã åããããšãã§ããŸãã
å³1. MAX3421ãã¹ã/ARMããUSBããªãã§ã©ã«ããã€ã¹ãããšãã¥ã¡ã¬ãŒã·ã§ã³ããŒã¿ãæ€çŽ¢ããã¿ãŒããã«çšã®ãšãã¥ã¬ãŒã·ã§ã³ããã°ã©ã ãå®è¡ããŠããPCã«ãæ¥ç¶ãããã·ãªã¢ã«ããŒããéããŠãã®çµæãéç¥ããŠããŸãã
ãã®ä»ã®ææž
MAX3420EãšMAX3421Eã®ããã°ã©ãã³ã°ã¬ã€ããããŒã¿ã·ãŒããããã³ã¢ããªã±ãŒã·ã§ã³ããŒãã¯ããã·ã ã®ãŠã§ããµã€ãã§ãå©çšé ããŸãïŒ
- MAX3420E
- MAX3421E
- ã¢ããªã±ãŒã·ã§ã³ããŒã3937 Analog Devices USB Laboratoryã®ã»ããã¢ãã
ããŒããŠã§ã¢
ã¢ããªã±ãŒã·ã§ã³ã®Cã³ãŒãã¯2ã€ã®ããŒãã»ããã§åäœããŸãïŒ
- ããã·ã ã®MAX3421Eã®è©äŸ¡(EV)ãããã1ããŒã
- Keil MCB2130ã2çªç®ã®ããŒã
å³2. Keil MCB2130ããŒãã«ãã©ã°ã€ã³ããããã·ã ã®EVãããã
å³2ã¯ããŒãã®çµç«ãŠã瀺ããŠããŸããéãããŒããKeil MCB2130ã§ARM7ããããšããŠPhilips®ã®LPC2138ãæèŒããŠããŸãããã®ÂµCã¯ã2ã€ã®ããã·ã USBã³ã³ãããŒã©ãããã«æ¥ç¶ãã2ã€ã®SPIâ¢ããŒããŠã§ã¢ãŠããããåããŠããŸãã
åçŽã®ããŒããMAX3421Eã®EVKIT-1ã§ããMAX3420Eããªãã§ã©ã«ã³ã³ãããŒã©ã¯ARMã®SPIããŒãã®1ã€ã«æ¥ç¶ãããå³2ã®ïœ¢3420 P (Pã¯ããªãã§ã©ã«ã®P)ãšè¡šç€ºãããUSBã®ïœ¢Bã³ãã¯ã¿(J5)ã«çµç·ãããŠããŸããMAX3421Eã®ãã¹ã/ããªãã§ã©ã«ã³ã³ãããŒã©ã¯ãã1ã€ã®ARM SPIããŒãã«æ¥ç¶ãããŠã3421P (J2)ããã³ïœ¢3421H (J1)ã³ãã¯ã¿(Hã¯ãã¹ãã®Hã§ã)ã«çµç·ãããŠããŸãããã®ã¢ããªã±ãŒã·ã§ã³ã§èšè¿°ãããã³ãŒãã¯MAX3421Eããã¹ããšããŠãããããEVãããããŒãäžã®äžéã®USBã³ãã¯ã¿(J2)ã¯äœ¿ãããŸããã
ãã¹ãã®ãœãããŠã§ã¢ã¯ãã¿ãŒããã«ãšãã¥ã¬ãŒã·ã§ã³ããã°ã©ã ãå®è¡ããPCã«USBã®èšè¿°æ å ±ãéä¿¡ããããã«2ã€ã®ã·ãªã¢ã«ããŒãã®1ã€(MCB2130ããŒãäžã®P1)ã䜿ããŸããTera Term Proãªã©ã®ã¿ãŒããã«ããã°ã©ã ã¯ãç»é¢ãã¯ãªã¢ããŠã«ãŒãœã«ãåç¹ã«åŸ©åž°ãããããã«ããã°ã©ã ã«ãã£ãŠéä¿¡ãããç¹å¥ãªïœ¢escape codeã·ãŒã±ã³ã¹ãèªèããã¿ãŒããã«(VT100)ããšãã¥ã¬ãŒãããããšãã§ããŸããã¿ãŒããã«ããã°ã©ã ã®ã·ãªã¢ã«ããŒãã®èšå®å€ã¯ãããŒå¶åŸ¡ãªãã®38400ãNã8ã1ã§ãã
å³2ã®ããŒãžã¥è²ã®ããã¯ã¹ãšãªãã³ã±ãŒãã«ã¯Keil ULINK JTAGããŒããŒãããã¬ãŒã§ãããã®ãŠãããã¯Keil µVision®3éçºç°å¢ã«ãã£ãŠãµããŒããããŠããŸããMCB2130ããŒãã«ã¯KeilããŒã«ã»ããã®å®å šæ©èœããŒãžã§ã³ã§ããµVision3ã®è©äŸ¡ããŒãžã§ã³ã忢±ãããŠããŸãããã®è©äŸ¡ããŒãžã§ã³ã¯16kBã®ã³ãŒããµã€ãºã«éå®ãããŠããŸãã
ãã®ã¢ããªã±ãŒã·ã§ã³ããŒãã®ä»å±ãã¡ã€ã«ã«ã¯16é²åœ¢åŒã®ãã¹ãŠã®ãœãŒã¹ãã¡ã€ã«ãããã³ããŒãã¢ãžã¥ãŒã«ãå ããå®å šKeilãããžã§ã¯ããå«ãŸããŠããŸããULINK JTAGãŠãããããæã¡ã®å Žåã¯JTAGããŒããéããŠã³ãŒããã³ã³ãã€ã«ãããŒãããããŠãããã°ããããšãã§ããŸããããã¯ãåäœããŠãããã¹ãããã³/ãŸãã¯ããªãã§ã©ã«ã³ãŒããç®çã«åãããŠå€æŽããUSBãå¹çããéçºããåªããæ¹æ³ã§ããULINKããã¯ã¹ããæã¡ã§ãªãå Žåã§ããwww.esacademy.comããå ¥æå¯èœãªFlash MagicãšåŒã°ããç¡æã®ãŠãŒãã£ãªãã£ãçšããŠ16é²ãã¡ã€ã«ãããŒãããŠå®è¡ããããšãã§ããŸãããã®ãŠãŒãã£ãªãã£ã®æ§æãšçšæ³ã«ã€ããŠã®æ å ±ã¯ããã·ã ã®ã¢ããªã±ãŒã·ã§ã³ããŒã3937ãåç §ããŠãã ããã
å³3. MAX3241EEVKIT-1ããŒãã®ãããã¯å³ãé°åœ±ãã€ããæ¥å圢ã¯äž»èŠãªãœãããŠã§ã¢ã¢ãžã¥ãŒã«ã§ãã
ã³ãŒãã®æ©èœ
å³3ã¯ãã®ã¢ããªã±ãŒã·ã§ã³ããŒãã§èª¬æããMAX3421EEVKIT-1ããŒããšãœãããŠã§ã¢ã¢ãžã¥ãŒã«ã®ãããã¯å³ã§ããMAX3420EãšMAX3421Eã®äž¡æ¹ãšããSPIãã¹ãçšããŠãã®ã¬ãžã¹ã¿ã»ããã«ã¢ã¯ã»ã¹ããããšãã§ããŸããLPC2138ã¯2ã€ã®ããŒããŠã§ã¢SPIãŠããããå èµããŠããŸãïŒ
- å°çšã®SPIããŒã(SPI)
- æ±çšã·ãªã¢ã«ã€ã³ã¿ãã§ãŒã¹(SSPãã·ã³ã¯ããã¹ã·ãªã¢ã«ããŒã)
SSPã¯2çªç®ã®SPIããŒããå®è£ ããããã«èšå®ãããŠããŸãããããã®ããŒãã®èšå®ã¯ãã®ãã®ç°ãªããŸããäŸãã°ãSSPã¯æ·±ã8ã®éä¿¡ããã³åä¿¡çšã®FIFOãåãã仿¹ãSPIã¯æ·±ããããã1ã®èªåããããã¡ã§ãã2ã€ã®SPIããŒãã¯MAX3420ããã³MAX3421Eãšå¯Ÿå¿ããããã«8ãããã®ããŒã¿ã¢ãŒãã§åäœããããã«èšå®ãããŸãããœãããŠã§ã¢ã¢ãžã¥ãŒã«ã®SPI_FNs.Cã«ã¯äž¡æ¹ã®USBã³ã³ãããŒã©ã§äœ¿ãããã¬ãžã¹ã¿ã¢ã¯ã»ã¹æ©èœãå«ãŸããŠããŸãã
MAX3420ã¯SPIãŠãããã«æ¥ç¶ãããŠããŠãããããšäŒè©±ããæ©èœã«ã¯ããªãã§ã©ã«åäœã瀺ãããã«ïœ¢Pïœ£ã®æ¥é å(äŸïŒPrregãPwregãªã©)ãä»ããããŠããŸããMAX3421Eã¯SSPãŠãããã«æ¥ç¶ãããŠããŠããã®ã¢ã¯ã»ã¹æ©èœã«ã¯ãã¹ããšã®åäœã瀺ãããã«ãHïœ£ã®æ¥é å(äŸïŒHwreg)ãä»ããããŠããŸãã
ããªãã§ã©ã«ã³ãŒã
Cã¢ãžã¥ãŒã«ã®3420_HIDKB.Cã¯EVãããã³ãã¯ã¿J5ãçšããŠPCã«æ¥ç¶ããUSBããªãã§ã©ã«ããã€ã¹ãå®è¡ããŸããMAX3420Eã®INTåºå端åã¯ARM7ã®EINT0 (å€éšå²èŸŒã¿ãŒã)端åã«æ¥ç¶ãããŠããŸããMAX3420Eã«ãã£ãŠå®è£ ãããUSBããªãã§ã©ã«ããµãŒãã¹ãèŠæ±ãããšãã¯ãã€ã§ãå²èŸŒã¿ãã¢ãµãŒããããŸãã
ãã®ã¢ããªã±ãŒã·ã§ã³ã¯æšæºã®USB HID (Human Interface Device)ãšããŠãšãã¥ã¡ã¬ãŒããããåäœããŸããæšæºã®Windows®ããã€ã¹ã¯ã©ã¹ã«æºæ ããå©ç¹ã¯ããã€ã¹ãã©ã€ããWindowsã«çµã¿èŸŒãŸããŠãããããç¹å¥ãªãã©ã€ããã€ã³ã¹ããŒã«ããå¿ èŠããªãããšã§ããWindowsã¯ãã®ã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŠå®è£ ãããããã€ã¹ãæšæºã®ããŒããŒããšããŠèªèããŸããMAX3420Eã®GP-IN端åã«åãä»ãããã4ã€ã®æŒããã¿ã³ã®ãããããæŒããšãããã¹ãã¹ãåãåããäŸãã°NotepadãŸãã¯Wordpadãªã©ã®ãªãŒãã³ãŠã£ã³ããŠã®ããããã«ãããŒããŒããããã¹ãã¹ããªã³ã°ãã¿ã€ãå ¥åããããšã«ãªããŸãã
èŠåïŒãã®ã¢ããªã±ãŒã·ã§ã³ã¯Eã¡ãŒã«ãã³ã³ãã€ã©ãšãã£ã¿ããŸãã¯ã¯ãŒãææžãªã©ã®ããã¹ããåãåãã©ã®ãããªã¢ããªã±ãŒã·ã§ã³ã«ãã¿ã€ãå ¥åããŸãããã¿ã³ãæŒãåã«NotepadçããªãŒãã³ããŠã¢ã¯ãã£ãã«ããŠãããªã©ã®å®å šãªã¢ããªã±ãŒã·ã§ã³ãå¿ ãéããŠãã ããããªãŒãã³ããCãœãŒã¹ãã¡ã€ã«ãžã¿ã€ãå ¥åããã«ãŒã«ã«åŸããªãããã¹ãã¯æ£ããã³ã³ãã€ã«ããªããšããããšãçµéšãã確信ããŠããŸãã
ãã¹ãã®ã³ãŒã
3421_Host_EVK.Cãã¡ã€ã«ã«ã¯ã³ãã¯ã¿J4ã«USBããã€ã¹ããã©ã°ã€ã³ãããæã«PCãåãåäœã«äŒŒããšãã¥ã¡ã¬ãŒã·ã§ã³ã¹ããããMAX3421Eãå®è¡ããããã«æç€ºãããã¹ãã³ãŒããå«ãŸããŠããŸããmain( )颿°ã¯HIDããŒããŒããã¡ã³ã¯ã³ãŒãã«å¯Ÿããå²èŸŒã¿ãã³ãã©ã§ããããããã®ã¢ãžã¥ãŒã«å ã«ãããŸããEINT0å²èŸŒã¿ãã³ãã©ã¯åçŽã§ãïŒ
// EINT0 Interrupt handler--MAX3420E INT pin void INT3420 (void) __irq { service_irqs(); // Do the USB thing in 3420_HIDKB_INT_EVK.C module EXTINT = 1; // Clear EINT0 interrupt flag (b0) VICVectAddr = 0; // Dummy write to indicate end of interrupt service }
ããã¯ã°ã©ã³ãããã°ã©ã ã®main( )ã«ã¯æ¬¡ã«ç€ºããšã³ãã¬ã¹ã«ãŒããå«ãŸããŠããŸãïŒ
while(1) { detect_device(); waitframes(200); // Some devices require this enumerate_device(); wait_for_disconnect(); }
enumerate_device()颿°ãä»äºã®å€§éšåãè¡ããUSBããã®èŠæ±ãæ¥ç¶ãããããã€ã¹ãžéããã·ãªã¢ã«ããŒããéããŠçµæãéç¥ããŸããEV kit J1ã«ä»»æã®USBããã€ã¹ãæ¥ç¶ãããšããã®é¢æ°ãããã€ã¹ã«ãšãã¥ã¡ã¬ãŒã·ã§ã³èŠæ±ãéããã·ãªã¢ã«ããŒããéããŠçµæãéç¥ããŸã(å³1)ã
ãã¹ã/ããªãã§ã©ã«ã®åæåäœ
MAX3421EEVKIT-1ããŒãã¯USBããªãã§ã©ã«ãšUSBãã¹ãã®äž¡æ¹ãåããŠãããããšããããã¯ARM7ã®å¥ã®SPIã€ã³ã¿ãã§ãŒã¹ã䜿ãããããã¹ããšããªãã§ã©ã«ã®ã¢ããªã±ãŒã·ã§ã³ãåæã«åäœããããã«ãœãããŠã§ã¢ã容æã«æ§æããããšãã§ããŸããHIDããªãã§ã©ã«ã³ãŒããMAX3420Eã®å²èŸŒã¿ãçšããŠservice_irqs( )颿°ãã¢ã¯ãã£ãã«ããŠããéã«ããã¹ãã¢ããªã±ãŒã·ã§ã³ãããã¯ã°ã©ã³ãã§MAX3421EãšäŒè©±ããããã«main( )ãå®è¡ããŸãã
USBã±ãŒãã«ãEVãããã®J5ããJ1ã«æ¥ç¶ãããšãARMããã»ããµã¯ããªãã§ã©ã«ããã€ã¹ãã€ãŸãèªåèªèº«ãšäŒè©±ããUSBãã¹ããšããŠæ¯èãããšãã§ããŸããå³4ã«ã¯3421_Host.Cå ã®ãã¹ãã³ãŒãã3420_HIDKB.Cã«å®è£ ãããããªãã§ã©ã«ã調ã¹ããšãã«ããããéç¥ããå 容ã瀺ãããŠããŸãã
å³4. USBã䜿ã£ãŠèªèº«ã調ã¹ããã¢ã³ãŒãã
ãã¹ãã³ãŒãã®éçº
enumerate_device( )颿°ã調ã¹ããšãUSBãã¹ãã®åäœãããã³ãã¹ããUSBããã€ã¹ããšãã¥ã¡ã¬ãŒãããå Žåã«ããŸããŸãªãã¹ãã®åäœãè¡ãããã«MAX3421Eãžã©ã®ãããªã³ãã³ããäžããããçè§£ããã®ã«åœ¹ç«ã¡ãŸããUSBã®ãã¹ãã³ãŒããéçºããŠãããšãããã¹ãã«ãã©ã°ã€ã³ãããããªãã§ã©ã«ãã©ã®ããã«å¿çããŠããããæããã§ãªãå Žåãåé¡ã蚺æããããšãå°é£ãªå ŽåããããŸããå®å šã«å¶åŸ¡ããããšãã§ãããªãã¡ã¬ã³ã¹ããªãã§ã©ã«(3420_HIDKB.Cã¢ãžã¥ãŒã«)ãåããŠããããããã¹ãã®ãã¡ãŒã ãŠã§ã¢ã詊éšããããã«ããã€ã¹ã®å¿çãç¥ããå€ããããšã容æã§ãã
ããªãã§ã©ã«ã³ãŒãã®éçº
ãã¹ãã¯USBããªãã§ã©ã«ã³ãŒãã®éçºã«ãšã£ãŠåªãã調æ»çšããŒã«ã§ããMAX3421Eãš3421_Host.Cã®çµã¿åããã«ãããç°¡åã§åŒ·åãªUSBãã±ããçæåšãšè§£æåšãäœãåºãããšã«ãªããŸããCã«ãããã¹ãã³ãŒããæžãããšã«ãã£ãŠããªãã§ã©ã«ããã€ã¹ãçè§£ããããšãå¶åŸ¡ããŸããã€ãŸããMAX3421Eã¯ããªãã§ã©ã«ãã©ã®ããã«å¿çãããã瀺ããŠãããŸãã
äŸ
USBã¹ããªã³ã°ãåŠçããããã«ããªãã§ã©ã«ã³ãŒããæžããŠãããšããŸããããhidkb_enum_tables.hã®äžã«ã¡ãŒã«ãŒåã®æååãXYZ Widget Companyãšã³ãŒãåãããšæ¬¡ã®ããã«ãªããŸãïŒ
// STRING descriptor 1--Manufacturer ID { 18, // bLength 0x03, // bDescriptorType = string 'X','Y','Z',' ','W','i','d','g','e','t',' ','C','o','m','p','a','n','y' },
ãããã³ã³ãã€ã«ããŠãARMãã©ãã·ã¥ã«ããŒãããŠå®è¡ããŸãããã¹ãããã°ã©ã ãæ¬¡ã®ã¡ãŒã«ãŒæååãéç¥ããŸãïŒ
å³5. æšãè¡ããªãå Žåãã³ãŒãäŸã¯ã¡ãŒã«ãŒåã衚瀺ãããããã«ãªã£ãŠããªãå Žåã瀺ããŠããŸããæããã«ã³ãŒãã«åé¡ããããŸãã
XZWde opã¯äœã«åé¡ããã£ãã®ã§ãããïŒããã§ããUSB仿§ã¯ããã¹ãã¹ããªã³ã°ãæåããã2ãã€ãã®ãŠãã³ãŒãã§è¡šçŸããããšãèŠæ±ããŸããããªãã§ã©ã«ã®ãœãŒã¹ã³ãŒãã«æ»ãããããæ¬¡ã®ããã«å€ããŸãïŒ
// STRING descriptor 1--Manufacturer ID { 35 // bLength 0x03, // bDescriptorType = string 'X',0,'Y',0,'Z',0,' ',0,'W',0,'i',0,'d',0,'g',0,'e',0,'t',0, ' ',0,'C',0,'o',0,'m',0,'p',0,'a',0,'n',0,'y' // Unicode! },
ã³ã³ãã€ã«ããŠãå®è¡ãããšæ¬¡ã®ããã«ãªãçã§ãïŒ
å³6. æšããããŸããããŠãã³ãŒã圢åŒã䜿ããšããã®ãããªçµæãšãªããŸãã
ä»åºŠã¯ãã£ãšè¯ããããŸã å®å šã§ã¯ãããŸãããâCompanyâã®äžã®âyâã¯ã©ãã«ããã®ã§ããããïŒã¹ããªã³ã°ã®äžã§35æåãæ³šæããŠã«ãŠã³ãããã¹ããªã³ã°é·ã瀺ãæåã®ãã€ããšããŠãããå ¥åããŸãããããããäœããèŠèœãšããŠããŸãïŒã¹ããªã³ã°ã®ä»ã«æåã®2ãã€ããé·ããã€ãã®äžã«å«ããå¿ èŠããããŸããã³ãŒãã«æçµã®å€æŽãå ããŸãïŒ
// STRING descriptor 1--Manufacturer ID { 37 // bLength 0x03, // bDescriptorType = string 'X',0,'Y',0,'Z',0,' ',0,'W',0,'i',0,'d',0,'g',0,'e',0,'t',0, ' ',0,'C',0,'o',0,'m',0,'p',0,'a',0,'n',0,'y' // Unicode! },
ãã®çµææ¬¡ã®ããã«ãªããŸãïŒ
å³7. ããŸããããŸãããä»åºŠã¯æã£ãéããšãªããŸããã
ããªãã§ã©ã«ã³ãŒãã埮調æŽããŠãã¹ãã³ã³ãããŒã©ãšã³ãŒãã䜿ã£ãŠå®è¡/è§£æãè¡ããšãPCãèŠãŠããã®ãšå šãåãå 容ãèŠãããšã«ãªããŸããããã¯éç¥ãããçµæãMAX3420EããMAX3421Eãžéä¿¡ãããå®éã®USBãã©ãã£ãã¯ã§ããããã§ããéåžžã«ããã®ã¯ãéçºã«ãããŠééããèµ·ããããªã³ãŒãã«PCãã©ã®ããã«å¿çããããå¿é ããããšãªããå¶åŸ¡ãããããæ¹ã§ãããè¡ãããšãã§ããããšã§ãã
ã³ãŒãã®èª¬æ
å³8. Keilãããžã§ã¯ãã®æ§é ã
å³8ã¯3ã€ã®äž»èŠã¢ãžã¥ãŒã«ã瀺ããŠãããå±éããŠãã®ãã¡ã€ã«æ§é 屿§ã瀺ãããŠããŸããå±éãããŠããªãã¢ãžã¥ãŒã«ã¯Keilç°å¢ã§å¿ èŠãªè£å©ãã¡ã€ã«ã§ãã
SPI_FNs.C
ãã®ã¢ãžã¥ãŒã«ã«ã¯ä»ã®2ã€ã®ã¢ãžã¥ãŒã«ããã³ãŒã«ããããŠãŒãã£ãªãã£ãã¡ã³ã¯ã·ã§ã³ãå«ãŸããŠããŸãã
void init_PLL(void)
ãã®é¢æ°ã«ãã£ãŠLPC2138ã®PLLãšã¯ããã¯ååšåšãèšå®ããŸããLPC2138 (FOSC)ã«åãä»ããããŠããæ°Žæ¶ã¯12.000MHzã§ããCPUã®åšæ³¢æ°ã¯åŒCCLK = FOSC x Mãããã§M = 4ãã«åŸã£ãŠ48MHzã«èšå®ãããŸããLPC2138ã¯FOSCãéåããŠããã«é«ãåšæ³¢æ°ã«ããããã«å èµCCO (黿µå¶åŸ¡çºæ¯åš)ã䜿çšããŠããŸããFCCO = CCLK x 2 x Pã§è¡šãããFCCOã¯156MHzïœ320MHzã«ãªããã°ãªããŸãããP = 2ã«å¯ŸããŠãFCCO = 48MHz x 2 x 2 = 192MHzãšãªããŸãã
泚ïŒKeilãã¡ã€ã«ã®startup.sã«ã¯PLLãã©ã¡ãŒã¿ãèšå®ããããã®èµ·åã³ãŒããå«ãŸããŠããŸããinit_PLL()颿°ã¯ãããã®èšå®å€ãããå®è³ªçã«åªå ãããŸãã
éèŠãªèŠåïŒãããã®èšå®å€ã®å€æŽã¯äœ¿çšè ã®è²¬ä»»ã§è¡ã£ãŠãã ãããäžé©åãªèšå®å€ã¯LPC2138ã仿§éçå€ã«åŒ·å¶çã«çœ®ãããšã«ãªããKeilãããã¬ãŒã®æ©èœåæ¢ãæããŸãããããèµ·ãã£ãå Žåãææžæ¹æ³ã¯LPC2138ãã©ãã·ã¥ãæ¶å»ããããã«Flash MagicãŠãŒãã£ãªãã£ã䜿ãããšã§ã(ãã®ããã«KeilããŒãã®P2ã«æ¥ç¶ãããŠãã2çªç®ã®ã·ãªã¢ã«ããŒãã䜿ã£ãŠãã ãã)ããããŠã³ãŒãã®PLLèšå®å€ãä¿®æ£ããŠåã³å®è¡ããŠãã ããã
init_IO
ãã®é¢æ°ã«ãã£ãŠLPC2138 I/O端åãšSPIãŠããã(SPIãšSSP)ãåæåãããŸãïŒ
- SPIã¯æå€§èš±å®¹å€ã®CCLK/8ã®ã¯ããã¯ã§åäœããŸãããã®SCLKã¯48MHz/8 = 6MHzã§ãã
- SSPã¯CCLK/(2 x VBDIV)ã®ã¯ããã¯ã§åäœããŸããVBDIFã¯1ã«èšå®ããMAX3421Eã®SCKä¿¡å·ã¯48MHz/2 = 24MHzã«çãããªããŸããMAX3421Eã®SCLKå ¥åã¯æé«26MHzãŸã§åäœå¯èœã§ãã
SPIã€ã³ã¿ãã§ãŒã¹ã«ã€ããŠ
SPIã€ã³ã¿ãã§ãŒã¹ã¯æ¬¡ã®ä¿¡å·ã䜿çšããŸãïŒ
- MOSIãã¹ã¿åºåãSlaveå ¥åããŒã¿
- MISOãã¹ã¿å ¥åãSlaveåºåããŒã¿
- SCLKã·ãªã¢ã«ã¯ããã¯ãããã¯LPC2138ããäŸçµŠãããŸãã
- SS#ã¹ã¬ãŒãéžæãããã¯LPC2138ã«ãã£ãŠé§åãããŸãã
LPC2138ã®SPIããŒããŠã§ã¢ã¯æåã®3ã€ã®ä¿¡å·ãåŠçããŸãããSS#ã¯GP-OUT端å(P0.7)ãçšããŠçŽæ¥ã»ãããããã¯ãªã¢ãããŸãã
SSPã€ã³ã¿ãã§ãŒã¹ã«ã€ããŠ
SSPã¯ããŒããŠã§ã¢SS#端åãåããŠããŸãããSS# (P0.20)ã«å¯ŸããŠã¯GP-OUT端åãäœ¿ãæ¹ããã£ãšç°¡åã§ãã
Hwreg
Hwritebytes
ãããã®é¢æ°ã«ãã£ãŠLPC2138ã®SSPããŒããŠã§ã¢ãçšããŠMAX3421Eã«ã¬ãžã¹ã¿ããã³FIFOããŒã¿ãæžã蟌ã¿ãŸããæ¥é åã®Hã¯ãã¹ãã®åäœã衚ããŸããHwregã«ãã£ãŠ1åã®ã¬ãžã¹ã¿å€ãæžã蟌ã¿ãHwritebitesã«ãã£ãŠMAX3421Eã®FIFOã«è€æ°ãã€ããæžã蟌ã¿ãŸãã
Hrreg
Hreadbytes
ãããã®é¢æ°ã¯LPC2138ã®SSPããŒããŠã§ã¢ãçšããŠMAX3421Eããã¬ãžã¹ã¿ãšFIFOããŒã¿ãèªã¿åããŸãã
SSPã€ã³ã¿ãã§ãŒã¹ã®è©³çŽ°èª¬æ
SSPããŒããŠã§ã¢ã¯éä¿¡ããã³åä¿¡çµè·¯ã«ããŒã¿çšã®FIFOãåããããšããããã³ãŒãã£ã³ã°åé¡ãååšããŸããSPIã®åäœã§ã¯ã8ãããã®è»¢éåºåããšã«ãåžžã«8ãããã®è»¢éå ¥åã䌎ããŸããLPC2138ã¯æ¬¡ã®ã¹ããããçšããŠMAX3421Eã®SPIã«ã¢ã¯ã»ã¹ããŸãïŒ
- SS#ãã¢ãµãŒã(ããŒ)
- ã¬ãžã¹ã¿çªå·ãšæ¹åããããããªãã³ãã³ããã€ããéä¿¡
- 1ãã€ã以äžã®ããŒã¿ãéä¿¡/åä¿¡
- SS#ããã¢ãµãŒã(ãã€ïŒ
SPIã®æžèŸŒã¿ã¯ç°¡åã§ããŒãã¹ãŠãåºåãããå ¥åFIFOå ã®ããŒã¿ã¯ç¡èŠãããŸããããããèªåãã¯ãã£ãšè€éã§ããããã¯èªåãFIFOã«ã¯ãã¹ããã2ã§èªåçã«ã¯ããã¯å ¥åãããå°ãªããšãæ£ãããªã1ãã€ããååšããããã§ãããŸããè€æ°ãã€ããæžã蟌ãã åã®åäœã§ãããŒã¿ã®äžã«å€ããã®ãååšããå¯èœæ§ããããŸããå ¥åFIFOã¯ããŒããŠã§ã¢ã«ãã£ãŠçŠæ¢ããããããŸãã¯æ¶å»ããããããããšãã§ããŸããããããã£ãŠãSPIããŒã¿ãèªã¿åãã³ãŒãã¯æåã«ãread FIFO not empty (èªåãFIFOã空ã§ã¯ãªã)ãšãããã©ã°ããã¢ãµãŒãããããŸã§ãSSPDRããè€æ°ãã€ããèªã¿åãããšã«ãã£ãŠãããã¥ã¢ã«ã§æ¶å»ããªããã°ãªããŸããã
Pwreg
PwregAS
Pwritebytes
ãããã®é¢æ°ã«ãã£ãŠLPC2138ã®SPIããŒããŠã§ã¢ãçšããŠMAX3420Eã«ã¬ãžã¹ã¿ããã³FIFOã®ããŒã¿ãæžã蟌ã¿ãŸãã2çªç®ã®é¢æ°ã«ãã£ãŠæåã®é¢æ°ãšåã1åã®ã¬ãžã¹ã¿ã«æžã蟌ã¿ãŸããããããåæã«SPIã³ãã³ããã€ãã®ACKSTATããããã»ããããŸããããã¯USB CONTROL転éãçµçµãããã·ã§ãŒãã«ããã§ãã詳现ã¯ã¢ããªã±ãŒã·ã§ã³ããŒã3598 MAX3420Eããã°ã©ãã³ã°ã¬ã€ãã調ã¹ãŠãã ããã
Prreg
PrregAS
Preadbytes
ãããã®é¢æ°ã«ãã£ãŠLPC2138 SPIããŒããŠã§ã¢ãçšããŠMAX3420Eããã¬ãžã¹ã¿ããã³FIFOã®ããŒã¿ãèªã¿åããŸãã2çªç®ã®é¢æ°ã«ãã£ãŠæåã®é¢æ°ãšåã1åã®ã¬ãžã¹ã¿ããèªã¿åããŸããããããåæã«SPIã³ãã³ããã€ãã®ACKSTATããããã»ããããŸãã
readout
ãã®é¢æ°ã¯MAX3421Eã®æ±çšåºå端åGPO[6:0]ã«æ¥ç¶ããã7ã»ã°ã¡ã³ãã®èªåãå€ãæŽæ°ããŸãããã®ããšã«ãããUSB Aã³ãã¯ã¿(EVãããã®J1)ã«æ¥ç¶ãããVBUSã¹ã€ãããå¶åŸ¡ããGPO[7]ã®èšå®å€ãä¿åãããŸãã
3421_Host.C
ãã®ã¢ãžã¥ãŒã«ã¯USBããã€ã¹ã調æ»ããŠMCB22310ã®ã·ãªã¢ã«ããŒãã䜿ã£ãŠãšãã¥ã¡ã¬ãŒã·ã§ã³ããŒã¿ãéç¥ããMAX3421E USBãã¹ããå®è£ ããŸããåèã®ããã«ãä»é²Aã¯3420_HIDKB.Cã«å®è£ ãããçµèŸŒã¿ããã€ã¹ããã¹ãããšãã¥ã¡ã¬ãŒãããã®ãLeCroy (CATC)ããã¹ãã¬ãŒã¹ããŠãããšããã瀺ããŠããŸãã
ãã®ã¢ãžã¥ãŒã«ã«ã¯3ã€ã®ã¿ã€ãã®é¢æ°ããããŸãïŒ
- åæå
- ãŠãŒãã£ãªãã£é¢æ°
- main( )ã«ã³ãŒã«ããããã€ã¬ãã«é¢æ°
以äžã«ç€ºã説æã¯ãã®é åºã«åŸã£ãŠããŸãã
Reset_Host
MAX3421Eã«ã¯é»æºãªã³ãªã»ãããåãã£ãŠããããããã®æäœã¯å¿ é ã§ã¯ãããŸãããããããã³ãŒããéçºãããšãã黿ºã¯ãããããµã€ã¯ã«ãããŠããªããããåãããã°ã»ãã·ã§ã³ã®æåã«ãããããªã»ããããã®ã¯è¯ãèãã§ãããªã»ãããããšãã·ãŒã³ã¯ã¯ãªã¢ãªç¶æ ã§å§åããåã®ãããã°ã»ãã·ã§ã³ããåŒãç¶ããã®ã¯äœããªããªããŸãã
MAX3421Eããªã»ãããããšãå èµã®çºæ¯åšã忢ããŸãããªã»ããããã¢ãµãŒããããåŸããã®é¢æ°ã¯OSCOKIRQããã(Oscillator OK Interrupt Request)ãæå¹ã«ãªããŸã§ãåŸ æ©ãããã®åŸã§åŸ©åž°ããŸãã
initialize_3420
ãã®é¢æ°ã¯3420_HIDKB.Cã¢ãžã¥ãŒã«å ã«ãããŸãã
initialize_ARM_Interrupts
ãã®é¢æ°ã¯ARMãã¯ãã«å²èŸŒã¿ã次ã®ããã«èšå®ããŸãïŒ
- EINT0ã¯MAX3420E INT端åã«æ¥ç¶ããããã©ã€ãªãªãã£0 (æåªå é äœ)ã䜿ããŸãã
- ã¿ã€ããŒ0ã¯åªå é äœ1ãçšããŠãã¢ã¯ãã£ãã£ãã£ã©ã€ããç¹æ» ããããã«äœ¿ãããŸãã
- EINT2ã«ã¯åªå é äœ2ãäžããããMAX3421E INT端åã«æ¥ç¶ãããŸããããã¯ãã®ããã°ã©ã ã§ã¯äœ¿çšãããŠããããåã«åèãšããŠæäŸãããŠããŸãã
- Timer1ã¯åªå é äœ3ãçšããŠéä¿¡/忢æŒããã¿ã³(3420_HIDKB.Cã§äœ¿ããã)ããã§ãã¯ããããã«äœ¿ãããŸãã
service_irqs
ãã®é¢æ°ã¯3420_HIDKB.Cã¢ãžã¥ãŒã«ã®äžã«ãããŸããããã¯HIDããŒããŒããšãã¥ã¡ã¬ãŒã·ã§ã³ãè¡ããŸããARMå²èŸŒã¿ãåæåããã³ãŒãã¯ãã®ã¢ãã¬ã¹ãå²èŸŒã¿ãã¯ãã«ãšããŠã€ã³ã¹ããŒã«ããããã«ã®ã¿å¿ èŠã§ãã
waitframes
USBãã¹ããæéèšæž¬ãè¡ãç°¡åãªæ¹æ³ã¯1msã®ãã¬ãŒã ããŒã«ãŒãèšæ°ããããšã§ããµCãã¬ãžã¹ã¿ã®ãããSOFKAENAB = 1ãšèšå®ãããšããMAX3421Eã¯èªåçã«ãããã®ãã¬ãŒã ããŒã«ãŒãçæããŸãããã¬ãŒã ããŒã«ãŒã¯ãã«ã¹ããŒãã¢ãŒãã§ã®SOFãã±ãããŸãã¯ããŒã¹ããŒãã¢ãŒãã§ã®ïœ¢keep aliveãã«ã¹ããæ§æãããŸããFRAMIRQãããã¯ããã®å Žåã1ããªç§ããšã«ã¢ãµãŒããããŸãã
USB仿§ã¯äžå®ã®é·ãé å»¶æéã匷å¶ããŸããäŸãšããŠã¯ããã€ã¹ããªã»ããããåŸããã®ïœ¢ãªã»ããå埩æéãäžããŸããwaitframes颿°ãã³ãŒã«ããã®ã¯ãããã®æ¯èŒçé·ãé å»¶ãå®è£ ãã容æãªæ¹æ³ã§ãã
detect_device
ãã®é¢æ°ã¯USB-Aã³ãã¯ã¿J1ã«ãã©ã°ã€ã³ãããUSBããã€ã¹ãæ€åºããåŸã§åŸ©åž°ããŸãã
wait_for_disconnect
ãã®é¢æ°ã¯USB-Aã³ãã¯ã¿J1ã«ãã©ã°ã€ã³ãããUSBããã€ã¹ãå€ãããåŸã§åŸ©åž°ããŸãã
Send_Packet
ãã®é¢æ°ã¯USBãã±ãããéä¿¡ãããã¹ãŠã®é¢æ°ã«ãã£ãŠã³ãŒã«ãããŸããå³9ã¯INãã©ã³ã¶ã¯ã·ã§ã³ã®ãã¹ãã¬ãŒã¹ãšãããäœãåºãCã¹ããŒãã¡ã³ãã瀺ããŠããŸãã
å³9. MAX3421Eãžã®C颿°ã®ã³ãŒã«ãUSBãã¹ã¢ã¯ãã£ããã£ãåŒãèµ·ãããŠããŸãã
- µCã¯FNADDRã¬ãžã¹ã¿ã®é¢æ°ã¢ãã¬ã¹ãèšå®ããŸããããã¯åãã±ããã§æ¯åç¹°ãè¿ãå¿ èŠã¯ãããŸãããããã¯ããŒããããå€ã¯ÂµCãFNADDRã¬ãžã¹ã¿ãåããŒããããŸã§ç¶ãããã§ãã
- µCã¯USBããŒã¯ã³ãšãšã³ããã€ã³ããæ±ºå®ããŠãHXFRã¬ãžã¹ã¿ã«æžã蟌ãããšã«ãã£ãŠè»¢éãéå§ããŸãããã®åŸãHXFRDNIRQ (Host Transfer Done) IRQãã¢ãµãŒããããã®ãåŸ æ©ãã転éã®çµäºãéç¥ããŸãã
- µCã¯ãã©ã³ã¶ã¯ã·ã§ã³ã®åºåãæ±ºå®ããããã«HRSL (ãã¹ãã®çµæ)ã¬ãžã¹ã¿ãèªã¿åããŸãããã®çµæåŸããã16åã®ã³ãŒãã¯æ¬¡ã®ããšã瀺ããŸãïŒ
- æå(ACK)
- ããã€ã¹ããžãŒ(NAK)
- ç°åžžãªãã³ãã·ã§ãŒã¯(STALL)
- ã¿ã€ã ã¢ãŠããããã«ããŸãã¯ãã¹ãšã©ãŒã®ãããªããã€ã¹åé¡
- µCã¯ãã€ãã«ãŠã³ãã¬ãžã¹ã¿ãèªã¿åãããã®åŸãRCVFIFOãã¢ã³ããŒãããããŒã¿ããã€ãã¢ã¬ã€ã®äžã«éé¿ããŸãã
ãã®é¢æ°ã¯NAKã®ãªãã©ã€ãæ±ããŸãããã®è»¢éã¯æ¬¡ã®ããšãèµ·ãããŸã§ç¶ããŸãïŒ
- ACKãã³ãã·ã§ãŒã¯ãåŸãããŸãã¯
- 宿°NAK_LIMITã«ãã£ãŠèšå®ãããããªã»ããéçãè¶ ããã
ããã€ã¹ãå¿çããªãå Žåã¯ã颿°ã¯éçå€ã®RETRY_LIMITã«éãããŸã§ã転éããªãã©ã€ããŸãã
CTL_Write_ND
ãã®é¢æ°ã¯ããŒã¿æ®µãªãã«(_ND = no dataïŒCONTROL-Writeãã©ã³ã¶ã¯ã·ã§ã³ãå®è¡ããŸãããã®é¢æ°ã¯ãã¹ãã®Set_Addressãªã¯ãšã¹ãã«å¯ŸããŠã®ã¿ã³ãŒã«ãããŸãããã®ããã«Send_Packetã«å¯ŸããŠ2ã€ã®ã³ãŒã«ãè¡ããŸãïŒæåãSETUPãã±ããã«å¯ŸããŠã2çªç®ã¯INãã³ãã·ã§ãŒã¯ãã±ããã«å¯ŸããŠã§ãã
IN_Transfer
ãã®é¢æ°ã¯Send_Packet (INãèŠå®)ã«å¯ŸããŠUSBããŒã¿ã¬ã³ãŒããæ¢çŽ¢ããããã«å¿ èŠãšããã ããã³ãŒã«ãããŸããMAX3420EãšMAX3421Eã®ãšã³ããã€ã³ãFIFOã¯64ãã€ãé·ãšé·ãèšè¿°åã§ãããäŸãã°ãã±ããããŒã¿ãç¹ãåãããŠå€§ããªã¢ã¬ã€(XfrData[2000])ã«ããããã«ãè€æ°åã®INãªã¯ãšã¹ããå¿ èŠãšããŸãã
CTL_Read
ãã®é¢æ°ã¯3段ã®CONTROL-Read USBãã©ã³ã¶ã¯ã·ã§ã³ãå®è¡ããŸãã3ã€ã®ã³ãŒã«ãè¡ããŸãïŒ
- SETUPãã±ãããçºè¡ããããã«ãSend_Packetãå®è¡ãã
- ããŒã¿ãXfrData[]ã«åŸãããã«IN_Transferãå®è¡ãã
- OUTãã³ãã·ã§ãŒã¯ãã±ãããçºè¡ããããã«Send_Packetãå®è¡ãã
enumerate_device
ãã®é¢æ°ã«ãã£ãŠä»é²Aã«ç€ºãããã«10åã®è»¢éãå®è¡ãããŸãããã®é¢æ°ã¯ããŒã¬ãã«ã®USBã®ä»äºãè¡ãããã«åã®é¢æ°ãã³ãŒã«ããããããã®é¢æ°ã調ã¹ãããšã«ãã£ãŠãšãã¥ã¡ã¬ãŒã·ã§ã³ã¹ãããã远ããããã®ã¯å®¹æã§ãã
print_error
ãã®é¢æ°ã¯æåŸã®ãã¹ã転éã®åºåãå°å·ããããã«4ãããã®HRSLå€(å³9ã®é ç®3)ããã§ãã¯ããŸããæž¡ãããå€ããŒãã®å Žåã¯äœãå°å·ãããŸããããã®é¢æ°ã§ã¯HRSLå€ãè¿ãããããããã®é¢æ°ãã³ãŒã«ããããšã«ããç°¡åã«ãšã©ãŒã®ãã§ãã¯ãè¡ãããšãã§ããŸããäŸã次ã«ç€ºããŸãã
if(print_error(HR)) return;
3420_HIDKB.C
ãã®ã¢ãžã¥ãŒã«ã¯MAX3420EãçšããŠUSBããªãã§ã©ã«ãå®è£ ããŸããããã¯æšæºHIDã¯ã©ã¹ã«æºæ ããŠãããæšæºã®ããŒããŒãããããã¹ããçºçãããã®ããã«ãããã¹ããèªåçã«ã¿ã€ãããŸãããšã³ããªãã€ã³ãã¯service_irqs颿°ã§ãããããã¯LPC2138 EINT1端åã«å¿çããŠå²èŸŒã¿ãµãŒãã¹ã«ãŒãã³ãšããŠéå§ãããŸããEINT1ã¯MAX3420Eã®INTåºå端åã«æ¥ç¶ãããŠããŸãã
Reset_Peripheral
ãã®é¢æ°ã¯Reset_Hostãšåãæ¹æ³ã§MAX3420Eããªã»ããããŸãã
initialize_3420
ãã®é¢æ°ã¯æ¬¡ã®3ã€ã®ããšãè¡ããŸãïŒ
- MAX3420Eã®SPIã€ã³ã¿ãã§ãŒã¹ããã«ãã¥ãŒãã¬ãã¯ã¹åäœ(MOSIãšMISO端åãå¥ã«ãã)ã«æ§æããã
- MAX3420Eã®INT端åãæ£ã®ãšããžã¢ã¯ãã£ãã«æ§æããã
- ã¢ããªã±ãŒã·ã§ã³ã§äœ¿ãããŠããMAX3420Eã®å²èŸŒã¿ãã€ããŒãã«ããã
service_irqs
ãã®é¢æ°ã¯çŽæ¥ãã¹ãªã»ãããšããã€ã¹åæãè¡ããŸãããŸãããã®é¢æ°ã¯ãšãã¥ã¡ã¬ãŒã·ã§ã³ãåãæ±ãããã«do_SETUPããããŒããŒãå ¥åããããã«do_IN3ãã³ãŒã«ããŸãã
泚ïŒã³ãŒããµã€ãºãå°ããããããã«ããã®ã¢ããªã±ãŒã·ã§ã³ã¯USBãµã¹ãã³ã-ã¬ãžã¥ãŒã ãåãæ±ããŸããããããè¡ãæ¹æ³ã®äŸã¯ã¢ããªã±ãŒã·ã§ã³ããŒã3690 MAX3420Eã®USBãšãã¥ã¡ã¬ãŒã·ã§ã³ã³ãŒã(ããã³ãã®ä»)ã«èšèŒããŠãããŸããAN3690ã®äžã®ãšãã¥ã¡ã¬ãŒã·ã§ã³ã³ãŒãã¯3420_HIDKB.Cã«å¯Ÿããåºç€ãšããŠäœ¿ãããŸããã
do_SETUP
ãã®é¢æ°ã¯8ãã€ãã®SETUPãã±ããå ã®ããŸããŸãªãã€ããæ€æ»ããããšã«ãã£ãŠããã€ã¹ãšãã¥ãŒã¡ã¬ãŒã·ã§ã³ãåãæ±ãããã®åŸãå颿°ãã³ãŒã«ããŠåã ã®ãªã¯ãšã¹ããåãæ±ããŸãããã®ã³ãŒãã¯USBæšæºã®ãªã¯ãšã¹ãã¿ã€ãã®ã¿ãæ±ããŸãããã®çç±ã¯ã¢ããªã±ãŒã·ã§ã³ãUSBã¯ã©ã¹ããã³ããŒãªã¯ãšã¹ããå®è£ ããªãããã§ãã
do_IN3
ãã®é¢æ°ã¯HIDKB_enum_tables.hã®äžã®Message[]æåã¢ã¬ã€ã«åŸã£ãŠããŒã¹ãããŒã¯ãéä¿¡ããŸããå³10ã«ç€ºãããã«ãæååœãã3ãã€ãã®ãã©ãŒãããã¯åãã€ã³ã¯ã«ãŒããã¡ã€ã«å ã®HIDã¬ããŒãèšè¿°åã§å®çŸ©ãããŸãã
å³10. ãã®ã¬ããŒãèšè¿°åã¯ããŒããŒãã®ããŒã¹ãããŒã¯ã®ããã®3ãã€ãããŒã¿ãã©ãŒããããèŠå®ããŸãã
æåŸã®èå¯ãšãæã
J1ã«æ¥ç¶ããUSBããã€ã¹ã¯10åçš®çšåºŠã®å ¥æå¯èœãªãããã§ãå¯èœã§ãããããã£ãŠãèšããŸã§ããªãããã¹ãã®ãšãã¥ã¡ã¬ãŒã·ã§ã³ãªã¯ãšã¹ãã«å¯Ÿãæ§ã ãªå¿çããããŸããæºæ ãã¹ãæžã¿(USBã®ããŽè¡šç€ºãããããšã§åãã)ã®ããã€ã¹ã¯ãšãã¥ãŒã¡ã¬ãŒããããŠããšã©ãŒã瀺ããªãçã§ãããã®ããã°ã©ã ã®ãšã©ãŒãã§ãã¯æ©èœã¯åãã¹ããã©ã³ã¶ã¯ã·ã§ã³ã®åŸã§ãHRSLã®å€ã調ã¹ãæ§æãšãªã£ãŠããŸãããã®ãšã©ãŒãã§ãã¯æ©èœã¯åºç¯ã«ã¯è©ŠéšãããŠããŸããããã®çç±ã¯å€ãã®ãšã©ãŒç¶æ ãäœãåºãããšãå°é£ã ããã§ãã
ä»é²A
3420E_HIDKB.C ãšãã¥ã¡ã¬ãŒã·ã§ã³ã«å¯ŸããUSBãã¹ãã¬ãŒã¹
å³ã®æ¡å€§(PDFã234kB)