
ãã®éåžžã«äººæ°ã®ãã䟿å©ãªãããã«ã€ããŠãHabréã«é¢ããèšäºããŸã ãªãã®ã¯å¥åŠã§ãã ãã®ã®ã£ãããåããå¿ èŠããããšæããŸãã ãã®èšäºã§ã¯ãFTDI FT232Hããããšãã®ã¢ããã°ãããŸããŸãªã¢ããªã±ãŒã·ã§ã³ã«äœ¿çšããããã€ãã®èå³æ·±ãæ¹æ³ã«ã€ããŠèª¬æããŸãã
ããã€ãã®èšèïŒæ¯èŒçå®äŸ¡ã§ãé ç·ãšããã°ã©ã ãç°¡åãäžè¬çãªUSB 2.0ã³ã³ããŒã¿ãŒ<->ã·ãªã¢ã«ãããã³ã«ïŒ USART ã SPI ã I2C ã JTAG TAP ãããã³GPIOããããã³ïŒ USBçµç±ã®PCãããã³ä»ã®ããã€ã¹ã®ãã¹ããšãããã°çšã
ãã®ãããäžã®ç°¡åãªãã¬ã€ã¯ã¢ãŠãããŒããããUARTã³ã³ããŒã¿ãŒãSPIããã°ã©ããŒãJTAGãããã¬ãŒãI2Cãã¹ã¿ãŒãGPIOããããã³ã°ã³ã³ããŒã¿ãŒïŒããã³è¶ é³æ³¢åšæ³¢æ°ãå¿ èŠãšãããå¯èœãªéãèæ§ã®ããä»ã®ãããã³ã«ãç°¡åãã€èªç¶ã«äœæã§ããŸãïŒãã©ã¹1ç·ãªã©ãUSBã¹ã¿ãã¯ã«ãã£ãŠå°å ¥ãããé 延ïŒã
äžèšã®æ©èœã«èå³ãããå Žåã¯ãcatã®äžã§ãé¡ãããŸãã
ã¡ãã£ãšããæŽå²
FTDIã¯ã1992幎ã«ã¹ã³ããã©ã³ãã®ã°ã©ã¹ãŽãŒã§èšç«ãããŸããã 圌女ã¯USBé¢é£ãœãªã¥ãŒã·ã§ã³ãå°éãšããŠãããFT232ã·ãªãŒãºUSBã·ãªã¢ã«ã³ã³ããŒã¿ãŒã§ç¥ãããŠã ãŸãããã㯠ãDIYããŒããŠã§ã¢ãšãã€ã¯ãã³ã³ãããŒã©ãŒãã¡ãŒã ãŠã§ã¢ã«é¢ããããŸããŸãªèšäºã§Habréã§æ¢ã«äœåºŠã èšå ã ã ãŠããŸãã ãã®ã·ãªãŒãºã¯åŒãç¶ãæ£åžžã«çç£ããã³è²©å£²ãããŠããŸãããé²æ©ã¯ãŸã æ¢ãŸã£ãŠãããã2009幎ã®çµããã«FT2232Dãããã®ãªãªãŒã¹ã«ãããã·ãªãŒãºã®ããªããŒãããéå§ããããã©ãŒæ©èœã®æ¢åã®æ©èœã§ãããã«ããããã³ã«åæã·ãªã¢ã«ãšã³ãžã³ ïŒ MPSSEïŒããã®èšäºã§èª¬æããŸããMPSSEãã¯ãããžãŒãšãã®ãµããŒãããã
ãã®ãã¯ãããžãŒã¯ãã·ãªã¢ã«ãããã³ã«SPIãI2Cãããã³JTAGã®ããŒããŠã§ã¢ãµããŒããæäŸãããšãšãã«ãããããMPSSEã¢ãŒããšåŒã°ããç¹å¥ãªã¢ãŒãã«ããåŸãGPIOãããžã£ã³ããããæ©èœãæäŸããŸãããã®ã¢ãŒãã¯çŸåšãFTDIã補é ãã4ã€ã®ç°ãªãã³ã³ãããŒã©ãŒã§ãµããŒããããŠããŸãã
FT232HãFT2232DãFT2232HãFT4232Hã
ããŸããŸãªã¢ãŒããã¯ãã£ãšã¡ãŒã«ãŒã®ãã€ã¯ãã³ã³ãããŒã©ãŒã§ãã®ã¢ãŒãããšãã¥ã¬ãŒãããããã®ããŸããŸãªãããžã§ã¯ãããããŸããããã®èšäºã§ã¯FTDIã®ã¿ãæ€èšããŸãã
åãããã³ã«ã®é ç·å³ãåãããã§ãµããŒããããŠããæ©èœã®ãªã¹ããããã³èª¬æãå«ãæè¡ã®åªãã玹ä»ã¯ã MPSSE Basicsãšããååã®ã¢ããªã±ãŒã·ã§ã³ããŒã135ã«ãããŸãã
察å¿ãããããã³ã«ã®æ¥ç¶ãšæäœã®è©³çŽ°ã¯ãå¥ã ã®ANã«ãããŸãïŒ SPI ã I2C ã JTAG ã
çŸåšããµããŒããããŠãã4ã€ã®ãããã®ãã¡æ幎å°ã®æè¡ä»æ§ã§ããFT232Hããå°ãã ãã§ãããæ®ãã®éšåã¯ãã£ãã«ã®æ°ãšç¹å®ã®æ©èœïŒãã«ãã€ã³LDOã³ã³ãããŒã©ãŒãªã©ïŒã®æç¡ã®ã¿ã倧ããç°ãªãããã§ãã
ããŒã¿ã·ãŒãããããã€ãã®éèŠãªTXãåŒçšãããŠãã ããïŒ
- MPSSEãµããŒã
- æ倧12 MBaudã®é床ã®USB <-> USARTïŒRS232é床ã¯ãå€éšããžãã¯ã¬ãã«ã·ãããããã«ãã£ãŠå¶éã§ããŸãïŒ
- 調æŽå¯èœãªæ倧é»æµïŒ4ã8ã12ããŸãã¯16 mAïŒãåããæ§æå¯èœãªGPIOãã³
- 端æ«èšå®ããªã»ããåŸã®åäœã¢ãŒããUSB VIDãDIDãããã³èª¬ææååãå€éšEEPROMã«ä¿åããUSBçµç±ã§äžæžãããå¯èœæ§ãã
- ã³ã¢é»å§1.8 VïŒå ¥å-3.3 Vã5 VïŒããã³-3.3 VïŒãã¹ãŠã®ãã³ã5 Vã«èæ§ïŒ
- 枩床ç¯å²-40°Cã85°C
- LQFP48ããã³QFNããã±ãŒãžã§å©çšå¯èœ
- WindowsãMacOS XãLinuxã§å©çšå¯èœãªãã©ã€ããŒ
ããã«USARTã«ã€ããŠè¿œå ãããã®ã¯äœããããŸãã-ããã¯ã·ãªãŒãºå ã®ãã¹ãŠã®ãããã®åäœã®ã¡ã€ã³ã¢ãŒãã§ãããå®å šã«åäœããŸãã å¿ èŠãªãã¹ãŠã®ã¹ããããããèšå®ãšããŒããŠã§ã¢ããªãã£ããµããŒããããŠãããããå¿ èŠã«å¿ããŠç¬èªã®USBã¢ãã ãå®å šã«äœæã§ããŸãã
ããããGPIOã€ã³ã¿ãŒãã§ã€ã¹ã®ã¿ãå¿ èŠãšããå Žåããã£ãã«ããšã«16ãã³ïŒMPSSEã¢ãŒãïŒããããŸãããããŒããŠã§ã¢ã§ãµããŒããããŠãããããã³ã«ã®ãããããšGPIOã䞊è¡ããŠäœ¿çšããå Žåã¯ã12ãã³ãã䜿çšã§ããŸããã
æ§æã®èšé²ïŒå€éšEEPROMã䜿çšïŒã¯FT_Progã«ãã£ãŠå®è¡ãããŸããå©çšå¯èœãªãªãã·ã§ã³ã¯ã»ãšãã©ãªããæãéèŠãªã®ã¯ãã³ããŒIDãããã€ã¹IDã説æãã·ãªã¢ã«çªå·ã§ãã
ãããã¯é»åãæ°ã«ãããäžãããããã®ãé£ã¹ãŸãïŒäžèšã®ç¯å²ã§äžããããå ŽåïŒãããã®å åŒã«ã¯çµ±åãããLDOã¬ã®ã¥ã¬ãŒã¿ããªããããUSBé»æºã«ã¯å€éšã®ãã®ã䜿çšããå¿ èŠããããŸãã
LQFP48ã±ãŒã¹ã¯ã枩颚ã¹ããŒã·ã§ã³ãé»åã¬ã³ãžçšããããåããã¯ãã ããŠããªãå Žåã§ããèªå® ã§éåžžã«ã¯ãã ä»ãå¯èœã§ããããã¡ãããã¹ãŠã¯æã«äŸåããŸãã QFNã®ã¯ãã ä»ãã«ã€ããŠã¯èª¬æããŸããããã®ãããªã±ãŒã¹ãã¯ãã ä»ãã§ããå Žåã¯ãããããFT232ã«ã€ããŠè€æ°åèããããšãããã§ãããã
ãã©ã€ããŒã«ã€ããŠã¯ãFTDIã2çš®é¡ã®ãã©ã€ããŒããã€ã€ãªãã£ããªãŒã§æäŸããããšãè¿œå ãã䟡å€ããããŸã-Virtual Comã§ãã Portããã³D2XX Directããã ããMPSSEã䜿çšããã«ã¯åŸè ã®ã¿ãå¿ èŠã§ãã ç¡æã®libusbãã©ã€ããŒlibftdiããããŸãã
äœãã¯ãã ä»ãããããªãïŒ
ã¯ãã ä»ããããããªã人ã®ããã«ãFT2232HãããïŒç°¡åã«ããããã«2ã€ã®FT232HãšèŠãªãããšãã§ããFT232Hã®2ãã£ãã«ããŒãžã§ã³ïŒãå¿ èŠãªãã¹ãŠã®ãã€ã³ãã£ã³ã°ãããã³å€éšEEPROMãè£ åããå€æ°ã®ãã¬ãŒã¯ã¢ãŠãããŒããåžå Žã«ãããŸããç§ãè³Œå ¥ããããŒãã®äŸ¡æ Œã¯15ãŠãŒãã§ããCISã§ã¯ãçŽ600ã«ãŒãã«ã§åæ§ã®ããŒããé éãªãã§è³Œå ¥ã§ããŸãïŒ ããšãã° ã DiHaltããFT2232Dã®ãªãã·ã§ã³ãèŠæ±ããã ãã§ãã
ç§ã®ããŒãã¯æ¬¡ã®ããã«ãªããŸãã

