Microchip PIC16F1454 でPC電源連動型USB-HUBを作ってみた。

自作PCのUSB電源が常にオン状態であるためUSB機器との電源連動ができなくて困っていた。市販のPC電源連動型ハブも試して見たが駄目。しょうがないので自作してみた。
aitendoのUSB2.0-HUBチップFE1.1S(100円)と秋月電子のPIC16F1454(130円)を使い、FE1.1Sの4ポートあるうちの一つをPIC16F1454に直結、1ポートを未使用、残りの2ポートを外部機器用とするバスパワー動作の2ポートハブ構成としてみた。

外部機器側のUSB電源はPC電源ON後のBIOS或いはOS起動中にONになりシャットダウン中にオフになる。
PIC16F1454はCDC-ACMとして構成されておりWindows/Linuxの標準デバイスドライバーのみで動作する。そのUSBステータスを判断することにより電源制御している。実装はしてないがPCとの通信が仮想COMポート経由で可能なことからPCアプリからUSBの電源制御を行うことも可能だ。以外に便利かもしれない...

回路はこんな感じ。

プログラムはMicrochipのPIC16F145X用の[USB Device – CDC – Basic]サンプルコードから今回の目的には必要のないbuttons.c/h, leds.c/hを削除したうえで使用。

2018-06-29
system.cにタイマー割り込み処理を追加しないといけないのに公開するのを忘れてたので今更ながら公開。最初の#include “tmr0.h”と、最後のTMR0_ISR()だけ追加すれば良い。

ついでに改良版も投稿したのでどうぞ!
Microchip PIC16F1454 PC電源連動型USB-HUBを改良してみた。

2018-05-18
UEFI起動のPCの場合、USBデバイスは、UEFI起動中に一旦接続&切断され、その後のOS起動時に再度接続されるのだが正常に接続されない場合があった。USBデバイスの状態が不正になってるようなので、USBデバイス側から非アクティブになったときにUSBを切断&一定時間後に再接続するようにしてみた。
暫く様子を見ていたが問題ないようなので変更後のソースを公開。