å·ŠåŽ-é»æºãã°ã©ã³ãããã£ãã«Aã®16ãã³ãå³åŽ-é»æºãã°ã©ã³ãããã£ãã«Bã®16ãã³ããªã»ããããã³ãŠã§ã€ã¯ã¢ããã TXããã³RXãã€ãªãŒãã¯ãUSARTã¢ãŒãã§ã®ã¿æ£åžžã«åäœããŸãïŒMPSSEã䜿çšããŠããã°ã©ã ã§å ·äœçã«ç¹ç«ããªãéãïŒããããã£ãŠãããŒãã«ã¯ãã ä»ãããããšããããŸããã§ããã LDOã³ã³ãããŒã©ãšEEPROMãããã¯ãããŒãã®èé¢ã«ãããŸãã
å®çšå
ååãªçè«ãšç©èªãã§ããã®ã§ã次ã«ç·Žç¿ã«ç§»ããŸãããã ããªãã¯ãã§ã«ãã®ãããªããŒããæã£ãŠãããšæ³åããŠãã ããããããŠä»ããªãã¯ããªããããã§äœãã§ãããã«ã€ããŠèããŠããŸãã ãããŠãããã«äœããããŸãïŒ0 ã ç¶èŠªãæããããã«ãããã«æ°ããMPSSEã®ãªãUSB <-> USARTã³ã³ããŒã¿ãŒ ã ããã«ã¯å€ãã®ã¢ããªã±ãŒã·ã§ã³ãããã倱æãããã¡ãŒã ãŠã§ã¢ã«ãã£ãŠæ®ºãããã¢ãã ãšã«ãŒã¿ãŒã埩å ããããïŒãããã«ïŒç ŽæããããŒããã©ã€ãã埩å ããããããŸããŸãªæ©åšã®ãããã°ã€ã³ã¿ãŒãã§ã€ã¹ã«æ¥ç¶ãããããããšãã§ããŸããå€ãã®ã¢ããªã±ãŒã·ã§ã³ããããŸãã
1 å€ããå°ãªããæ°ããPCã®BIOSããã©ãã·ã¥ããã³åŸ©å ããããã®SPIããã°ã©ã㌠ïŒ2008幎以éã«è£œé ããããBIOSãä¿åããããã®SPIããããžã®å€§èŠæš¡ãªç§»è¡ã¯ãX58ã®å°å ¥ãšåæã«è¡ãããŸããïŒã SecureBootãã¯ãããžãŒïŒããã³ããã«ä»éãããã¯ãããžãŒïŒã®å°å ¥ã«ãããå€æŽãããBIOSãã¡ãŒã ãŠã§ã¢ã¯éåžžã®æäœããçæã®äžãæ©ãããã«ãªãããã®çµæããã·ã³ããããªãã¯ãããããã«è»ãéãããšãå¯èœã«ãªããŸããã å€éšã®SPIããã°ã©ããŒããããã®åé¡ãå®å šã«è§£æ±ºããŸãã
2 ã ããŸããŸãªMKçšã®JTAGãããã¬ãŒ ã çŸæç¹ã§ã¯ããã®ããŒãã§æ¬¡ã®MKããã©ãã·ã¥ããã³ãããã°ããŠããŸãïŒSTM32F1xx \ L1xx \ F4xxãInfineon XMC4500ïŒARM Cortex-MïŒãInfineon XE167FMïŒC166ïŒ CoLinkãšãéããŠããããã匷åãªAmontec JTAGKey2ã䜿çšãããš ãæ£åžžã«æš¡å£ã§ããŸãã
ïŒ ã ããšãã°ãããã»ããµãŸãã¯ãããªã«ãŒãã®VIDãå¶åŸ¡ããããã«äœ¿çšã§ããI2Cãã¹ãã¹ã¿ãŒ ãéåžžã®ç¶æ ã§ã¯ãI2Cã¯SMBusããã³PCBusãšäºææ§ããããPCã®äœéåšèŸºæ©åšã®ååããã³ã°ãããŸãã ãããŸã§ã®ãšããããã®ã¢ãŒããååã«ç 究ããŠããªãããããã®ã¢ãŒãã§ã®äœæ¥ã«ã€ããŠã¯èª¬æããŸããã
4 ã USB <-> GPIOã³ã³ããŒã¿ãŒ ãããã«åºã¥ããŠããããã°ã©ã ã§ãã¿ã³ãæŒããŠããã€ã¹ããªãã«ãããã·ãªãŒãºã®åçŽãªã¿ã¹ã¯ãšããœãããŠã§ã¢ã¬ãã«ã§ç¬èªã®ãããã³ã«ãå®è£ ãããªã©ã®ããè€éãªã¿ã¹ã¯ã®äž¡æ¹ãå®è£ ã§ããŸãã åæã«ãããã°ã©ã ã¯PCã§èšè¿°ãããŠãããå©ç¹ïŒèšèªã®éžæã®èªç±åºŠãšãªãœãŒã¹ãè±å¯ïŒãšæ¬ ç¹ïŒUSBã¹ã¿ãã¯ã®é 延ãšãã®äºæž¬äžå¯èœãªã¿ã€ãã³ã°ã«ãããéåžžã«é«éãªãããã³ã«ã®å®è£ ãèš±å¯ãããªãïŒã®äž¡æ¹ããããŸããã䜿çšããªãå¯èœæ§ãéåžžã«é«ããããã«äžæ £ããªäººã®ããã®éãšã®çžäºäœçšã®ããã®MKã¯è¯ãã§ãã
次ã®èšäºã®ããã«ãã©ã°ã©ã2ãæ®ããŠããã©ã°ã©ã1ã«ã€ããŠèª¬æããŸãã
SPIããã°ã©ããŒã®äœæ
FT232Hãããäžã®ããŒããSPIããã°ã©ããŒã«å€ããã«ã¯ã次ã®ãã®ãå¿ èŠã§ãã0.ããŒãèªäœ
1.ããšãã°ãææ°ã®ãã¶ãŒããŒãWinbond W25Q64BVã®ã¡ãŒã«ãŒã«äººæ°ã®ããSPIã€ã³ã¿ãŒãã§ã€ã¹ãåããEEPROMãããã ãã¹ã¯ãããããŒãã«ã¯ãDIP8ïŒã»ãšãã©ã®å ŽåïŒããã³SOIC8ïŒäžéšã®ã®ã¬ãã€ãã¢ãã«ãšEVGAã¢ãã«ïŒãæèŒãããŠããŸããBIOSãç Žæããå Žåã®äº€æãç°¡åã«ãããããéåžžããããã¯ã¯ãã ä»ããããããããŒããããŸãã¯ZIFãœã±ããã«åãä»ããããŸãã ã©ãããããã§ã¯ãBIOSãããã¯ã»ãšãã©ã®å Žåãã¶ãŒããŒãã«ã¯ãã ä»ããããŠãããããã°ã©ãã³ã°ã«ã¯ãããã®äžéšã«è£ çãããISPããŒããŸãã¯ç¹å¥ãªã¯ãªããã䜿çšããå¿ èŠããããŸã
2.ãã¡ãŒã ãŠã§ã¢äžã«é»æºãžã®#WPãã³ãš#HOLDãã³ãç· ããããã®2ã€ã®ãªãã·ã§ã³ã®4.7KΩæµæåšïŒããŒãäžã«ååãªç©ºã3.3 Vãã³ãããå Žåã¯ããããã䜿çšããã«è¡ãããšãã§ããŸãïŒ
3. EEPROMãããçšã®ãªãã·ã§ã³ã®ãœã±ããïŒç«¯åã«ã¯ã€ã€ãã¯ãã ä»ãããªãããïŒ
4. LinuxïŒãã¹ãŠã®ãžã§ã¹ãã£ãæãå°ãªãïŒãWindowsïŒãã®ä»ïŒããŸãã¯OS XïŒå ¬åŒã«ã¯ãµããŒããããŠããŸãããæ奜家ã®ã¿ããµããŒãããŠããŸãïŒãæèŒããPCã
5.ã·ã¹ãã ã«ã€ã³ã¹ããŒã«ãããlibftdiãµããŒãã§ã³ã³ãã€ã«ãããFlashromãŠãŒãã£ãªãã£ã
ããã«ããã¹ãŠãç°¡åã§ããFT232HãšEEPROMãã¹ããŒã ïŒ RushSPIããã°ã©ããŒã®ã¹ããŒã ããååŸïŒã«åŸã£ãŠæ¥ç¶ããŸã ã

ã³ãã³ãã©ã€ã³ãéããããã§ã³ãã³ããå®è¡ããŸãã
flashrom -p ft2232_spi:type=232H
ãã«ããã£ã³ãã«FTDIãããã®å Žåãæ¥ç¶ãããEEPROMããããã©ã®ãã£ã³ãã«ã«ããããè¿œå ã§ç€ºãå¿ èŠããããŸããããšãã°ãFT2232Hãšãã£ã³ãã«Aã®å Žåãã³ãã³ãã¯æ¬¡ã®ããã«ãªããŸãã
flashrom -p ft2232_spi:type=2232H,port=A
ãã®ã³ãã³ãã®åºåã¯æ¬¡ã®ããã«ãªããŸãã
Found chip "Winbond W25Q64.V" (8192 KB, SPI)
ããããèŠã€ãããªãå Žåã¯ãæ¥ç¶ã«åé¡ãããããlibftdiãªãã§flashromãæ§ç¯ãããŠããããWindowsããããlibusbããŒã¹ã®ã·ã¹ãã ã«ããã¡ãŒã«ãŒã®å¥ã®ãã©ã€ããŒãã€ã³ã¹ããŒã«ããå¿ èŠããããŸã ã
ããããèŠã€ãã£ãå Žåã¯ãè¿œå ã®ã¹ã€ãã-r dumpname.romã䜿çšããŠåãã³ãã³ãã§å 容ãèªã¿åãããã¹ã€ãã-w newbios.romã䜿çšããŠã³ãã³ãã§ãã¡ã€ã«ãæžã蟌ã¿ãŸã
å©çšå¯èœãªããŒããµããŒããããŠããããã°ã©ããŒããã®ä»ãã¹ãŠã®ãªã¹ãã¯ããããžã§ã¯ãã®å ¬åŒWikiã«ãããŸã ã FT232HããŒã¹ã®ããã°ã©ããŒã«é¢ããèšäºããããŸãã ãã¡ãã§ã ã
ãããã«
çµæã®ããã°ã©ããŒã¯8ã¡ã¬ãã€ãã®SPIããããçŽ150ç§ã§ãã©ãã·ã¥ããŸããããã¯é«éã§ã¯ãããŸããããé·ãããã15ãŠãŒãã§-ãŸã£ããåé¡ãããŸãããããã«ãããBIOSãç¹°ãè¿ã埩å ããŸãããã å®éšã« èããããŸããã§ããã
ïŒUSARTã³ã³ããŒã¿ãŒã¢ãŒãã§ã¯ãããŸããïŒãã®å©ããåããŠãå£ããããŒããã©ã€ããä¿®æ£ããããšãã§ããŸãã ã
ãã¡ãŒã ãŠã§ã¢ãšJTAGäžã®ããŸããŸãªMKã®ãããã°ã«ã€ããŠã¯ã次ã®èšäºã§èª¬æããŸãã
L \ Cã§çºçããå¯èœæ§ã®ãããšã©ãŒããšã©ãŒãããã³æ¬ é¥ãå ±åããŠãã ããã
èªãã§ãããŠããã®ãããã¯ãã¹ãèªãã§ãããŠããããšãã